我一直试图围绕setuid / setgid的工作方式......我想出了这个人为的例子:
用户:
文件a.txt归userA所有,权限为rw-rw----
(660)。我想如果userA创建了这个文件test.sh:
#!/bin/sh
cat a.txt
并运行chmod g+s test.sh
或chmod u+s test.sh
,在userB执行时,它会捕获a.txt。相反,我得到Permission Denied
。需要说明的是,test.sh的文件权限最终如下所示:rwsr-xr-x
或rwxr-sr-x
。我认为setuid / setgid的重点在于,当其他用户执行该文件时,他们会假设该文件的用户ID或组ID(在本例中为test.sh)。我做错了什么,或者我的理解是什么?
我一直在RedHat上运行我的测试,以防万一。我还尝试使用umask
,尝试在运行umask 0002
后运行setuid / setgid。没帮忙......
答案 0 :(得分:1)
警告:Setuid和setgid shell脚本是一个安全漏洞。有很多方法可以让某人使用setuid / setgid做你(作者)并不打算做的事情。
常见的诀窍是使用环境变量。例如,有人可以这样做:
ln -s cat /bin/rm
export PATH=.:${PATH}
然后使用您的setuid脚本删除 a.txt
文件。
幸运的是,许多现代Linux系统上的shell脚本的setuid和setgid位被忽略;见https://unix.stackexchange.com/questions/364/allow-setuid-on-shell-scripts。一些答案提供了解决方法......