我只想使用带有root权限的php脚本和一个C包装器,如tutorial。
ls -l:
-rwsr-xr-x. 1 root root 6466 Aug 15 03:07 createConfig
-rwxrwxrwx. 1 root root 102 Aug 15 04:23 test.php
-rw-r--r--. 1 root root 822 Aug 14 21:35 index.php
createConfig.c:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(void) {
system("/usr/bin/php /var/www/html/test.php");
return 0;
}
test.php:
<?php
mkdir("/root/ourDir");
?>
index.php:
<?php
exec("/var/www/html/createConfig");
?>
但在浏览器上运行index.php时出现此错误:
sh: /var/www/html/createConfig: Permission denied
由于
答案 0 :(得分:4)
在致电setgid(getegid()); setuid(geteuid())
之前,您应该先system()
。
作为旁注,在您的示例中设置文件权限的方式,您的“解决方案”完全不安全。任何用户都可以更改由该setuid C程序运行的.php脚本的内容,然后使用C程序将更改的内容作为root
执行。