我有一个 C .cgi 程序,可以运行,而且基本可以正常工作。但是,我需要它进行一些文件操作,因此我 chown root 并 chmod +s 该 .cgi 程序:
-rwsr-sr-x 1 root root 59140 2015-07-20 13:39 sectl.cgi
运行时,程序没有所需的权限;rename() 命令失败。该命令的输出
system("whoami");
是 wwwrun。这是怎么回事?
(我确信我在其他系统上成功做过同样的事情)
openSUSE 11.2
答案1
有几件事需要记住:
- 脚本的 setuid 可能被禁用(请参阅允许在 shell 脚本上设置 setuid例如)。
- 即使你的程序实际上是二进制,它所在的文件系统仍然有可能被挂载诺苏伊德选项,或者 SELinux 禁止该功能(例如LD_PRELOAD 和 setuid 二进制文件)。