Apache ユーザーは httpd 経由で実行するとき sudo を使用できません。

Apache ユーザーは httpd 経由で実行するとき sudo を使用できません。

Webアプリケーション(php)が別のサーバーでスクリプトを実行する必要があるという要件があります。ルートを介してApacheユーザーをSudoし、Apacheユーザーとしてリモートスクリプトを実行します。リモートシステムのスクリプトが正しく実行されました。ただし、Webブラウザの要求に応じて実行されるPHPスクリプトを介して実行すると、正しく実行されません。この問題を解決する方法についてのアイデアはありますか?

  1. ルート経由でログイン
  2. Apacheのsesuアクセス権の変更

    sudo /usr/sbin/visudo
    
    Cmnd_Alias WEBREMOTE = /usr/bin/ssh, /var/www/html/test_shell.sh
    
    apache   ALL=(ALL)       NOPASSWD:WEBREMOTE
    
  3. Apacheユーザーにsudo

    sudo -u apache -s
    
  4. リモートでスクリプトを実行する

    sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh test_param & > /dev/null
    
  5. リモートコンピュータのログを見ると、シェルスクリプトは正常に実行されます。

  6. PHPのexecを介して同じスクリプトを実行しようとすると、コードは実行されません。

     <?php
     $shellcmd = "sudo -S ssh [email protected] 'bash -s' < /var/www/html/test_shell.sh $test_param & > /dev/null";
     $ret = exec($shellcmd);
     echo "<br />";
     echo "shellcmd result: [$ret]";
    
     $ret2=shell_exec($shellcmd);
     echo "<br />";
     echo "shellcmd result: [$ret2]";
     ?>
    

生成されたPHPはexecまたはexec_shellを介して空の結果のみを返し、test_shell.sh内のログはリモートシステムで実行されません。 PHPページでもエラーは発生しません。ここに設定がありませんか?

ベストアンサー1

おすすめ記事