我的 Linux 服务器上有一个 NFS 共享目录。
ls: cannot access file: Permission denied
ls: cannot access res: Permission denied
total 20
d????????? ? ? ? ? ? file
drwx------ 2 root root 16384 May 19 2015 lost+found
drwxr-x--- 9 lma lum 4096 Feb 18 2020 lum
d????????? ? ? ? ? ? res
当我尝试更改权限时根用户在目录文件上。
chmod 775 file
chmod: cannot access `file': Permission denied
chown root:root file
chown: cannot access `file': Permission denied
收到错误,Permission denied
.请让我知道如何更改目录的权限
答案1
除非使用导出选项导出 NFS 共享,否则NFS 客户端主机的no_root_squash
UID 0 ( ) 将映射到NFS 服务器上的UID 65534(或在某些操作系统中)。这可以防止客户端主机的 root 用户在 NFS 共享上创建邪恶的 setuid-root 可执行文件,并利用它们非法获得使用同一共享的其他 NFS 客户端或 NFS 服务器本身的 root 访问权限。root
nobody
nfsnobody
奇怪的问号可能表明用户nobody
对相关目录只有读取权限,但没有x
访问权限。这种组合意味着用户只能读取普通ls
目录列表,但无法访问该目录中的任何文件。因此,任何stat(2)
获取这些文件的大小/所有权/权限信息的系统调用也将失败。
仅目录file
和res
显示问号,而lost+found
和lum
正常显示,可能是由于客户端主机 root 用户所拥有的组成员身份、服务器系统上使用 ACL 或 SELinux 或这些因素的组合造成的。
如果这是问题所在,则无法通过 NFS 修复它。您需要登录 NFS 服务器系统,并在本地访问文件系统。
理想情况下,您应该设计 NFS 共享目录的组分配,以便 NFS 服务器的用户不拥有共享中的任何内容root
(除非它应该是显式只读的或所有客户端都无法访问)。
如果必须root
在客户端/服务器连接中保留所有权,则可以通过将导出选项添加到 NFS 服务器上的文件no_root_squash
中的共享定义中/etc/exports
,然后重新导出共享来实现。但如果您这样做,您应该使用noexec,nosuid
挂载选项挂载包含 NFS 服务器上共享的文件系统。