在PHP 中執行具有提升權限的Shell 腳本
使用shell_exec 從PHP 執行需要提升權限(透過SUDO)的bash 腳本,有兩種主要方法:
選項1:停用密碼提示
此方法涉及透過新增允許的規則來修改sudoers 檔案(/etc/sudoers) Web伺服器使用者(例如www-data)在沒有密碼提示的情況下執行指定的命令。使用 visudo 命令開啟 sudoers 檔案並新增類似以下內容的行:
www-data ALL=NOPASSWD: /path/to/script
這將允許 Web 伺服器使用者執行腳本,而不會提示輸入密碼。
選項 2:使用 PHP 的 proc_open
另一種方法是使用 PHP 中的 proc_open 函數。此函數允許您開啟進程並指定其他選項,包括提供 SUDO 密碼作為參數:
<?php $descriptorspec = array( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout 2 => array("pipe", "w") // stderr ); $process = proc_open( "sudo /path/to/script", $descriptorspec, $pipes ); // Write the password to stdin fwrite($pipes[0], "your_sudo_password\n"); fclose($pipes[0]); // Read stdout and stderr from pipes while (!feof($pipes[1])) { $stdout .= fgets($pipes[1]); } while (!feof($pipes[2])) { $stderr .= fgets($pipes[2]); } proc_close($process); ?>
在此範例中,SUDO 密碼在 fwrite 語句中作為字串提供。這兩種方法都有效地實現了從 PHP 執行特權腳本而不提示輸入密碼的目標。
以上是如何使用「sudo」從 PHP 運行提升的 Shell 腳本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!