PHP: запустить команду Linux как sudo? - PullRequest
0 голосов
/ 13 января 2010

У меня небольшая проблема, и мне нужно запустить команду linux как sudo с использованием php. Возможно ли это с помощью exec () php? Я пытался, но не могу ввести пароль sudo, а затем выполнить другую команду в том же вызове exec ().

edit: я не могу получить доступ к серверу удаленно через ssh из-за собственной глупости. Вот почему я должен запускать команды через веб-сервер.

Ответы [ 3 ]

2 голосов
/ 13 января 2010

Вы можете предоставить некоторые привилегии для какой-либо команды данному пользователю (например, пользователю, который запускает ваш веб-сервер ...) с помощью visudo, или вам нужно указать setuid программу, которую вы хотите запустить, но я настоятельно не рекомендую вам делать это.

Разве вы не можете использовать более безопасный способ, например, записывать данные в базу данных и создавать робота-демона, который часто просматривает базу данных, выполняет задание, и этот демон может быть предоставлен как root

1 голос
/ 13 января 2010

Вы должны настроить свой sudoers так, чтобы не запрашивать пароль (NOPASSWD:) для пользователя, под которым работает ваш PHP. Обязательно полностью заблокируйте команды, которые этот пользователь может запускать с помощью sudo!

0 голосов
/ 13 января 2010

Использовать proc_open , что позволяет создавать пользовательский канал для подачи данных (пароль пользователя) при появлении запроса. См. Комментарии по ссылке, чтобы узнать, как создать собственный канал пароля.

Обновление, поскольку вы не можете читать.

Фрагмент из комментария снежного барса в забавной точке NOSPAMPLEASE dot com dot au в 05-Jun-2008 02:46 по ранее дважды упомянутой ссылке. Вам просто нужно применить это к вашей собственной ситуации.

    // Set up the descriptors
    $Descriptors = array(
        0 => array("pipe", "r"),
        1 => array("pipe", "w"),
        2 => array("pipe", "w"),
        3 => array("pipe", "r") // This is the pipe we can feed the password into
    );

    // Build the command line and start the process
    $CommandLine = $GPGPath . ' --homedir ' . $HomeDir . ' --quiet --batch --local-user "' . $Identity . '" --passphrase-fd 3 --decrypt -';
    $ProcessHandle = proc_open( $CommandLine, $Descriptors, $Pipes);

    if(is_resource($ProcessHandle)) {
        // Push passphrase to custom pipe
        fwrite($Pipes[3], $PassPhrase);
        fclose($Pipes[3]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...