我编写了一个脚本,将一些文件从一个地方复制到另一个地方,由于我没有源文件夹的权限,所以我尝试使用 sudo 运行它。问题是现在目标文件夹的创建失败。这是一个简单的测试用例:
在我的主目录中,以下内容有效:
mkdir testDir
但这由于权限被拒绝错误而失败
sudo mkdir testDir2
我的主目录有755权限,是我自己的。
我跑过去sudo groups
发现果然那群root
人在那里,但奇怪的是却users
没有。还groups
以我自己的身份运行表明我不在 sudo 组中。
有什么想法吗?为什么使用 sudo 运行时无法写入我的主文件夹?
答案1
这是由于 NFS 服务器上的“根挤压”造成的。从exports(5)
手册页(强调我的):
nfsd 对服务器计算机上的文件的访问控制基于每个 NFS RPC 请求中提供的 uid 和 gid。用户期望的正常行为是她可以访问服务器上的文件,就像访问普通文件系统一样。这要求在客户端和服务器计算机上使用相同的 uid 和 gid。这并不总是正确的,也不总是可取的。
通常,在访问 NFS 服务器上的文件时,不希望客户端计算机上的 root 用户也被视为 root 用户。为此,uid 0 通常会映射到不同的 id:所谓的匿名或无人 uid。这种操作模式(称为“根挤压”)是默认模式,可以使用 no_root_squash 关闭。
换句话说,允许sudo
NFS 客户端上的 root(例如,在运行时)像 NFS 服务器上的 root 一样修改文件和文件属性通常存在安全风险。这实际上会使客户端上的 root 等同于服务器上的 root,并允许恶意客户端接管服务器。
来自RHEL 6 安全指南:
如果使用 no_root_squash,远程 root 用户就能够更改共享文件系统上的任何文件,并留下受特洛伊木马感染的应用程序,以便其他用户无意中执行。