我使用的是 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.so
PAM 模块可以实现这一点。
答案2
因为只有root
用户nfs
对以下文件/文件夹拥有权限:/home/nfs