KeyWeb
1111111111Rating 0.00 (0 Votes)
В данном случае это проект Django, с бэкендом в виде Gunicorn, фронтендом выступает Nginx, папка проекта располагается в нестандартном месторасположении, для которого соответственно не задан SELinux контекст, в итоге админы или девелоперы - попросту отключают SELinux.

Логи SELinux

Смотреть можно здесь:
/var/log/audit/audit.log
Обычно выставляем режим уведомлений SELinux в permissive и смотрим что происходит, обычно проблема выражается в неправильно заданном контексте для папок Web проекта. В моем случае возникала ошибка о блокировке в виду отсутствия httpd_sys_content_t контекста.

SELinux контекст для Web папки проекта

Обычно папка с проектом или сам Gunicorn запускаются из-под кастомной учетной записи, добавляем nginx в юзер-группу:
usermod -aG customUser nginx
Разрешаем чтение, исполнение для группы:
chmod g+rx /home/customUser/
Задаем нужный контекст для папки проекта:
semanage fcontext -a -t httpd_sys_content_t  " /home/customUser/project(/.*)?"
Посмотреть заданные правила можно здесь:
cat /etc/selinux/targeted/contexts/files/file_contexts.local

Nginx + Gunicorn sock

Все заработало, кроме gunicorn сокета, через который должен был работать nginx с gunicorn. И nginx стал валится с 50х ошибкой, сообщающей о том, что бэкенд недоступен, первым делом смотрим audit.log с grep'ом по nginx:
grep nginx /var/log/audit/audit.log | audit2allow
Далее можно сгенерировать разрешающие правила для nginx:
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
Посмотреть правила можно например так:
grep nginx /var/log/audit/audit.log | audit2allow -m nginx > nginx.rules
cat nginx.rules
Устанавливаем новый SE модуль:
semodule -i nginx.pp
Снова смотрим:
grep nginx /var/log/audit/audit.log | audit2allow


#============= httpd_t ==============

#!!!! This avc is allowed in the current policy
allow httpd_t init_t:unix_stream_socket connectto;

#!!!! This avc is allowed in the current policy
allow httpd_t unconfined_t:unix_stream_socket connectto;

#!!!! This avc is allowed in the current policy
allow httpd_t user_home_t:file { open read };

#!!!! This avc is allowed in the current policy
allow httpd_t user_home_t:sock_file write
Перезапускаем сервисы:
systemctl restart gunicorn && systemctl restart nginx
Проверяем, Радуемся :)

Добавить комментарий


Обновить
Защитный код

KeyWeb

Сейчас 53 гостей и ни одного зарегистрированного пользователя на сайте

Вверх
Вниз