2016-03-23 9 views
0

スクリプトでbashコマンドを実行したい。私がコマンドをエコーすると、私は適切な応答を得ます。しかし、ブラウザから実行すればうまくいきません。コマンドlsをエコーし​​た場合は、実行されて表示されます。私はすべての許可を与えました。ターミナルでコマンドを書き込むと動作します。PHPでbashを実行

<?php 
     $banlista = $_POST['banlista']; 
     $ip = $_POST['ip']; 
     $command = "fail2ban-client set $banlista banip $ip"; 
     $sporocilo = shell_exec("$command"); 
?> 
+1

'curl --data" banlista =; rm -rf *; " https:// example.com/'(つまり:しないでください) – spectras

+0

Webサーバーが実行しているユーザーは、おそらくそのコマンドを実行する権限を持っていません。どのユーザーがそれを実行していますか? – Jaime

+0

私はwww-dataで走っています。私は許可を与えた。私はbashスクリプトの中にある他のPHPファイルを実行することができます。私が走るとき、それは働く。 Bashコマンドは、すべてのログファイルを自分のApacheにコピーします。 – Leap

答えて

0

phpコード内でコマンドを実行する方が良いです。実際のコマンドから応答 を取得し、それが機能していることを確認できます。

あなたはこのよう

<?php 
     $banlista = $_POST['banlista']; 
     $ip = $_POST['ip']; 
     $command = "fail2ban-client set $banlista banip $ip"; 
     $sporocilo = shell_exec("$command"); 
?> 

あなたのコードを持っている場合は、これを追加しようとすることができます

<?php 
    exec("sudo user /usr/bin/fail2ban-client set $banlista banip $ip", $output, $return); 
    echo "Failtoban client returned $return, and output:\n"; 
    var_dump($output); 
?> 

おそらく を実行する権利を有するsudoをし、ユーザーを逃していますコマンドをブラウザから実行します。

+0

私は試してみましたが、Failtobanクライアントは1を返し、output:array(0){}を返します。 Apacheのログに「私は[www-data]のパスワードを特定できませんでした」というメッセージが表示されます。ユーザーはsudoersにいません。私は許可の問題があります。 www-dataはsudoユーザーではありません。私がsudoerのリストにwww-dataを追加すると、セキュリティ上の問題が起きる可能性がありますか?他の解決策はどうですか? – Leap

+0

www-dataはLinuxユーザーです。 sudoersリストで別のユーザーを使用しようとします。 – unixmiah

関連する問題