2

PHPでexec()を使用しようとしていますが、Webブラウザーとコマンドラインシェルを使用して使用すると、異なる結果が得られます。

簡単なこと:

<?php exec('mount 10.0.0.1:/mnt/test /home/user/test', $output) ?>

Webブラウザーからこれを呼び出すと、何もマウントされず、コマンドライン(php-cli)から実行すると、マウントが正常に実行されます。$output配列に返されるエラーもありません。だから私は何も手に入れることができません。私はWebとCLIの両方を同じユーザーとして実行しているので、アクセス許可の問題ではないはずです。SElinuxは無効になっているため、何もブロックしません。ファイアウォールについても同じことが言えます-同様に無効になっています。

PHP exec()をWebブラウザとコマンドラインで同じように動作させるにはどうすればよいですか?

4

1 に答える 1

0

パーティションは root としてのみマウントできます。www-data (apache を実行しているユーザーだと思います) を sudoers に追加すると問題は解決しますが、大きなセキュリティ ホールができます。ただし、サービスなのでパスワードを書くことはできないので、そのユーザーにパスワードを聞かないように言わなければなりません。

これを sudoers の一番下に追加します。

www-data ALL=NOPASSWD: ALL

そして、コマンドを次のように使用します

<?php exec('sudo mount 10.0.0.1:/mnt/test /home/user/test', $output) ?>

明らかに、これは他に類を見ないセキュリティ ホールです。

これを回避する 1 つの方法は、キューを使用してジョブを配置し、ジョブが安全であることを確認し、必要に応じてマウントするサービスで処理することです。

PHP インターフェースを持つ素敵なキューはbeanstalkです

于 2013-01-23T04:46:08.380 に答える