我一直在努力思考 setuid/setgid 是如何工作的……我想到了这个人为的例子:
用户:
- 用户A属于A组
- 用户B属于B组
文件 a.txt 由用户 A 拥有,权限为 rw-rw-----
(660)。我想如果 userA 创建了这个文件,test.sh:
#!/bin/sh
cat a.txt
并运行 chmod g+s test.sh
或 chmod u+s test.sh
,在用户 B 执行时,它会 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/