如何获得对 Synology NAS 的 NFS 共享的读/写访问权限?

mar*_*lea 11 nfs permissions mount nas 14.04

我只能读取已挂载的 NFS 共享。

由于在 NAS 上设置了“无壁球映射”,Ubuntu 普通用户Permission denied在尝试cd进入共享时只能使用sudo.
使用壁球“将所有用户映射到管理员”设置,客户端普通用户可以cd进入并且只能读取共享。使用sudo不允许写入。


群晖NAS:
DS214> id username
uid=1026(username) gid=100(users) groups=100(users),101(administration)

没有壁球(没有映射)
DS214> cat /etc/exports
/volume1/Files 10.1.1.2(rw,async,no_wdelay,no_root_squash,insecure_locks,sec=sys,anonuid=1025,anongid=100)

所有壁球(将所有用户映射到管理员)
DS214> cat /etc/exports
/volume1/Files 10.1.1.2(rw,async,no_wdelay,all_squash,insecure_locks,sec=sys,anonuid=1024,anongid=100)

Ubuntu客户端:
$ cat /etc/fstab
10.1.1.214:/volume1/Files /mnt/nfs/Files nfs rw,user,auto 0 0

$ id username
uid=1000 gid=1000(username) groups=1000(username), <etc>

$ ls -n /mnt/nfs
drwxrwxrwx 9 0 0 4096 Sep 25 01:28 Files

$ ls -n /mnt/nfs/Files
drwxr-xr-x 11 1026 100 4096 Sep 24 22:05 Data


(我最初错误地发布了使用sudo启用的写访问权限)我可以在挂载的 NFS 共享中打开一个文件,sudo vi /mnt/nfs/Files/Data/test.file但即使使用sudo. :w!命令时的 vi 错误消息是:
"test.file" E212: Can't open file for writing

Nep*_*nte 12

NFSv2/3 仅根据 UID 和 GID 处理权限。服务器上的文件权限与客户端上的用户和组 ID 相匹配。这就是为什么 NFSv<4 在用户对客户端机器具有 root 访问权限的环境中设计不安全的原因;在这种情况下,UID 欺骗是微不足道的。

请注意,NFSv4 通过 Kerberos5 提供客户端和用户身份验证。如果需要使用用户名和密码进行身份验证,即使在纯 Linux 环境中,使用 Samba (SMB/CIFS) 而不是设置 Kerberos 通常要容易得多。

为了至少防止升级 root 权限,默认情况下使用选项导出 NFS 共享,该选项root_squash将映射来自root (uid=0, gid=0)toanonuid和 的所有客户端请求anongid。可以使用 覆盖此行为no_root_squash,授予对导出的根访问权限。

在这里,我们看到了另一个缺点。为了正常运行,NFS 基本上要求您在所有机器上具有相同的 UID/GID。您要访问的文件属于1026并具有权限 755。您是客户端上的用户,具有uid=1000. GID 也不匹配,因此您只能获得世界权限。因此没有写访问权限。

要解决此问题,您可以执行多项操作之一:

  • 在 NAS 上,将文件的所有者更改为1000. 您可能需要创建该特定帐户。这将如何影响其他服务,我不知道。

  • 将本地用户的 UID 更改为1026.

  • 由于您是唯一访问服务器上文件的人,您可以让服务器假装所有请求都来自正确的 UID。为此,NFS 有选项all_squash. 它告诉服务器将所有请求映射到匿名用户,由 指定anonuid,anongid

    将选项添加all_squash,anonuid=1026,anongid=100/etc/exports.

不过要小心,因为这将使任何人有效地安装导出这些文件的所有者!

如果您与您不完全信任的人和他们的客户共享您的网络,不要对您的文件进行恶作剧,那么您真的应该研究一种提供身份验证的文件共享方法。在我看来,Samba 是实现这一目标的最简单方法。