我一直在想setuid/setgid是如何工作的……我想出了一个人为的例子:
用户
用户A属于A组
用户B属于B组
文件a.txt归具有rw-rw----
(660)权限的usera所有。我想如果usera创建了这个文件,test.sh:
#!/bin/sh
cat a.txt
然后运行
chmod g+s test.sh
或chmod u+s test.sh
在userb执行时,它将cat a.txt。相反,我得到Permission Denied
。为了清楚起见,test.sh的文件权限最终如下:rwsr-xr-x
或rwxr-sr-x
。我认为setuid/setgid的全部要点是,当其他用户执行文件时,他们将假定文件的用户id或组id(在本例中为test.sh)。我做错了什么,还是我的理解错了?我一直在做Redhat的测试,以防万一。我也试过玩
umask
,尝试在运行umask 0002
之后运行setuid/setgid。没有帮助… 最佳答案
警告: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。一些答案给出了解决办法…
关于linux - 难以理解setuid/setgid,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28894243/