linux - 无法理解 setuid/setgid

标签 linux bash unix

我一直在努力思考 setuid/setgid 是如何工作的……我想到了这个人为的例子:

用户:

  • 用户A属于A组
  • 用户B属于B组

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

#!/bin/sh
cat a.txt

并运行 chmod g+s test.shchmod u+s test.sh,在用户 B 执行时,它会 cat a.txt。相反,我得到 Permission Denied。需要明确的是,test.sh 的文件权限最终看起来像这样:rwsr-xr-xrwxr-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/

相关文章:

python - 如何在 Python 中获取特定程序的当前 CPU、GPU 和 RAM 使用情况?

linux - 在文件中搜索文本字符串并替换它

linux - 当一个进程被杀死(*nix)时,系统调用的调用会发生什么?

linux - 脚本 : Name a file with percentage 的完成百分比

c - 在 C 中修改文件的文件统计信息

linux - 每一行的功能是什么?

linux - 如何在 shell bash linux 中替换列表

bash - 使用 gnuplot 从 CSV 生成图表

python - 我怎样才能开始bash然后我的脚本

linux - Sh 脚本帮助 - 试卷评分