2011-07-13 11 views
8

シェルコマンドを実行してその出力を返すPHPスクリプトを作成したいと思います。サーバーには秘密鍵が必要です。phpスクリプトからシェルコマンドを実行するには

<?php 
$command = "ls"; 
$output = shell_exec($command); 
echo "<pre>$output</pre>"; 
?> 

うまく働いたこと:私が最初にこれをテストすることを決めたとき、私はこれを作成しました。私は、私が本当に実行したいコマンドに$commandを変更したときしかし:

$command = "/etc/init.d/mycontrollerd status /etc/mycontrollerconfig"; 

をそれが私にこの出力を与えた:

You need root privileges to run this script 

私の推測では、私はsudoを使用する必要があります。もちろん、サーバーのどこかにpemファイルを置く必要があります。私がそれをしているとすれば、正確には何か$commandはなすべきですか? shell_exec()exec()system()などを使用する必要がありますか?

答えて

4

あなたがスクリプトを起動するために使用しているPHPの機能は重要ではありません - どのような欠けているユーザーアカウントの認証です。

visudoでパスワードなしで正確なコマンドを実行し、コマンドにsudoという接頭辞を付けるには、sudoを使用するか、コマンド自体を実行するsetuidスクリプトを設定します。

+0

ユーザーアカウントに権限が必要であることも重要ですが、それはPHP関数を使用する最良の選択肢ではありません。どちらがベストですか? –

+0

@Kenneth Vogt 'exec'はシェルを不必要に関与せず、結果を直接出力する'パススルー 'を返しますが、元のコードをいくらか変更する必要があるためです。 – phihag

3

あなたが本当にしなければならないことは、特定のユーザー(たとえば 'nobody'以外)として実行するようにWebサーバーを設定するか、実行するユーザーにそのユーザーのアクセス許可を与えることです。

も参照してください:PHP shell_exec() and sudo: must be setuid root

+0

これは、「誰も」以外の特定のユーザーとして実行するようにWebサーバーを設定するにはどうすればよいですか? –

+0

@Kenneth Vogt、あなたはどのサーバーを使用していたのか分かりませんでした。 Apacheを使用している場合は、 'User'と' Group'設定ディレクティブを確認してください。 (http://httpd.apache.org/docs/1.3/mod/core.html#user)あなたがそれを得ることができない場合、適切な質問はServerFault.comです。 – Brad

関連する問題