Centos

PHP-FPM 慢日誌錯誤:無法 ptrace(ATTACH) 子:不允許操作 (1)

  • November 12, 2017

我正在使用 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

所以,執行那個命令,你就完成了。

引用自:https://serverfault.com/questions/883082