Por que o NFS não permite que eu monte um compartilhamento?

14

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 de /media/storagedrive com outras máquinas na rede no intervalo de IP 10.0.0.0 - 10.0.0.255 .

Cliente de trabalho

Isso funciona corretamente com uma máquina cliente em 10.0.0.40 , executando o Ubuntu 13.10, conhecido como MattDev. O /etc/fstab da máquina é 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/ nessa máquina é 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 de id é assim:

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 ativo

Eu tenho uma segunda máquina cliente, executando o Ubuntu 12.10, como um sistema operacional convidado em uma máquina host do 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 um provedor. Vou ligar para o AlexDevHost, host do Windows 7, e para o convidado do Ubuntu, AlexDevGuest.

A execução de showmount -e 10.0.0.202 no 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 por 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 é diferente do usuário matt no MattDev. Então eu fiz malabarismos sobre o uid para 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 não há sucesso. Então agora estou ficando sem ideias.

  1. O que estou fazendo de errado?
  2. Se a parte do uid estiver correta, há 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 algum outro IP que não esteja no intervalo permitido?
por Alex 05.02.2014 / 13:52

1 resposta

14

Ok, eu já trabalhei (ou pelo menos, eu fiz o trabalho, e eu acho que sei o que estava causando isso).

Eu adicionei o sinal insecure à linha /etc/exports no servidor NFS, então agora está assim:

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

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

O comando mount agora funciona.

Meu palpite sobre por que a falta do insecure flag foi o problema é que o VirtualBox estava usando o NAT para passar o pedido para a rede física, então a porta do convidado do Ubuntu (AlexDevGuest) pode estar abaixo 1024, a porta traduzida no host do Windows 7 (AlexDevHost) estava provavelmente acima de 1024 e, portanto, bloqueada. Definir a bandeira insecure significava que era permitido.

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

    
por Alex 05.02.2014 / 16:40