难以理解 setuid/setgid
Trouble understanding setuid/setgid
我一直在努力思考 setuid/setgid 是如何工作的...我想到了这个人为的例子:
用户:
- 用户A属于A组
- userB 属于组 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。一些答案给出了解决方法...
我一直在努力思考 setuid/setgid 是如何工作的...我想到了这个人为的例子:
用户:
- 用户A属于A组
- userB 属于组 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。一些答案给出了解决方法...