
У меня есть небольшой веб-сервер (CentOS 8), на котором запущено небольшое приложение php и mysql. На нем также запущены Nagios, BIND и Postfix, работающий как вторичный MX.
Кажется, все "работает", и я никогда не замечал никаких проблем. Я могу загрузить Nagios и другие приложения php через порт 443. Если я загружаю URL-адреса через порт http / порт 80, Apache настраивается на перенаправление на 443 и делает это одинаково хорошо.
Однако selinux регулярно регистрирует следующее AVC, указывающее на какую-то проблему с портом 80:
time->Sat Dec 12 01:55:16 2020
type=AVC msg=audit(1607756116.608:1381369): avc: denied { name_connect } for pid=631936 comm="httpd" dest=80 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0
Глядя на /var/log/httpd/error_log
, я вижу соответствующее сообщение Permission Denied для того же pid в то же время:
[Sat Dec 12 01:55:16.608941 2020] [core:warn] [pid 631936] (13)Permission denied: AH00056: connect to listener on [::]:80
Есть ли способ отследить, что именно Apache пытается сделать, что блокируется? Как я уже упоминал, похоже, ничего не сломано, поэтому я не пытался создать модуль, который бы это разрешал. Но я хотел бы найти основную причину сообщения AVC denied здесь, и либо:
- Разрешить, если это безвредно и действительно должно быть разрешено, ИЛИ
- Настройте Apache так, чтобы он прекратил попытки сделать то, что он пытается сделать
решение1
Соединение, которое здесь устанавливается, это соединение Apache с самим собой: они регистрируются как internal dummy connection
и являются способом Apacheпробуждение его дочерних процессов.
По умолчанию SELinux не позволяет веб-серверу устанавливать исходящие сетевые соединения. Несколько булевых значений изменят это поведение, но, вероятно, вам нужно использовать то, httpd_graceful_shutdown
что позволяет Apache подключаться к любому порту TCP с меткой http_port_t
(80, 81, 443, 488, 8008, 8009, 8443, 9000) и ни к чему больше. Как следует из названия, это позволяет Apache не выдавать ложные предупреждения при завершении работы, так как он также хочет подключиться к себе при завершении работы. Это также избавит от мгновенной проблемы и разрешит внутреннее фиктивное соединение.
setsebool -P httpd_graceful_shutdown 1