1

目的:phpを使用してコマンドをMinecraftサーバーコンソールに直接入力します

phpスクリプト(ブラウザーから実行)を使用してシェルスクリプトをexec()しようとしています。ターミナルからphpを実行すると、機能します。しかし、ブラウザでは何も起こりません。

exec('sudo -u root sh /home/minecraft/whitelist-reload.sh', $out, $ret_val);

ターミナルから実行すると、「アレイ0」が表示されますが、ブラウザから「アレイ1」が表示されます。

どうした?シェルを実行すると、その後のすべてが端末にいるかのように機能するべきではありませんか?(シェルスクリプトの内部に何があるかは重要ですか?)

シェルにはすべてのrx権限があり、sudoersファイルに次のようにあります。

www-data ALL = NOPASSWD: /home/minecraft/whitelist-reload.sh
4

2 に答える 2

2

問題は、おそらく権限を持っているユーザーとして端末でスクリプトを実行するのsudoに対し、apache / webserverユーザーは権限を持たないため、$ret_val(実際には単なるステータスコード)が1(エラーを意味する)に設定されることです。 。

var_dump($out);どちらの場合も、exec呼び出しの結果を確認してみてください。ブラウザからこの種のことを行うにはproc_open、家族を調べたり、777にchmodされたスクリプトを作成して、apacheユーザーも実行できるようにすることができます。次に、そのスクリプトで実際のシェルスクリプトを呼び出し、その出力を返します。ただし、これは非常に危険であり、自分のマシンで環境をテストする場合にのみ使用する必要があります。実稼働環境では絶対にこれを行わないでください。

私はここにもいくつか質問を投稿しましたが、それは有益であることがわかるかもしれません:

sshを介した相互作用

2番目のシェルを開き、プロファイル変数をロードして、別のスクリプトを呼び出します

于 2012-08-03T11:28:53.497 に答える
0

結局のところ...sudoersファイルにwww-dataを入力した後、私がする必要があるのは、その後の「-uroot」を取得することだけでした。

于 2012-08-04T08:42:09.753 に答える