我遇到了一些麻煩,需要像使用php的sudo一樣運行linux命令。這可能使用PHP的exec()?我嘗試過但不能輸入sudo密碼,然後在同一個exec()調用中執行另一個命令。PHP:運行linux命令爲sudo?
編輯:由於自己的愚蠢,我無法通過ssh遠程訪問服務器。這就是爲什麼我必須通過Web服務器運行命令。
我遇到了一些麻煩,需要像使用php的sudo一樣運行linux命令。這可能使用PHP的exec()?我嘗試過但不能輸入sudo密碼,然後在同一個exec()調用中執行另一個命令。PHP:運行linux命令爲sudo?
編輯:由於自己的愚蠢,我無法通過ssh遠程訪問服務器。這就是爲什麼我必須通過Web服務器運行命令。
您可以使用visudo爲給定用戶授予某些命令的某些權限(例如運行Web服務器的用戶......),或者必須設置要運行的程序,但我強烈地使您不願意執行這個。
難道你不能使用更安全的方式,例如在數據庫中寫入數據,並且構建一個守護進程機器人,它經常在數據庫中查找,完成作業,並且可以以root身份授予此守護程序?
您應該設置您的sudoers
不要求您的PHP運行的用戶使用密碼(NOPASSWD:
)。確保完全鎖定該用戶可以通過sudo運行的命令!
使用proc_open它允許您創建一個自定義管道來提供數據(用戶密碼)。請參閱鏈接上的註釋以瞭解如何創建自定義密碼管道。
更新,因爲你無法閱讀。
片段由雪豹在逗樂點NOSPAMPLEASE點com點AU在05君2008年在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]);
使用visudo進行編輯。 – 2010-01-13 21:02:25
vi很痛苦,但是用納米,你可以嚴重搞砸sudoers文件......一次將自己鎖定在ec2實例上,因爲我無法sudo:P – 2012-01-03 04:00:24
@PeteHerbertPenito:你可以在visudo中使用nano。只需將'Defaults editor =/usr/bin/nano'這一行添加到你的sudoers中即可。那麼,以後總是用'visudo'!它爲你做語法檢查。 – 2012-01-03 11:59:51