最近、BS アーキテクチャを使用して、仮想マシンがダウンしているかどうかを監視する機能を備えたサザン ベース プラットフォームの監視インターフェイスを作成しました。
このプロセスは、監視マシンがアクセス要求を発行し、ターゲットの仮想マシンがダウンしているかどうかを検出するためにソケットを開始します。
ICMP プロトコルを通じて検出されるため、ソケット タイプ SOCK_RAW が使用されます。
サーバーは Apache + php + mysql を使用しており、ソケットを作成する権限がないことを示すプログラム エラーが見つかりました。後でリソースを確認したところ、このタイプのソケットには root 権限が必要であるか、ソケットを作成するには setuid() と組み合わせて CGI モードで php を実行する必要があることがわかりました。
解決策: 代わりに nginx+php-cgi+mysql を使用してください。
PHP をコンパイルするとき、サービスを root ユーザーとして開始するには次の変更を加える必要があります。
1. php $src_path/sapi/cgi/fpm/fpm_unix.c のソースコードを見つけます (バージョンが異なるため、find $src_path -name fpm_unix.c を使用するのが最善です)
2. ファイルの先頭にマクロ定義を追加します: #define I_REALLY_WANT_ROOT_PHP
3. make make install を再構成します
4.php-fpm.conf ユーザーとグループを root に変更します