首頁  >  文章  >  後端開發  >  如何使用「sudo」從 PHP 運行提升的 Shell 腳本?

如何使用「sudo」從 PHP 運行提升的 Shell 腳本?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-19 17:13:03886瀏覽

How to Run Elevated Shell Scripts from PHP Using `sudo`?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn