以下是代码:
(根:)
# mkdir /test
# cp /bin/bash /test/sbash
# chmod a+s /test/sbash
(用户1:)
$ cd /test
$ ./sbash
$ mkdir trycreate
mkdir: cannot create directory `trycreate': Permission denied
设置了 setuid 位的 bash 脚本也不起作用。
顺便说一下,我的 setuid perl 脚本可以工作:
test.pl:(设置了 setuid 位,所有者=root)
#!/usr/bin/perl
mkdir('/test/tryperlcreate') or die 'failed';
用户1执行test.pl将创建root拥有的目录。
答案1
尝试使用 -p 执行 exec ./sbash。
sh:~# cp /bin/bash /bin/ape
sh:~# chmod +s /bin/ape
sh:~**$** /bin/ape -p
ape-3.2#
答案2
幸运的是,你不能让脚本具有 SUID 权限。
不过,您可能对这里的 SUID-wrapper 程序感兴趣:http://isptools.sourceforge.net/suid-wrap.html
我还应该补充一点,在执行此操作之前,请务必确保您确实需要这样做。SUID 二进制文件可能会成为系统中一个巨大的漏洞。
答案3
我可以重新发布那些已经被做过的事情,但这篇文章非常值得一读。
基本上 setuid shell 脚本默认不起作用
答案4
正如其他人提到的,这是设计使然。
尝试使用 sudo 而不是 setuid 脚本。