BS 監控平台需檢測虛擬機存活,使用 ICMP 協議,需創建 SOCK_RAW 類型 Socket。Apache + PHP 模塊模式下報錯:無權限創建 Socket。
SOCK_RAW 需要 Root 權限 或 CAP_NET_RAW 能力www-data 等低權限用戶運行,無法創建原始套接字sapi/cgi/fpm/fpm_unix.c(或用 find 定位),文件頂部添加宏:#define I_REALLY_WANT_ROOT_PHP
./configure [你的參數] && make && make install
user = root
group = root
# Nginx location 配置示例
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
CAP_NET_RAW 能力:setcap cap_net_raw=+ep /usr/sbin/php-fpmping 命令或 fping 工具配合 exec(),避免直接操作 Raw Socket技術上可通過修改 PHP 源碼宏定義 + Root 運行 php-fpm 解決 Raw Socket 權限問題,但生產環境強烈不建議。應優先採用能力授權、外部工具調用或成熟監控組件等安全方案。