2012-03-31 21 views
3

私はarch linuxを使用しています。私は、システムのIPを変更するphpファイルを実行したい。私はしたアーチlinuxのrootユーザーとしてPHPでコマンドを実行

ifconfig eth0 192.168.163.137 

端末でそれは正常に動作します。同じことは、私は、PHPファイルに

shell_exec('ifconfig eth0 192.168.163.137'); 

でやってみましたし、ルータを介して接続された他のPCから離れて配置Webブラウザからページを開いてみました。ページに何も表示されず、コードも実行されません。私はit.apacheを実行しているユーザーの問題がそれを実行していると思います。だから私はそれがroot.can誰も私のコードの実行に私を導いてくださいで実行されたい。私はthanku ...でも、sudoをインストールし、ちょうどそれがあまりにもdoesntの実行

shell_exec('sudo ifconfig......'); 

を入れて...助けてください.. :)

+0

デバッグする良い方法は、関数からの戻り値をエコーすることです。常に役に立つ。関数自体は出力バッファに書き込まれません。 – animuson

+0

それをしようとした...それは何も返しません。 shell_exec( 'ifconfig')を使用して設定が完了した場合のみです。返された値がエコーされたら、Webページ上に完全なテキストが表示されます。テキストは端末に表示されるテキストです –

+0

ルートとして実行する方法を教えてください。 –

答えて

0

はshell_exec

時にPHP、この機能が無効になっていますセーフモードで実行しています。

ドキュメント:http://php.net/manual/en/function.shell-exec.php

だから、多分あなたのphp.iniファイルを微調整してみてください?

3

通常、パスワードを入力するには対話型のシェルが必要です。それは明らかにPHPスクリプトでは起こりません。あなたが何をやっているのか分かっていて、セキュリティ上の問題がある場合は、Apacheユーザーがパスワードなしでsudoを実行できるようにしてください。

たとえば、sudoersファイルに次の行を追加すると、Apacheがパスワードなしでsudoを実行できるようになります(ifconfigコマンドのみ)。

apache ALL=NOPASSWD: /sbin/ifconfig 

パスを調整し、必要に応じて引数を追加します。

注意:

  • まだPHPでシェルコマンドを呼び出す方法による合併症があるかもしれません。
  • Webサーバーにrootとしてコマンドを実行させることは非常に危険です。

おそらくより良い代替:

  • それは関係なく、それを呼び出す誰rootとして実行しない作るためにSUIDビットでシェルスクリプトを書きます。
+3

bashスクリプトを毎分cronジョブとして実行してください。したがって、IPを変更する場合、Webサーバーはテキストファイルを変更したり、データベースにインストールしたりします。 bashスクリプトはこれをチェックし、ifconfigコマンドを実行します。したがって、Webサーバーにはrootアクセス権がありません。 – David

+2

setuidはシェルスクリプトでは動作しません。デイビッドのソリューションはsudoより優れています。 – strkol

+0

@strkolダン、忘れてしまった。ありがとう。 – kijin

0

キューにコマンドを書き込んで、それらをピックアップして検証し(既知の良好な要求のみを許可する)、それらを実行してから、そのキューに日付と結果を完全にマークします。

エンドユーザーは、ajaxを使用して更新をクリックまたは待機することができます。

関連する問題