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 サイトの他の関連記事を参照してください。