Centos
PHP-FPM 慢日誌錯誤:無法 ptrace(ATTACH) 子:不允許操作 (1)
我正在使用 Nginx/PHP-FPM 執行 CentOS 7。為了調試幾個緩慢的 Wordpress 和 CodeIgniter 請求,我在以下位置啟動了 PHP-FPMs 慢日誌功能
www-pool.conf
:slowlog = /var/log/php-fpm/www-slow.log request_slowlog_timeout = 4s
緩慢的請求被記錄下來,但有意義的堆棧跟踪不會列印到
www-slow.log
. 該文件正在生成但為空,預設error.log
顯示如下條目:[12-Nov-2017 16:50:26] WARNING: [pool www] child 21497, script '/usr/share/nginx/www/wordpress/index.php' (request: "GET /index.php") executing too slow (4.161874 sec), logging [12-Nov-2017 16:50:26] ERROR: failed to ptrace(ATTACH) child 21491: Operation not permitted (1) [12-Nov-2017 16:50:26] WARNING: [pool www] child 21491, script '/usr/share/nginx/www/wordpress/index.php' (request: "GET /index.php") executing too slow (4.590854 sec), logging [12-Nov-2017 16:50:26] ERROR: failed to ptrace(ATTACH) child 21490: Operation not permitted (1) [12-Nov-2017 16:50:26] WARNING: [pool www] child 21490, script '/usr/share/nginx/www/wordpress/index.php' (request: "GET /index.php") executing too slow (4.620915 sec), logging [12-Nov-2017 18:03:52] ERROR: failed to ptrace(ATTACH) child 21523: Operation not permitted (1) [12-Nov-2017 18:03:52] WARNING: [pool www] child 21523, script '/usr/share/nginx/www/wordpress/wp-admin/index.php' (request: "GET /wp-admin/index.php") executing too slow (4.366918 sec), logging
日誌文件/文件夾由執行 php-fpm 的 php-fpm 使用者擁有。
有任何想法嗎?
這是由 SELinux 引起的,它阻止 Web 伺服器(以及在 Web 伺服器上下文下執行的 PHP)附加到程序以跟踪它們的執行。
前段時間向 Red Hat 報告了這件事,但他們拒絕對此採取任何行動。
您可以檢查您的
/var/log/audit/audit.log
,您會發現此拒絕記錄在類似於以下內容的 AVC 中:type=AVC msg=audit(05/21/2015 21:37:21.028:14259) : avc: denied { sys_ptrace } for pid=1385 comm=php-fpm capability=sys_ptrace scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=capability
要為您自己的伺服器解決問題,您可以使用
audit2allow
. 通過標準輸入將 AVCaudit2allow
輸入,如下所示:$ audit2allow -M php_ptrace type=AVC msg=audit(05/21/2015 21:37:21.028:14259) : avc: denied { sys_ptrace } for pid=1385 comm=php-fpm capability=sys_ptrace scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=capability
您執行命令,然後將 AVC 日誌條目粘貼到終端並按
Ctrl
-D
。您將獲得生成的策略和說明:******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i php_ptrace.pp
所以,執行那個命令,你就完成了。