Настройка SELinux для Apache/Nginx в Unix/Linux

Настройка SELinux для Apache/Nginx в Unix/Linux

И так, я за свои 5 лет администрирования, никогда не настраивал SELinux — я его просто выключал. Но всегда бывает первый раз и сейчас, пришло время разобраться как же устроен и как с ним работать.

Многие из вас, уже сталкивались со следующей проблемой: При попытки использовать httpd сервер ( как пример) с включенным  SELinux на борту — апач не работал вообще ( и не спроста, т.к SELinux блокирует пакеты).

Сейчас я, воспроизведу проблему. Для начала, установлю httpd сервер ( на примере CentOS):

Или, проверим имеется ли он в ОС:

Мой вывод такой:

Видим что апач установлен. Проверим, работает ли SELinux, для этого служат несколько команд ( но речь не об этом), я возьму одну из них:

Это означает что он включен на сервере.

PS: вот чтиво как можно выключить SELinux:

Как отключить SELinux на CentOS

Запускаем апач:

Запустить команду для просмотра процессов httpd:

Контекст SELinux, связанный с процессами httpd, является unconfined_u: system_r: httpd_t: s0. Вторая последняя часть контекста, httpd_t, является типом. Тип определяет домен для процессов и тип для файлов. В этом случае процессы httpd выполняются в домене httpd_t.

Политика SELinux определяет, как процессы, запущенные в ограниченных доменах, такие как httpd_t, взаимодействуют с файлами, другими процессами и системой в целом. Файлы должны быть помечены правильно, чтобы разрешить доступ httpd к ним. Например, httpd может читать файлы, типом httpd_sys_content_t, но не может их писать, даже если разрешения Linux разрешают доступ на запись. Например разрешение доступа к скрипта сети, позволяя httpd обращаться к файловым системам NFS и CIFS, а httpd разрешено выполнять сценарии Common Gateway Interface (CGI).

Когда вы настраиваете /etc/httpd/conf/httpd.conf для того, чтобы httpd прослушивал порт, отличный от TCP-порта 80, 443, 488, 8008, 8009 или 8443, команда semanage port должна использоваться для добавления нового номера порта Конфигурация политики SELinux. В следующем примере демонстрируется настройка httpd для прослушивания порта, который не определен в конфигурации SELinux для httpd.

Для начала, останавливаем апач:

При использовании semanage, у меня возникли проблемы, я получил следующую ошибку:

Исправление:
Исправляем «semanage: command not found» в Unix/Linux

Запустим команду для просмотра httpd портов SELinux ( которые дают возможность httpd, прослушивать порты):

Видим что стандартные порты используются и работают. Но если нас интересует кастомный проброс определенного порта? Давайте рассмотрим пример. Редактируем конфиг апача:

И настраиваем прослушивание порта ( предположим, что нужно прослушивать порт 54321)

Находим строку:

Или:

И приводим к виду:

Или ( как я сделал себе)

Запускаем службу апач:

И, получаем ошибку:

Смотрим лог:

И так, нужно разрешить 12345 порт в SELinux, чтобы чтобы httpd мог прослушивать его 12345, как используется в этом примере, требуется следующая команда:

Теперь, пробуем запустить снова апач:

Теперь, когда SELinux был сконфигурирован так, чтобы httpd мог прослушивать нестандартный порт (в нашем примере TCP 12345), httpd успешно запускается на этом порту.
Чтобы доказать, что httpd прослушивает и передает на 12345 TCP-порт , откройте telnet-соединение с указанным портом и выполните команду HTTP GET, как показано ниже:

Как-то так!

Создание политик. 

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

Создайте политику, чтобы назначить httpd_log_t контекст для ведения логов:

Создайте политику, чтобы назначить httpd_log_t контекст для использования кешей:

Разрешаем чтение и запись (ReadWrite)

Apache теперь имеет право использовать наши собственные каталоги. Тем не менее, он не имеет доступа для чтения ко всему. Если у вашего приложения есть файлы или каталоги ( например WordPress), то можно создать правило и разрешить чтение-запись для определенных файлов\папок.

Следующему будет присвоен  readwrite для Apache и он сможет писать или изменять данные:

Создайте политику, чтобы назначить  httpd_sys_rw_content_t контекст для файла с конфигурацией WordPress (wp-config.php):

Применяем SELinux политики

Наши политики созданы и готовы к применению. Чтобы все проделанные действия заработали, необходимо перечитать политики самого SELinux:

Все работает, а я завершаю свою статью «Настройка SELinux для Apache/Nginx в Unix/Linux».

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

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