Por que o NFS não está me permitindo montar um compartilhamento?


14

O hospedeiro

Eu tenho um host, executando 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/storagedriveoutras máquinas na rede no intervalo de IP 10.0.0.0 - 10.0.0.255.

Cliente que trabalha

Isso funciona corretamente com uma máquina cliente 10.0.0.40executando o Ubuntu 13.10, conhecido como MattDev. Essa máquina /etc/fstabfica 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 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 de se idparece com isso:

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 que não trabalha

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 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 mate no MattDev. Então, eu pensei sobre o uid para vagrant, pois li que o acesso ao NFS é controlado combinando o endereço IP e os 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 do uid estiver correta, há uma maneira de verificar se a máquina do servidor NFS está vendo minha tentativa de acesso como proveniente 10.0.0.28e não algum outro IP que não esteja no intervalo permitido?

Respostas:


16

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

Eu adicionei o insecuresinalizador à /etc/exportslinha no servidor NFS, agora fica assim:

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

Esse sinalizador permite que as conexões se originem das portas do cliente acima de IPPORT_RESERVED (1024).

O comando mount agora funciona.

Meu palpite sobre o motivo pelo qual a falta da insecureflag foi o problema é que o VirtualBox estava usando o NAT para passar a solicitação para a rede física, portanto, enquanto a porta no convidado do Ubuntu (AlexDevGuest) pode estar abaixo de 1024, a porta traduzida no o host do Windows 7 (AlexDevHost) provavelmente estava acima de 1024 e, portanto, bloqueado. Definir a insecurebandeira significava que era permitido.

Obviamente, esse problema não afeta a máquina não virtual DevMatt.


Fantástico trabalho de detetive nisso. Eu uso rotineiramente VMs do VirtualBox do Unbuntu como ambientes "sandbox" em que posso jogar ou testar em vez de usar servidores de nível de produção ou mesmo um servidor de desenvolvimento encenado e isso ajuda imensamente.
JakeGould

Quero dizer obrigado em um loop infinito, procurando isso por muito tempo e você ajudou. Qualquer idéia de por que essa restrição eles colocaram, por que eles não podem permitir conexões provenientes de qualquer número de porta, como o número da porta afetará alguma coisa. Qualquer maneira muito obrigado.
precisa saber é o seguinte

@mSatyam Será porque você precisa ser root para se conectar a uma porta abaixo de 1024, e provavelmente é prudente esperar que o material NFS esteja sendo executado como root, pelo menos por padrão. O encaminhamento de porta que eu estava fazendo era um "caso especial".
7777 Alex

Mas como eu poderia convencer VirtualBox' rede para usar uma porta abaixo de 1024 ..?
Mikhail T.

Muito obrigado ..
johnmin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.