【发布时间】:2011-10-03 01:44:17
【问题描述】:
我正在运行一个 cli 脚本,它需要一个 exec('sudo ...');称呼。我知道它在网络上不安全,但是如何在 cli 中完成呢?该脚本由名为“btcdbit”的用户执行,该用户位于 sudoers 文件中。
【问题讨论】:
我正在运行一个 cli 脚本,它需要一个 exec('sudo ...');称呼。我知道它在网络上不安全,但是如何在 cli 中完成呢?该脚本由名为“btcdbit”的用户执行,该用户位于 sudoers 文件中。
【问题讨论】:
根据我的经验,设置 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”详解
【讨论】:
只要 btcdbit 在您希望它能够运行的程序的 sudoers 中,您就应该能够使用任何 PHP 函数,如 exec 或 system 来运行它。如果您不想让 btcdbit 被要求输入密码,请确保在 sudoers 中使用 NOPASSWD 选项(例如,参见 http://www.ducea.com/2006/06/18/linux-tips-password-usage-in-sudo-passwd-nopasswd/)。
【讨论】:
php 程序运行 exec 时,您能澄清一下您遇到的情况吗?它只是“卡住”了吗?
应该和 exec('/usr/bin/sudo {script}') 一样简单。
【讨论】: