我使用Nginx / PHP-FPM运行CentOS 7。 为了debugging一些缓慢的Wordpress和CodeIgniter请求,我在www-pool.conf激活了PHP-FPM的慢日志function:
slowlog = /var/log/php-fpm/www-slow.log request_slowlog_timeout = 4s
缓慢的请求正在被logging,但有意义的堆栈跟踪不会打印到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)附加到进程以追踪其执行。
这在之前曾经报道过红帽,但他们拒绝采取任何措施 。
你可以检查你的/var/log/audit/audit.log ,你会发现这个拒绝logging在一个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创build本地SELinux策略模块。 通过标准input将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日志条目粘贴到terminal中,然后按Ctrl – D 。 你会得到一个生成的政策和说明:
******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i php_ptrace.pp
所以,运行这个命令,就完成了。