PHP disable_functions に問題があります。suPHP FastCGI PHP > 5.3.0 を実行している Apache サーバーで、仮想ホストごとに disable_functions 値を設定しようとしています。そのために私がやっていることは、suPHP 構成で suPHP_ConfigPath の使用を無効にして、ユーザーが独自の php.ini ファイルを使用できないようにすることです。次に、グローバル php.ini ファイルで、php セクションの [PATH] ディレクティブを使用して、特定の仮想ホストでカスタムの disable_functions を構成します。何かのようなもの:
php.ini ファイル
...
disable_functions = shell_exec, exec
[PATH=/home/someuser/public_html]
disable_functions =
...
その仮想ホストのphp構成をphpinfoファイルでチェックすると、正しい期待値が得られます。Disable_functions ディレクティブには、ローカル値 = 値なし、マスター値 = shell_exec、exec があります。しかし、shell_exec を使用するテスト スクリプトを実行すると、サーバーがブロックし、セキュリティ上の理由から shell_exec が無効になっていることを示すエラーが表示されます。これは、PHP が disable_functions ローカル値を無視し、代わりにマスター値を使用していることを意味します。
[PATH] [HOST] PHP セクションのドキュメントでは、これらのセクションで無効化機能を構成できるはずなので、期待どおりに機能しない理由を理解できません。ドキュメントと同様に、セクションでは extension および zend_extension ディレクティブのみを使用しないでください。
私はすでに他のディレクティブ PHP_INI_SYSTEM と php.ini のみのディレクティブ (expose_php) でテストしており、すべてが期待どおりに機能しました。だから私は完全に道に迷っており、何が起こっているのか理解できません。
完全を期すために、FastCGI + SuExec PHP > 5.3.0 (suPHP と同様の構成ですが、まったく同じではない) を実行している Apache サーバーでテストしましたが、同じことが起こり、disable_functions ローカル値は無視されます。
これがうまくいかない正当な理由を知っている人はいますか?PHPのバグですか?私が考慮していないことがありますか?