0

目标

我有以下设置 -

  • 运行 Ubuntu 13.10 的家庭服务器
  • 运行 Mac OSX 10.9 (Mavericks) 的笔记本电脑

我正在尝试将主服务器目录 ~/Documents 导出为可以从我的 mac 笔记本电脑访问的 NFS 挂载

Ubuntu 设置

我在 Ubuntu 上使用 Webmin 创建 NFS 导出。为了暂时测试访问权限,我允许任何主机名连接读/写访问权限。

Webmin 在下面创建了如下配置/etc/exports

/home/jeeves/Documents        (insecure,no_subtree_check,no_root_squash,rw,nohide)

Mac OX 10.9 笔记本电脑设置

我将远程目录挂载到本地目录,/private/nfs

sudo mount -t nfs 192.168.1.219:/home/jeeves/Documents /private/nfs 

/private一切正常,我可以在 Finder下看到“Dcouments” 。

但是,我无法进入该目录

jeeves:~ $ cd /private/nfs/
-bash: cd: /private/nfs/: Permission denied

我将 webmin 权限设置为读/写 ( rw) 并且它没有过滤任何 IP 或主机名,那么访问该目录还需要什么?

提前感谢您的所有帮助!

编辑

这是我的 Webmin 设置。

在此处输入图像描述

Webmin 不会让我选择 NFS 版本 4,大概是因为我只安装了 NFS v3,按照nfsstat

jeeves@HAL:~$ nfsstat
...
Server nfs v3:
null         getattr      setattr      lookup       access       readlink     
25        5% 28        6% 0         0% 126      29% 211      48% 0         0% 
...
4

1 回答 1

7

您可能会遇到数字用户 ID 的问题:ubuntu 系统上的数字用户 ID 与 Mac 上的数字用户 ID 不匹配。使用 NFS,您通常必须确保您的数字用户 ID 在您的所有系统中都以某种方式相同。在家庭/个人系统上,用户 ID 往往是随意分配的,没有任何同步,这会导致 NFS 出现问题。

由于这是一个家庭服务器,并且如果您信任连接到您的 NFS 服务器的每个人,那么一种可能的快速、简单、肮脏和丑陋的解决方法是开放权限并允许所有人和所有东西读/写/删除你的文件(显然不要在企业环境中这样做):

在您的 Ubuntu 系统上,以jeeves(不要sudo或使用任何其他帐户)身份登录,打开终端窗口,然后按给定顺序运行命令:

cd /home/jeeves/Documents
find . -type d -print0 | xargs -0 chmod 777
find . -type f -print0 | xargs -0 chmod a+rw

但是,这假设 NFS 设置为允许访问不受信任的用户(在 webmin 中,“将不受信任的用户视为”设置为默认值,我不确定这是什么)。

请注意,使用上述命令,Mac 创建的文件和目录的所有者将在 Ubuntu 上显示为数字用户(因为 Ubuntu 系统可能没有任何用户/etc/passwd对应于 Mac 数字 id,Ubuntu 将简单地显示原始数字 ID)。

长答案:

当您在jeevesUbuntu 系统上创建帐户时,Ubuntu 为其分配了一些数字用户 ID。当您在 Mac 上创建用户帐户时,Mac 为其分配了一个数字用户 ID,这可能与 Ubuntu 系统上分配的数字不同。请注意,用户名(例如,“jeeves”)是为了方便用户使用;Ubuntu 和 Mac 都没有在内部使用它们,而是使用用户 ID。NFS 使用这些数字 id 来确定所有权/权限(在 Ubuntu 机器上)。

  • 如果 id 匹配,则使用“用户”权限。

  • 如果 id 不匹配:

    • (可以使用“组”权限,但这不太可能,我不打算讨论。)

    • 使用“其他”权限。请注意,在创建文件/目录时,如果在 Ubuntu 框中找不到 (Mac) 用户 ID,您通常会得到看似由“数字”所有者拥有的文件;您看到的数字是 Mac 正在使用的数字,您看到数字是因为该 id 没有出现在 Ubuntu 的/etc/passwd.

IIRC,Ubuntu 使用 022 的 umask,这意味着只有拥有者/home/jeeves/Documents才能写入/创建文件和目录;其他人都有只读权限。除非您以某种方式在您的盒子之间同步了用户 ID,否则您不太可能拥有相同的用户 ID,因此您会遇到权限问题。

由于这是一个家庭服务器,上面提到的最简单的解决方法就是摆脱安全性并允许所有人和所有东西访问您的文件。当然,出于显而易见的原因,这是令人反感的。

正确的解决方法是确保所有用户 ID 在所有系统之间同步,但这在家庭环境中可能是个问题。此外,在使用帐户后更改用户 ID 是有问题的;虽然可以做到这一点,但必须小心谨慎,因为您可能会破坏您的系统。我不打算详述。

编辑:固定部分句子。

于 2014-04-14T17:33:07.190 回答