操作系统:Linux CentOS 7、NFSv4
在一台机器上,我导出了一个 NFS 共享组,该组的所有者是国家金融服务集团拥有 2770 个小组协作权限:
groupadd -g 5000 nfsgroup
chown nobody:nfsgroup /home/groupshare
chmod 2770 /home/groupshare
然后,在另一台计算机上添加相同的组并将其分配给 root 用户。然后,我尝试访问已安装的 NFS 共享并收到“权限被拒绝”错误:
groupadd -g 5000 nfsgroup
usermod -a -G nfsgroup root
ls -l /mnt/groupshare # Permission denied!
注意:为此,我尝试以 root 身份重新登录,甚至重新启动计算机,结果是相同的:权限被拒绝。
然后我对常规帐户(名为用户)并且没有访问问题
usermod -a -G nfsgroup user
su - user
ls -l /mnt/groupshare # Works as expected, no permission errors
我可以访问根目录下共享的唯一方法是更改有效组(尽管有补充国家金融服务集团有没有):
su - root
newgrp nfsgroup
ls -l /mnt/groupshare # No permission errors
我发现这种行为不一致且奇怪。有人可以解释为什么它会这样吗?
一条可能在某种程度上相关的信息如下。两者id
(下用户account)并id user
返回相同的输出,特别是组=1000(用户),5000(nfs组),而id
(下根帐户)产生组=0(根)和id root
输出,正如预期的那样,组=0(根),5000(nfsgroup)。
答案1
我想我找到了导致问题的原因。当NFS客户端访问NFS共享时,服务器会检查访问用户的UID和GID。默认情况下,NFS 服务器启用了root_squash
选项,该选项为以 root 身份访问共享的 NFS 客户端分配 UID/GID无人值守。
在我将选项添加no_root_squash
到文件导出后/etc/exports
,问题就消失了。
显然,当 NFS 服务器“压缩”根的 UID/GID 时,它完全忽略补充组(对我来说似乎是错误的,但可能 NFSv4 标准的想法不同)。