Pourquoi NFS ne me permet-il pas de monter un partage?

14

L'hôte

J'ai un hôte exécutant Ubuntu 12.04 sur 10.0.0.202. Il fournit un partage NFS pour les autres machines du réseau. Voici le contenu de /etc/exports:

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

L'intention ici est de partager le contenu de /media/storagedriveavec d'autres machines du réseau dans la plage IP 10.0.0.0 - 10.0.0.255.

Client de travail

Cela fonctionne correctement avec une machine cliente 10.0.0.40exécutant Ubuntu 13.10, connue sous le nom de MattDev. Cette machine /etc/fstabressemble à ceci:

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

Et ls -al /mnt/sur cette machine ressemble à ceci:

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

La sortie de idressemble à ceci:

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)

Client virtuel non fonctionnel

J'ai un deuxième ordinateur client, exécutant Ubuntu 12.10, en tant qu'OS invité sur un ordinateur hôte Windows 7. La machine hôte est sur le réseau en tant que 10.0.0.28. La machine invitée est gérée par Vagrant, en utilisant VirtualBox 4.3.6 comme fournisseur. J'appelle l'hôte Windows 7 AlexDevHost et l'invité Ubuntu AlexDevGuest.

Fonctionner showmount -e 10.0.0.202sur AlexDevGuest produit:

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

Cependant, lorsque j'essaie de monter le partage, il échoue:

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

J'ai donc commencé à chercher des problèmes:

$ 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)
$

Cet uid et gid est différent de l'utilisateur matt sur MattDev. J'ai donc jonglé avec l'uid pour vagabond, car j'ai lu que l'accès NFS est contrôlé en faisant correspondre l'adresse IP et les uids. Alors maintenant:

$ 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
$

Toujours pas de succès. Alors maintenant, je suis à court d'idées.

  1. Qu'est-ce que je fais mal?
  2. Si la partie uid est correcte, existe-t-il un moyen de vérifier que la machine du serveur NFS voit ma tentative d'accès comme provenant d' 10.0.0.28une autre adresse IP qui n'est pas dans la plage autorisée?
Alex
la source

Réponses:

16

D'accord, je l'ai réglé (ou du moins, je l'ai fait fonctionner, et je pense que je sais ce qui en est la cause).

J'ai ajouté le insecuredrapeau à la /etc/exportsligne sur le serveur NFS, alors maintenant cela ressemble à ceci:

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

Cet indicateur permet aux connexions de provenir de ports clients supérieurs à IPPORT_RESERVED (1024).

La commande mount fonctionne maintenant.

Ma conjecture quant à la raison pour laquelle l'absence d' insecureindicateur était le problème est que VirtualBox utilisait NAT pour transmettre la demande au réseau physique, donc alors que le port sur l'invité Ubuntu (AlexDevGuest) peut être inférieur à 1024, le port traduit sur l'hôte Windows 7 (AlexDevHost) était probablement supérieur à 1024, et donc bloqué. Mettre le insecuredrapeau signifiait que c'était autorisé.

Ce problème n'affecte évidemment pas la machine non virtuelle DevMatt.

Alex
la source
Fantastique travail de détective à ce sujet. J'utilise régulièrement des machines virtuelles VirtualBox d'Unbuntu comme environnements de «bac à sable» sur lesquels je peux lancer ou tester au lieu d'utiliser des serveurs de niveau de production ou même un serveur de développement par étapes, ce qui aide énormément.
JakeGould
Je veux vous dire merci dans une boucle infinie, en cherchant cela depuis longtemps et vous avez aidé. Toute idée pourquoi une telle restriction a été mise en place, pourquoi ne peuvent-ils pas laisser les connexions provenant de n'importe quel numéro de port affecter le numéro de port? Merci beaucoup.
mSatyam
@mSatyam Ce sera parce que vous devez être root pour vous connecter à un port inférieur à 1024, et il est probablement prudent de s'attendre à ce que les choses NFS s'exécutent en tant que root, au moins par défaut. La redirection de port que je faisais était en quelque sorte un "cas spécial".
Alex
Mais comment convaincre le réseau de VirtualBox d'utiliser un port inférieur à 1024? ..
Mikhail T.
Merci beaucoup ..
johnmin