46

SUDO が機能する必要がある bash スクリプトのファイルがあります。

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

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

これどうやってするの?

4

4 に答える 4

48

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

www-data ALL=NOPASSWD: /path/to/script
于 2010-07-02T13:41:09.077 に答える
8

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

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

  • もう 1 つの方法は、setuid ビットを使用することです。[編集: setuid はスクリプトではうまく機能しないようです。説明については、このリンクを参照してください。]

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

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

于 2010-07-02T13:45:38.580 に答える
5

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

username ALL=NOPASSWD: /path/to/script

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

于 2010-07-02T13:42:18.373 に答える