使用C包装器的脚本上的Setuid

时间:2013-10-25 01:59:57

标签: php c linux centos suid

我只想使用带有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

由于

1 个答案:

答案 0 :(得分:4)

在致电setgid(getegid()); setuid(geteuid())之前,您应该先system()

作为旁注,在您的示例中设置文件权限的方式,您的“解决方案”完全不安全。任何用户都可以更改由该setuid C程序运行的.php脚本的内容,然后使用C程序将更改的内容作为root执行。