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

我只能访问已挂载的NFS共享。

在NAS上设置“无壁球映射”时,Ubuntu常规用户在尝试cd进入共享时会获得Permission denied ,并且只能通过使用sudo获得读取权限。
使用壁球’将所有用户映射到管理’设置,客户端普通用户可以进入并且只具有对共享的读访问权限。 使用sudo不允许写入。


Synology 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),

$ 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启用了写访问权限)我可以使用sudo vi /mnt/nfs/Files/Data/test.file在已挂载的NFS共享中打开文件,但即使使用sudo也无法将更改写入文件。 vi错误消息:w! 命令是:
"test.file" E212: Can't open file for writing

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

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

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

在这里,我们看到另一个缺点。 要正常运行,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

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

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

执行showmount -e 10.1.1.214以查看导出选项。 Permission denied错误来自NFS服务器本身。 尝试将选项从rw,user,auto更改为defaults