无法理解setuid / setgid

时间:2015-03-06 07:47:12

标签: linux bash unix

我一直试图围绕setuid / setgid的工作方式......我想出了这个人为的例子:

用户:

  • userA属于A组
  • userB属于B组

文件a.txt归userA所有,权限为rw-rw----(660)。我想如果userA创建了这个文件test.sh:

#!/bin/sh
cat a.txt

并运行chmod g+s test.shchmod u+s test.sh,在userB执行时,它会捕获a.txt。相反,我得到Permission Denied。需要说明的是,test.sh的文件权限最终如下所示:rwsr-xr-xrwxr-sr-x。我认为setuid / setgid的重点在于,当其他用户执行该文件时,他们会假设该文件的用户ID或组ID(在本例中为test.sh)。我做错了什么,或者我的理解是什么?

我一直在RedHat上运行我的测试,以防万一。我还尝试使用umask,尝试在运行umask 0002后运行setuid / setgid。没帮忙......

1 个答案:

答案 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。一些答案提供了解决方法......