shivanshu@<host> ls -l hello.sh
-rw-r-xr-x 1 shivanshu users 63 Sep 7 17:34 hello.sh
所以我显然是该文件的所有者。我可以使用 chmod 命令更改常规权限,如 r、w、x。但是,当我尝试对此文件执行 setuid 时,出现错误
shivanshu@<host> chmod u+s hello.sh
shivanshu@<host> chmod: changing permissions of 'hello.sh': Operation not permitted
请注意,我尝试使用 sudo,以及其他文件(如文本文件而不是 .sh 文件)。
为什么会发生这种情况?我通过谷歌搜索无法找到原因
PS-堆栈溢出帖子上的评论告诉我在这里发布
答案1
正如您所发现的,您的文件所在的文件系统已故意使用“nosuid”选项安装,以禁用 setuid/setgid 的使用,大概是出于安全预防措施。
此外,Linux 只支持编译的 (ELF) 可执行文件的 setuid 位,而不是脚本。即使您可以“chmod u+s”脚本,当脚本运行时也不会产生任何效果。
最后,Bash 在启动时会故意放弃所有不需要的权限,因此即使 setuid做过它可以适用于一般脚本,但它仍然不适用于使用 #!/bin/bash 的脚本。