Por que o NFS não me permite montar um compartilhamento?

Por que o NFS não me permite montar um compartilhamento?

O host

Eu tenho um host rodando o Ubuntu 12.04 em 10.0.0.202. Ele fornece um compartilhamento NFS para outras máquinas na rede. Aqui está o conteúdo de /etc/exports:

/media/storagedrive 10.0.0.0/24(rw,sync,no_subtree_check)

A intenção aqui é compartilhar o conteúdo /media/storagedrivecom outras máquinas da rede na faixa IP 10.0.0.0 - 10.0.0.255.

Cliente ativo

Isso funciona corretamente com uma máquina cliente 10.0.0.40executando o Ubuntu 13.10, conhecida como MattDev. Essa máquina /etc/fstabé assim:

UUID=8f8c838e-3ea2-457a-87f0-57b12dfab06c /               ext4    errors=remount-ro 0       1
UUID=427089d4-46a2-432d-9df4-7016bdfc7df2 none            swap    sw              0       0
10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive nfs rsize=8192,wsize=8192,timeo=14,intr

E ls -al /mnt/naquela máquina fica assim:

total 12K
drwxr-xr-x  3 root root    4.0K Feb  4 17:48 .
drwxr-xr-x 23 root root    4.0K Feb  5 08:44 ..
drwxrwxr-x  7 root plugdev 4.0K Feb  5 11:43 NetworkStorageDrive

A saída é idsemelhante a esta:

uid=1000(matt) gid=1000(matt) groups=1000(matt),4(adm),24(cdrom),27(sudo),30(dip),33(www-data),46(plugdev),112(lpadmin),124(sambashare)

Cliente virtual não funcional

Eu tenho uma segunda máquina cliente, executando o Ubuntu 12.10, como sistema operacional convidado em uma máquina host com Windows 7. A máquina host está na rede como 10.0.0.28. A máquina convidada está sendo gerenciada pelo Vagrant, usando o VirtualBox 4.3.6 como provedor. Vou ligar para o host do Windows 7, AlexDevHost, e para o convidado do Ubuntu, AlexDevGuest.

A execução showmount -e 10.0.0.202no AlexDevGuest produz:

Export list for 10.0.0.202:
/media/storagedrive 10.0.0.0/24

No entanto, quando tento montar o compartilhamento, ele falha:

$ sudo mount 10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive
mount.nfs: access denied by server while mounting 10.0.0.202:/media/storagedrive

Então comecei a procurar problemas:

$ ls -alh /mnt/
total 12K
drwxr-xr-x  3 root root 4.0K Feb  5 12:23 .
drwxr-xr-x 26 root root 4.0K Feb  5 12:23 ..
drwxr-xr-x  2 root root 4.0K Feb  5 12:23 NetworkStorageDrive
$ id
uid=1001(vagrant) gid=1001(vagrant) groups=1001(vagrant)
$

Esse uid e gid são diferentes do usuário matt no MattDev. Então, fiz malabarismos com o uid do vagrant, pois li que o acesso NFS é controlado pela correspondência do endereço IP e dos uids. Então agora:

$ id
uid=1000(vagrant) gid=1001(vagrant) groups=1001(vagrant)
$ sudo mount 10.0.0.202:/media/storagedrive /mnt/NetworkStorageDrive
mount.nfs: access denied by server while mounting 10.0.0.202:/media/storagedrive
$

Ainda sem sucesso. Então agora estou ficando sem ideias.

  1. O que estou fazendo de errado?
  2. Se a parte uid estiver correta, existe uma maneira de verificar se a máquina do servidor NFS está vendo minha tentativa de acesso como proveniente de 10.0.0.28, e não de algum outro IP que não esteja no intervalo permitido?

Responder1

Ok, resolvi (ou pelo menos fiz funcionar e acho que sei o que estava causando isso).

Adicionei o insecuresinalizador à /etc/exportslinha no servidor NFS, então agora fica assim:

/media/storagedrive 10.0.0.0/24(rw,sync,no_subtree_check,insecure)

Este sinalizador permite que as conexões sejam originadas de portas de clientes acima de IPPORT_RESERVED (1024).

O comando mount agora funciona.

Meu palpite sobre por que a falta do insecuresinalizador era o problema é que o VirtualBox estava usando NAT para passar a solicitação para a rede física, portanto, embora a porta no convidado do Ubuntu (AlexDevGuest) possa estar abaixo de 1024, a porta traduzida em o host do Windows 7 (AlexDevHost) provavelmente estava acima de 1024 e, portanto, bloqueado. Definir a insecurebandeira significava que era permitido.

Este problema obviamente não afeta a máquina não virtual MattDev.

informação relacionada