為什麼 NFS 不允許我掛載共享?

為什麼 NFS 不允許我掛載共享?

主人

我有一台運行 Ubuntu 12.04 的主機,位址為10.0.0.202.它為網路上的其他電腦提供 NFS 共用。以下是 的內容/etc/exports

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

/media/storagedrive這裡的目的是與 IP 範圍內網路上的其他電腦共享內容10.0.0.0 - 10.0.0.255

工作客戶

10.0.0.40這可以在執行 Ubuntu 13.10(稱為 MattDev)的客戶端電腦上正常運作。那台機器/etc/fstab看起來像這樣:

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

在那台機器上看起來ls -al /mnt/像這樣:

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

的輸出id看起來像這樣:

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)

虛擬客戶端不工作

我有第二台客戶端計算機,運行 Ubuntu 12.10,作為 Windows 7 主機上的來賓作業系統。主機在網路上為10.0.0.28。來賓電腦由 Vagrant 管理,使用 VirtualBox 4.3.6 作為提供者。我將 Windows 7 主機稱為 AlexDevHost,將 Ubuntu 來賓稱為 AlexDevGuest。

在 AlexDevGuest 上運行showmount -e 10.0.0.202會產生:

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

但是,當我嘗試掛載共享時,它失敗了:

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

於是我開始尋找問題:

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

該 uid 和 gid 與 MattDev 上的使用者 matt 不同。所以我對 vagrant 的 uid 進行了調整,因為我讀到 NFS 存取是透過匹配 IP 位址和 uid 來控制的。所以現在:

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

仍然沒有成功。所以現在我已經沒有主意了。

  1. 我究竟做錯了什麼?
  2. 如果 uid 部分正確,有沒有辦法可以驗證 NFS 伺服器電腦是否將我的存取嘗試視為來自10.0.0.28,而不是來自不在允許範圍內的其他 IP?

答案1

好吧,我已經解決了(或者至少,我已經讓它工作了,而且我想我知道是什麼原因造成的)。

我將該insecure標誌添加到/etc/exportsNFS 伺服器上的行中,所以現在它看起來像這樣:

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

此標誌允許從 IPPORT_RESERVED (1024) 以上的客戶端連接埠發起連線。

mount 命令現在可以工作了。

我猜測為什麼缺少該insecure標誌是問題所在,因為 VirtualBox 使用 NAT 將請求傳遞到物理網絡,因此雖然 Ubuntu 客戶機 (AlexDevGuest) 上的端口可能低於 1024,但轉換後的端口Windows 7 主機(AlexDevHost) 可能高於1024,因此被阻止。設置insecure標誌意味著它是被允許的。

這個問題顯然不會影響非虛擬機器MattDev。

相關內容