web-dev-qa-db-ja.com

SUDOを必要とするPHPからシェルスクリプトを呼び出す方法は?

私は、Sudoが動作することを必要とするbashスクリプトであるファイルを持っています。

Sudoを使用してコマンドラインから実行できますが、Sudoパスワードを入力するよう求められます。

Shell_execを介してphpからこのスクリプトを実行したいのですが、Sudoを呼び出すと、パスワードの入力を求められるコマンドラインとは異なります。 Sudo呼び出しでSudoのパスワードを渡す方法はありますか?

これどうやってするの?

45
JD Isaacks

Sudoersファイルを編集し(visudoを使用)、Webサーバーのユーザーがパスワードなしでコマンドを実行できるようにするルールを追加します。例えば:

www-data ALL=NOPASSWD: /path/to/script
44
Brian

この問題にはさまざまな解決策があります。

  • まず、Sudoが必要な理由が単に権限の問題である場合は、スクリプトの権限を変更することを検討してください(上記の質問に追加したコメントを参照)。

  • 別のアプローチは、 setuid bit を使用することです。 [編集:setuidはスクリプトではうまく機能しないようです。説明については、 このリンク を参照してください。]

  • 3番目の非常に安全ではない方法は、パスワードファイルからパスワードを読み取ることです。 警告:これは非常に安全ではありません。他の可能性がある場合は実行しないでください。それを行う場合は、フォルダー階層のどこかにパスワードファイルを非表示にしてみてください。

    <?php
    Shell_exec('Sudo -u root -S bash script.sh < /home/[user]/passwordfile');
    ?>
    
  • 4番目の可能性は、sudoersファイルで NOPASSWDタグ を使用することです。この権限を、必要な特定のコマンドに制限する必要があります。

8
Danilo Bargen

次のようなものをsudoersファイルに追加できます。

username ALL=NOPASSWD: /path/to/script

これにより、その特定のユーザーは、パスワードの入力を求められることなく、特定のスクリプトでSudoを呼び出すことができます。

5
Daniel Egeberg

最も安全な方法は、crontabを使用することです。つまり、すべてのコマンドをデータベース(mysqlテーブルなど)に保存し、cronジョブを作成してこれらのmysqlエントリを読み取り、Shell_exec()を介して実行します。詳細については、こちらをお読みください link .

  * * * * * killProcess.php
0