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=2
grep hidepid /proc/self/mountinfo