我需要以root身份运行一个bash脚本(不能使用无需密码的sudo或su),而在Linux中无法设置脚本的setuid位,因此我考虑从一个可执行文件中调用并使其设置setuid:
$ cat wrapper.c
int main(void)
{
system("/bin/bash ./should_run_as_root.sh");
}
$ gcc -o wrapper wrapper.c
$ sudo chown root wrapper
$ sudo chmod ug+s wrapper
$ ll wrapper
-rwsr-sr-x 1 root users 6667 2009-02-17 11:11 wrapper
$
这个可以工作 - 即脚本正确运行 - 但是脚本会以执行"./wrapper"的用户身份运行。
为什么?如何正确实现?
谢谢!
man system
和 https://dev59.com/PXNA5IYBdhLWcg3wNa-T。(翻译:The reasoning behind the answers below can be found inman system
and at https://dev59.com/PXNA5IYBdhLWcg3wNa-T.) - Stefan Lasiewski