PHP-FPM 慢日志错误:无法 ptrace(ATTACH)子项:操作不允许(1)

PHP-FPM 慢日志错误:无法 ptrace(ATTACH)子项:操作不允许(1)

我正在运行带有 Nginx/PHP-FPM 的 CentOS 7。为了调试几个缓慢的 Wordpress 和 CodeIgniter 请求,我在以下位置激活了 PHP-FPM 的慢速日志功能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 用户所有。

有任何想法吗?

答案1

这是由 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 

要解决您自己的服务器的问题,您可以使用 创建本地 SELinux 策略模块audit2allow。通过标准输入将 AVC 提供给audit2allow它,如下所示:

$ 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

因此,运行该命令,您就完成了。

相关内容