2013-10-25 2 views
0

Я просто хочу использовать php-скрипт с правами root с помощью обертки C, такой как tutorial.Setuid on scripts with C wrapper

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

Почему бы вам не сделать [execve (2)] (http://man7.org/linux/man-pages/man2/execve.2.html) или [execvp (3)] (http: //man7.org/linux/man-pages/man3/exec.3.html)? –

+0

Базиле, есть ли примеры? Я пробовал их, но не совсем работал. Параметры не были переданы правильно и другие проблемы .... было давно вспомнить –

+0

Также см. [Как запустить внешнюю команду как определенный пользователь в PHP] (https://stackoverflow.com/q/1898393/608639) – jww

ответ

4

Вы должны поставить setgid(getegid()); setuid(geteuid()) перед вызовом system().

В качестве побочного примечания, как разрешены права доступа к файлу в вашем примере, ваше «решение» абсолютно небезопасно. Любой пользователь может изменить содержимое скрипта .php для запуска этой программой setuid C, а затем использовать программу C для выполнения измененного содержимого как root.