Nginx и SELinux при обновлении до RHEL 6.6/CentOS 6.6

selinux

selinux

При обновлении рабочей системы до Red Hat Enterprise Linux 6.6 или CentOS 6.6, правила доступа SELinux для nginx меняют структуру. Новые правила могут не повлиять на nginx со стандартным конфигом, однако различные пользовательские конфигурации могут быть заблокированы и придется вручную прописывать разрешения для них.

Далее будут описаны некоторые проблемы, с которыми можно столкнуться при обновлении до RHEL/CentOS 6.6 и рекомендации по их решению.

Обзор SELinux

На серверах RHEL и CentOS SELinux включен по-умолчанию. Каждый объект операционной системы (процесс, файловый дескриптор, файл и т.д.) связан с контекстом SELinux, который определяет права доступа и возможные операции с объектом. При обновлении до версии операционной системы 6.6, nginx связывается с контекстом httpd_t:

Контекст httpd_t разрешает nginx прослушивать основные веб-порты, получать доступ к конфигурационным файлам в каталоге /etc/nginx и стандартному расположению корневого каталога документов веб /usr/share/nginx. Он не разрешает многие другие операции, такие как проксирование трафика и взаимодействие с другими процессами через сокеты.

Режимы работы SELinux

SELinux может быть запущен в одном из трех режимов работы: enforcing, permissive или disabled. В том случае, если вы делаете изменения конфигурации, которые могут идти в разрез с текущими правилами безопасности, можно перевести SELinux из режима enforcing в permissive, лучше это делать на тестовом окружении. В режиме permissive, SELinux разрешает все операции, но логирует все операции, которые были бы запрещены в режиме enforcing.

Добавление контекста httpd_t в список permissive:

Удаление контекста httpd_t из списка permissive:

Переключение глобального режима работы SELinux

Активация глобального режима permissive:

Активация глобального режима работы enforcing:

Исключения SELinux

В режиме permissive, все исключения безопасности логируются в /var/log/audit/audit.log. При возникновении проблем с nginx в режиме enforcing, можно переключиться в режим permissive, и откорректировать правила безопасности, основываясь на логах режима permissive.

Пример 1. Подключение прокси запрещено

Конфигурация SELinux по-умолчанию не разрешает nginx подключение к удаленному веб-серверу, fastCGI или другому серверу.

Что мы видим в логе audit.log:

Подробности о сообщении 1415714880.156:29 можно узнать с помощью audit2why:

Предоставляем доступ:

audit2why рекомендует настройки для исправления данного запрета. Разрешить данное действие можно как на постоянной основе (-P), так и временно.

Что такое логические параметры

Разобраться в этом вопросе и лучше понять значение логических параметров поможет пакет setools.

Установим setools:

Параметр httpd_can_network_relay

Очевидно, что can_network_relay разрешает подключения на различные порты, включая http_port_t:

Добавить порт к правилу не сложно:

Если порт уже включен в другое правило:

не нужно его переопределять, так как это может повлиять на другие сервисы.

Параметр httpd_can_network_connect

httpd_can_network_connect разрешает httpd_t подключение ко всем типам tcp сокетов, имеющим атрибут port_type. Их перечень можно получить следующей командой:

Пример 2. Доступ к файлу запрещен

Конфигурация SELinux по-умолчанию разрешает доступ nginx только к файлам в определенных (традиционных) каталогах.

Что мы видим в логе audit.log:

Результат утилиты audit2why:

В случае с запретом доступа к файлам есть два выхода:

Первый: изменение атрибута файла

Изменение атрибута файла так, что бы httpd_t смог получить к нему доступ:

Данное изменение может быть удалено при изменениях в файловой системе, так что, можно сделать его постоянным:

Так же, можно изменять атрибуты групп файлов:

Второй: добавление разрешений для httpd_t

Расширенные разрешения httpd_t для доступа к разным файлам:

Создаем готовое правило используя ключ -M:

Загружаем его semodule -i и проверяем результат с ключом -l:

Эти изменения будут актуальны и после перезагрузки системы.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *