为什么 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

工作客户端

这在运行 Ubuntu 13.10 的客户端机器10.0.0.40(称为 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

好的,我已经解决了(或者至少,我已经让它工作了,并且我想我知道是什么原因造成的)。

我在NFS 服务器上的行insecure中添加了标志,所以现在它看起来像这样:/etc/exports

/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。

相关内容