为什么我的 NFS 和 setuid 设置在 Linux 中不起作用

为什么我的 NFS 和 setuid 设置在 Linux 中不起作用

我使用的是 Linux。在机器 AI 上有这样的 NFS 设置etc/exports

/home 10.0.129.130(rw,no_root_squash)

我将此目录挂载到机器 A 和/home/nfs/机器 B 上。并且我已使用 设置了 setuid chmod u+x program1.sh

在机器上BI希望用户使用root权限xyz运行program1.sh。设置program1.sh如下:

-rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh

, 其中包含mkdir -p /home/nfs/house/nsx/

我设置了xyz加入群组,house这样就xyz可以运行了program1.sh,但是运行的时候 program1.sh提示:

mkdir: cannot create directory `/home/nfs/house/nsx/': Permission denied

以 root身份运行program1.sh没问题。我不知道为什么它不能以用户身份运行xyz

答案1

从名称来看program.sh,我猜你正在尝试运行解释脚本,而不是 ELF 二进制文件。Linux 有忽略 setuid 位由于可能存在安全问题(内核检查 +s 位和脚本解释器打开文件之间的竞争条件),很久以前我们就无法在脚本上进行此类尝试。

如果此脚本需要供特定用户使用,请sudo在 /etc/sudoers 中创建允许执行以下操作的规则:

xyz ALL=(root:root) NOPASSWD: /usr/local/bin/program.sh

可能还有其他解决方案。例如,如果您想自动创建主目录(首次登录时),pam_mkhomedir.soPAM 模块可以实现这一点。

答案2

因为只有root用户nfs对以下文件/文件夹拥有权限:/home/nfs

相关内容