スクリプトは端末で動作しますが、PHPを使用しても機能しません。

スクリプトは端末で動作しますが、PHPを使用しても機能しません。

PHPを介してWebサーバーで "apt-get install"を実行するスクリプトを実行しようとしても機能しないようです。以下を使用して端末でローカルにスクリプトを実行するには:

sudo/var/www/html/dl.sh

効果があるしかし、このコードを使用した後は...

l.php強制:

 <?php
      if ($_GET['run']){
        $output = shell_exec("/var/www/html/dl.sh");
        echo "<pre>$output\n</pre>";
      }
    ?>

<a href=?run=true>Click Here</a>

dl.sh:

#!/bin/bash
sudo apt-get install slowhttptest

他のマシンで「CLICK HERE」をクリックした後(dl.shのコマンドがifconfigに変更されたときに機能します)、スクリプトが実行されるサーバーでは何も起こりません。

記憶が正しい場合は、PHPとApache2がインストールされています。これを行うには他に何が必要かわかりません。

要求されたコマンド:

ls -lZ /var/www/html/dl.sh

出力は次のとおりです

rwxr-xr-x 1ルート? 188 1月2日 21:58 /var/www/html/dl.sh

編集#2:

sudoersにWWW-DATAを追加し、PHPを編集してこの問題を解決しました。

l.php強制:

 <?php
      if ($_GET['run']){
        $output = shell_exec("sudo /var/www/html/dl.sh");
        echo "<pre>$output\n</pre>";
      }
    ?>

<a href=?run=true>Click Here</a>

答え1

PHPはユーザーとして実行されていないため(幸い!)、root実行する権限がありませんapt install。このsuidビットはシェルスクリプトでは無視されるため、シェルスクリプトでこのビットを設定することも解決策ではありません。

もしあなたなら本当にapt-getPHPにユーザー権限で実行権限を与えたいと思いますroot(考えてみてください)。本物これは難しいです。)sudoersこれを行うためにエントリを追加できますが、コマンドはsudo apt-get [...]

認証を使用してWebベースのフロントエンドを介してスクリプトを実行することは賢明ではありませんsudo。なぜなら、誰かが何らかの方法でそのファイルを編集する方法を見つけたら、PHPがシステムのスーパーユーザーとして実行されるようにして、あなたが望むすべてのことをすることができるからです。

関連情報