「sudo」を使用して PHP から昇格されたシェル スクリプトを実行するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-19 17:13:03
オリジナル
886 人が閲覧しました

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

PHP で昇格された特権を使用してシェル スクリプトを実行する

shell_exec を使用して PHP 内から昇格された特権を必要とする bash スクリプトを (SUDO 経由で) 実行するには

オプション 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 から昇格されたシェル スクリプトを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート