OK. Descobri isso. Primeiro, a versão do Nexenta que estou usando é 3.1.3.5. O Nexenta é um dispositivo baseado no OpenSolaris que vende armazenamento em block via CIFS, NFS, Rsync, WebDAV e FTP. No nosso caso, estamos usando apenas para o NFS (v3 é o padrão. A v4 não está disponível para esta versão).
Então, tl; dr; no lado Nexenta:
Faça o login no Nexenta como root:
$ ssh [email protected]
Password:
Last login: Wed Aug 24 11:17:33 2016 from xx.xx.xx.xx
nmc@nex01:/$ option expert_mode = 1
nmc@nex01:/$ !bash
You are about to enter the Unix ("raw") shell and execute low-level Unix command(s). Warning: using low-level Unix commands is not recommended! Execute? Yes
root@nex01:/volumes#
root@nex01:/volumes# grep nfs /etc/passwd
nfs:x:60001:60001:NFS Anonymous Access User:/:/bin/sh
Observe os números após o primeiro x:#####:#####
- estes são o uid e o gid respectivamente.
no lado do cliente: crie usuário:
# groupadd nfs -g 60001 && useradd nfs -g 60001 ## untested. I did it the long way through natural process of elimination, so be careful here.
Tudo bem agora.
Monte o volume e verifique se o usuário nfs recém-criado pode gravar no volume NFS.
Versão longa:
Eu tive o lado do NFS configurado corretamente, até onde eu sei. A documentação foi útil, mas de certa forma foi apenas dividir breadcrumbs.
"Permitir acesso anônimo a esse compartilhamento. O diretório de nível superior compartilhado receberá acesso de leitura / gravação para o usuário anônimo 'nfs'. Se o modo de compartilhamento recursivo for definido como true, essa propriedade será propagada para subpastas existentes. que o acesso anônimo de leitura / gravação não é herdável - o acesso anônimo a sub-pastas futuras não será permitido até que seja explicitamente solicitado. O nome de usuário anônimo é 'nfs'. "
Meu shared_user
acabou se tornando "nfs", que ainda estava com falha (veja OP). Eu decidi, porque eu pensei que era um tiro longo, fazer o meu UID no lado do cliente coincidir com o do UID para 'nfs' no aparelho. Eu tive que fazer o login no dispositivo, iniciar um shell bash e, em seguida, executar o comando id
para obter o UID, que no meu caso foi 60001.
No cliente, alterei o usuário nfs
para corresponder ao UID no dispositivo. Aparentemente, o appliance exige que o UID / GID corresponda ao seu para que isso funcione. Eu imaginei que o servidor NFS ignoraria isso. Este foi o aparentemente o cerne da questão.
Agora, o appliance usa nfs: nobody para user: group. nobody
no lado do cliente (Linux) é um UID diferente, e mudar o UID para ninguém seria um pouco mais complicado e eu não sei o que eu poderia inadvertidamente afetar mudando esse groupid, então eu não toquei isto. O usuário nfs
na máquina do cliente era inexistente antes de começar a mexer, então não havia risco de quebrar nada. Existe um nfsnobody
no lado do cliente. Eu não testei usando e tenho certeza que não teria funcionado, já que a documentação é específica sobre o ID do usuário.
Também devo declarar aqui que o appliance foi definido especificamente para usar o sysauth para autenticação. Usar auth = none não era uma opção, pois o NFSv3 não parece gostar disso. :)
é tudo.