如何获得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)
所有客户端请求映射到anonuid
和anongid
。 可以使用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
。