
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-get
PHPにユーザー権限で実行権限を与えたいと思いますroot
(考えてみてください)。本物これは難しいです。)sudoers
これを行うためにエントリを追加できますが、コマンドはsudo apt-get [...]
。
認証を使用してWebベースのフロントエンドを介してスクリプトを実行することは賢明ではありませんsudo
。なぜなら、誰かが何らかの方法でそのファイルを編集する方法を見つけたら、PHPがシステムのスーパーユーザーとして実行されるようにして、あなたが望むすべてのことをすることができるからです。