главная - Статьи - Linux, FreeBSD
Nginx SELinux
Дата обновления: 13.05.2020Вот опять столкнулся в очередном мануале по Nginx: disable SELinux. Люди, зачем?!
Не запускается Nginx? Смотрим, почему:
# cat /var/log/nginx/error.log
2020/05/13 12:41:32 [emerg] 21744#0: bind() to 0.0.0.0:25 failed (13: Permission denied)
Проверяем, может SELinux мешает (в данном случае мешает):
# grep nginx /var/log/audit/audit.log
type=AVC msg=audit(1589362892.868:2287): avc: denied { name_bind } for pid=21744 comm="nginx" src=25 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:smtp_port_t:s0 tclass=tcp_socket permissive=0
Можно просто разрешить httpd биндить порт 25 (в данном случае это помогло бы):
# semanage port -a -t http_port_t -p tcp 25
А можно сделать модуль для nginx.
# grep nginx /var/log/audit/audit.log | audit2allow -m nginx > nginx.te
Расширение .te - Type Enforcement file.
Содержимое этого файла - набор того, что требуется разрешить (то же, что и вывод команды "cat /var/log/audit/audit.log | audit2allow -m nginx
").
Проверяем содержимое файла, чтобы не разрешить что-то лишнее:
# less nginx.te
module nginx 1.0;
require {
type httpd_t;
type smtp_port_t;
class tcp_socket name_bind;
}
#============= httpd_t ==============
allow httpd_t smtp_port_t:tcp_socket name_bind;
Контексту httpd требуется доступ к 25 (smtp). В моем случае это легитимно. Компилю политику:
# checkmodule -M -m -o nginx.mod nginx.te
# semodule_package -o nginx.pp -m nginx.mod
Загружаю модуль:
# semodule -i nginx.pp
Проверяю, что модель загружен:
# semodule -l | grep nginx
Все. Забудьте вы уже про "для начала отключаю SELinux".
Чем хорош модуль? Его можно выключить (semodule -v -d nginx), включить (semodule -e nginx), сохранить для деплоя или истории.
Авторизуйтесь для добавления комментариев!