我遇到了一些麻烦,需要使用php运行linux命令作为sudo。这可能使用php的exec()吗?我已尝试但无法输入sudo密码,然后在同一个exec()调用上执行另一个命令。
编辑:由于自己的愚蠢,我无法通过ssh远程访问服务器。这就是我必须通过Web服务器运行命令的原因。
答案 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]);