SUDO が機能する必要がある bash スクリプトのファイルがあります。
SUDO を使用してコマンド ラインから実行できますが、SUDO パスワードを入力するように求められます。
このスクリプトをphpから実行したいのですがshell_exec
、SUDOを呼び出すと、パスワードの入力を求められるコマンドラインとは異なります。sudo 呼び出しで sudo のパスワードを渡す方法はありますか?
これどうやってするの?
SUDO が機能する必要がある bash スクリプトのファイルがあります。
SUDO を使用してコマンド ラインから実行できますが、SUDO パスワードを入力するように求められます。
このスクリプトをphpから実行したいのですがshell_exec
、SUDOを呼び出すと、パスワードの入力を求められるコマンドラインとは異なります。sudo 呼び出しで sudo のパスワードを渡す方法はありますか?
これどうやってするの?
sudoers ファイルを ( でvisudo
) 編集し、Web サーバー ユーザーがパスワードなしでコマンドを実行できるようにするルールを追加します。例えば:
www-data ALL=NOPASSWD: /path/to/script
この問題にはさまざまな解決策があります。
まず、sudo が必要な理由が単なるアクセス許可の問題である場合は、スクリプトのアクセス許可を変更することを検討してください (上記の質問に追加したコメントを参照してください)。
もう 1 つの方法は、setuid ビットを使用することです。[編集: setuid はスクリプトではうまく機能しないようです。説明については、このリンクを参照してください。]
3 番目の非常に安全でない方法は、パスワード ファイルからパスワードを読み取ることです。警告:これは非常に安全ではありません。他の可能性がある場合は、実行しないでください。その場合は、フォルダ階層のどこかにパスワード ファイルを隠してみてください。
<?php
shell_exec('sudo -u root -S bash script.sh < /home/[user]/passwordfile');
?>
4 番目の可能性は、sudoers ファイルでNOPASSWD タグを使用することです。この権限は、必要な特定のコマンドに制限する必要があります。
次のようなものをsudoers
ファイルに追加できます。
username ALL=NOPASSWD: /path/to/script
これにより、その特定のユーザーsudo
は、パスワードの入力を求められることなく、その特定のスクリプトを呼び出すことができます。