【问题标题】:PHP-CLI Sudo ExecutionPHP-CLI Sudo 执行
【发布时间】:2011-10-03 01:44:17
【问题描述】:

我正在运行一个 cli 脚本,它需要一个 exec('sudo ...');称呼。我知道它在网络上不安全,但是如何在 cli 中完成呢?该脚本由名为“btcdbit”的用户执行,该用户位于 sudoers 文件中。

【问题讨论】:

    标签: sudo php


    【解决方案1】:

    根据我的经验,设置 NOPASSWD 选项并不总是有效,即使它似乎也不安全。在我看来,更好的方法 - 如果你能够使用它 - 将涉及使用 phpseclib 通过 SSH 执行 sudo。例如。

    <?php
    include('Net/SSH2.php');
    
    $sftp = new Net_SSH2('www.domain.tld');
    $sftp->login('username', 'password');
    
    echo $sftp->read('username@username:~$');
    $sftp->write("sudo ls -la\n");
    $output = $sftp->read('#Password:|username@username:~\$#', NET_SSH2_READ_REGEX);
    echo $output;
    if (preg_match('#Password:#', $lines)) {
        $ssh->write("password\n");
        echo $sftp->read('username@username:~$');
    }
    ?>
    

    网站“sudo in php”详解

    【讨论】:

      【解决方案2】:

      只要 btcdbit 在您希望它能够运行的程序的 sudoers 中,您就应该能够使用任何 PHP 函数,如 execsystem 来运行它。如果您不想让 btcdbit 被要求输入密码,请确保在 sudoers 中使用 NOPASSWD 选项(例如,参见 http://www.ducea.com/2006/06/18/linux-tips-password-usage-in-sudo-passwd-nopasswd/)。

      【讨论】:

      • 如果btcdbit没有密码怎么办
      • @macintosh264,无论如何我都会尝试使用 NOPASSWD 选项进行设置。当您尝试通过 php 程序运行 exec 时,您能澄清一下您遇到的情况吗?它只是“卡住”了吗?
      【解决方案3】:

      应该和 exec('/usr/bin/sudo {script}') 一样简单。

      【讨论】:

        猜你喜欢
        • 2011-11-24
        • 2012-01-02
        • 2012-01-24
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        相关资源
        最近更新 更多