我们在 x86_64 上运行 RedHat Enterprise ES 5。我们有一个 perl 脚本,它可以执行以下任务:
- 创建目录
- 将点文件复制到其中
- 把整个东西都吃掉
目标目录是一个自动挂载的目录,它实际上是同一个目录。
如果我们将其作为 shell 脚本执行,它将起作用:
mkdir /net/host/drive/directory/new
cp /some/stuff/.??* /net/host/drive/directory/new
chown -R user:group /net/host/drive/directory/new
如果我们在 perl 脚本中执行此操作,无论是作为 system() 还是反引号,我们都会得到“操作不允许”的结果。
这个脚本在其起源的 Solaris 上运行良好。
该脚本以 root 身份运行,不需要任何 su- 或 setuid 操作。
有人知道发生了什么事吗?
答案1
我在这里大胆猜测一下,您可能已使用 root-squash 将文件系统挂载为 NFS。这是一项安全功能,因为否则,任何具有网络物理访问权限和导出文件系统读取挂载访问权限的人都可以在客户端计算机上以 root 访问权限访问该文件系统上的任何文件。
如果您确实希望客户端计算机上的 root 用户对导出的文件系统拥有 root 权限,那么您应该使用“no root squash”选项导出文件系统。
看到这个例子。请注意,您的 NFS 服务器实现上该选项的默认值可能是 root-squash,因此您应该仔细检查该文档。