PHP:运行linux命令为sudo?

时间:2010-01-13 20:52:15

标签: php

我遇到了一些麻烦,需要使用php运行linux命令作为sudo。这可能使用php的exec()吗?我已尝试但无法输入sudo密码,然后在同一个exec()调用上执行另一个命令。

编辑:由于自己的愚蠢,我无法通过ssh远程访问服务器。这就是我必须通过Web服务器运行命令的原因。

3 个答案:

答案 0 :(得分:2)

您可以使用visudo将某些命令的某些权限授予给定用户(例如运行您的网络服务器的用户......),或者必须设置您想要运行的程序,但我强烈反对您这样做

您不能使用更安全的方式,例如在数据库中写入数据,并构建一个经常在数据库中查找的守护程序机器人,实现该作业,并且可以以root身份授予此守护程序吗?

答案 1 :(得分:1)

您应该为运行PHP的用户设置sudoers不要求密码(NOPASSWD:)。确保完全锁定用户可以通过sudo运行的命令!

答案 2 :(得分:0)

使用proc_open,可以在出现提示时创建自定义管道以提供数据(用户密码)。请参阅链接中的注释,了解创建自定义密码管道的方法。

更新,因为您无法阅读。

来自snowleopard发表评论的片段来自amuse dot NOSPAMPLEASE dot com dot au,时间是2008年6月5日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]);