Warum erlaubt mir NFS nicht, eine Freigabe bereitzustellen?

14

Der Gastgeber

Ich habe einen Host, auf dem Ubuntu 12.04 läuft 10.0.0.202. Es bietet eine NFS-Freigabe für andere Computer im Netzwerk. Hier ist der Inhalt von /etc/exports:

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

Hiermit soll der Inhalt für /media/storagedriveandere Computer im Netzwerk im IP-Bereich freigegeben werden 10.0.0.0 - 10.0.0.255.

Arbeitender Client

Dies funktioniert korrekt mit einem Client-Computer 10.0.0.40unter Ubuntu 13.10, bekannt als MattDev. Diese Maschine /etc/fstabsieht so aus:

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

Und ls -al /mnt/auf dieser Maschine sieht das so aus:

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

Die Ausgabe von idsieht so aus:

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)

Nicht funktionierender virtueller Client

Ich habe einen zweiten Client-Computer, auf dem Ubuntu 12.10 als Gastbetriebssystem auf einem Windows 7-Host-Computer ausgeführt wird. Der Hostcomputer befindet sich im Netzwerk als 10.0.0.28. Der Gastcomputer wird von Vagrant mit VirtualBox 4.3.6 als Provider verwaltet. Ich werde den Windows 7-Host AlexDevHost und den Ubuntu-Gast AlexDevGuest anrufen.

Laufen showmount -e 10.0.0.202auf AlexDevGuest erzeugt:

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

Wenn ich jedoch versuche, die Freigabe bereitzustellen, schlägt dies fehl:

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

Also fing ich an, nach Themen zu suchen:

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

Diese UID und GID unterscheidet sich vom Benutzer Matt auf MattDev. Also habe ich über die UID nach Vagrant gejongliert, als ich gelesen habe, dass der NFS-Zugriff durch Abgleichen der IP-Adresse und der UIDs gesteuert wird. Also jetzt:

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

Immer noch kein Erfolg. Jetzt gehen mir die Ideen aus.

  1. Was mache ich falsch?
  2. Wenn der UID-Teil korrekt ist, kann ich dann überprüfen, ob der NFS-Server meinen Zugriffsversuch als von 10.0.0.28einer anderen IP- Adresse stammt, die nicht im zulässigen Bereich liegt?
Alex
quelle

Antworten:

16

Okay, ich habe es ausgearbeitet (oder zumindest, ich habe es zum Laufen gebracht und ich glaube, ich weiß, was es verursacht hat).

Ich insecurehabe der /etc/exportsZeile auf dem NFS-Server das Flag hinzugefügt , und jetzt sieht es so aus:

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

Mit diesem Flag können Verbindungen von Client-Ports oberhalb von IPPORT_RESERVED (1024) ausgehen.

Der Befehl mount funktioniert jetzt.

Meine Vermutung, warum das Fehlen des insecureFlags das Problem war, ist, dass VirtualBox NAT verwendete, um die Anfrage an das physische Netzwerk weiterzuleiten. Während also der Port auf dem Ubuntu-Gast (AlexDevGuest) möglicherweise unter 1024 lag, war der übersetzte Port eingeschaltet Der Windows 7-Host (AlexDevHost) war wahrscheinlich über 1024 und daher blockiert. Das Setzen des insecureFlags bedeutete jedoch, dass es erlaubt war.

Dieses Problem betrifft offensichtlich nicht die nicht-virtuelle Maschine DevMatt.

Alex
quelle
Fantastische Detektivarbeit dazu. Ich verwende regelmäßig VirtualBox-VMs von Unbuntu als "Sandbox" -Umgebungen, auf denen ich tosen oder testen kann, anstatt Server auf Produktionsebene oder sogar einen gestuften Entwicklungsserver zu verwenden. Dies hilft immens.
JakeGould
Ich möchte mich in einer Endlosschleife bei Ihnen bedanken und habe lange danach gesucht und Ihnen geholfen. Jede Ahnung, warum sie eine solche Einschränkung auferlegt haben, warum sie keine Verbindungen von einer Portnummer zulassen können, wie die Portnummer irgendetwas beeinflusst. Wie auch immer, vielen Dank.
mSatyam
@mSatyam Das liegt daran, dass Sie als Root angemeldet sein müssen, um eine Verbindung zu einem Port unter 1024 herzustellen, und es ist wahrscheinlich ratsam, zu erwarten, dass NFS-Inhalte zumindest standardmäßig als Root ausgeführt werden. Die Portweiterleitung, die ich tat, war etwas von einem "speziellen Fall".
Alex
Aber wie könnte ich das Netzwerk von VirtualBox davon überzeugen, einen Port unter 1024 zu verwenden?
Mikhail T.
Vielen Dank ..
Johnmin