2011-10-03 93 views
1

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

回答

2

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

<?php 
include('Net/SSH2.php'); 

$sftp = new Net_SSH2('www.domain.tld'); 
$sftp->login('username', 'password'); 

echo $sftp->read('[email protected]:~$'); 
$sftp->write("sudo ls -la\n"); 
$output = $sftp->read('#Password:|[email protected]:~\$#', NET_SSH2_READ_REGEX); 
echo $output; 
if (preg_match('#Password:#', $lines)) { 
    $ssh->write("password\n"); 
    echo $sftp->read('[email protected]:~$'); 
} 
?> 

网站“sudo in php”阐述

1

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

+0

如果btcdbit没有什么密码 – macintosh264

+0

@ macintosh264,我会想试试用NOPASSWD选项设置它。你能否澄清当你试图通过'php'程序运行'exec'时遇到的情况?它是否会“卡住”? – imm

-2

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