Назад | Перейти на главную страницу

PHP-FPM Slow Log ERROR: не удалось выполнить ptrace (ATTACH) потомка: операция не разрешена (1)

Я использую CentOS 7 с Nginx / PHP-FPM. Чтобы отладить пару медленных запросов 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.

Любые идеи?

Это вызвано SELinux, который блокирует подключение веб-сервера (и 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

Итак, запустите эту команду, и все готово.