php exec / shell_execアクションCLIとCGI

php exec / shell_execアクションCLIとCGI

PHPを使用していくつかのシステムコマンドを実行しようとすると、完全に理解できない動作が発生します。コマンドラインからPHPスクリプトを実行すると、期待した結果が得られます。ただし、Apacheを介して実行すると、混合結果が表示されます。

たとえば、次のような単純な小さなPHPスクリプトがあります。

<?php
$res = shell_exec("ps -ef");
echo $res;
?>

コマンドラインから実行すると、「ps -ef」を直接実行したかどうかを確認したいので、プロセス全体のリストを取得できます。ただし、Apacheを介してスクリプトを実行すると、いくつかのルート所有プロセスと一般ユーザーが所有する1つのプロセスがありますが、ほとんどの場合、Apacheが所有するより小さなプロセスセットを取得します。別のコマンドを使用しようとすると、同様の動作が発生します。 CLIモード(例: "php test.php")で実行すると機能しますが、ApacheからPHPスクリプトを抽出すると機能しません。どのユーザーがCLIモードで実行しているかは問題ではないようです(私はrootと個人のユーザーアカウントでテストしました)。これは一種の権限問題のようです。 「ps -ef」の例では、どちらの場合も結果が得られたため、実行可能な問題ではないようです。

私はApache 2.4.37とPHP 8.0.8を使ってCentOS 8を実行しています。

私は何を見逃していますか?

ありがとう、

ギャビン

ベストアンサー1

ファイルシステムは で/proc確認できます。hidepid=2grep hidepid /proc/self/mountinfo

おすすめ記事