2011-10-03 82 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}')。