Что такое SELinux и как правильно настроить контексты безопасности

7 минут чтения
Средний рейтинг статьи — 4.9

Многие администраторы хотя бы раз сталкивались с ситуацией: «всё настроено правильно, права 755, владелец верный — а сервис всё равно не видит файлы».
Чаще всего виноват не chmod, а SELinux — дополнительный уровень безопасности в Linux, который контролирует, что процессы могут делать с какими файлами.

Разберём, что такое SELinux, зачем он нужен и как разобраться с контекстами безопасности, чтобы не выключать его «ради простоты».

SELinux (Security-Enhanced Linux) — это система обязательной политики безопасности, разработанная NSA и интегрированная в ядро Linux.
Она дополняет стандартную модель прав доступа (user/group/other) и проверяет не только владельцев и разрешения, но и контексты безопасности.

Если обычная модель Linux отвечает на вопрос «кто может читать файл», то SELinux добавляет «какой процесс и с какой целью может это сделать».

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

SELinux работает в одном из трёх режимов:

  • Enforcing — активен, блокирует запрещённые действия;
  • Permissive — только пишет предупреждения в лог (/var/log/audit/audit.log), но не блокирует;
  • Disabled — полностью отключён.

Проверить текущий режим можно так:

sestatus

или:

getenforce

Переключить:

setenforce 0   # permissive
setenforce 1   # enforcing

(Чтобы изменить режим навсегда — правь /etc/selinux/config.)

Что такое контексты безопасности

Каждый файл, процесс и порт в системе имеет SELinux-контекст, который выглядит так:

system_u:object_r:httpd_sys_content_t:s0

Он состоит из 4 частей:

ЭлементПримерОписание
usersystem_uSELinux-пользователь
roleobject_rРоль объекта (файл, процесс и т.п.)
typehttpd_sys_content_tТип — ключевой параметр, определяющий, что разрешено
levels0Уровень безопасности (обычно не используется в простых политиках)

Тип (type) — это основное, что управляет доступом.
Например:

  • httpd_sys_content_t — файлы, доступные веб-серверу;
  • httpd_log_t — логи веб-сервера;
  • ssh_port_t — порт, который разрешён для SSH.

Просмотр контекста файла

ls -Z /var/www/html

или для процесса:

ps -eZ | grep httpd

Как исправить проблемы с контекстами

Самая частая ошибка: ты копируешь сайт в /var/www/html, но Apache не может прочитать файлы, потому что у них неправильный контекст.

Решение:

1. Проверить контекст

ls -Z /var/www/html

2. Установить правильный тип

sudo chcon -R -t httpd_sys_content_t /var/www/html

3. Сделать изменения постоянными (после перезагрузки или relabel)

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html

Разрешение доступа к нестандартным портам

Если ты, например, хочешь, чтобы Nginx слушал 8080 порт, SELinux может заблокировать это.

Проверим, какие порты разрешены:

semanage port -l | grep http_port_t

Добавим свой:

sudo semanage port -a -t http_port_t -p tcp 8080

Отладка: как понять, что блокирует SELinux

Если сервис «не работает без причины», посмотри логи:

sudo cat /var/log/audit/audit.log | grep denied

Чтобы проще читать логи, установи утилиту setroubleshoot:

sudo yum install setroubleshoot
sudo sealert -a /var/log/audit/audit.log

Она расшифрует ошибки и даже предложит решения — какой контекст назначить или какое правило добавить.

SELinux vs AppArmor

Некоторые дистрибутивы (например, Ubuntu) используют AppArmor — упрощённую альтернативу.
AppArmor проверяет доступ на основе путей, SELinux — на основе контекстов.
SELinux гибче и надёжнее, но требует внимательной настройки.

Когда SELinux стоит выключать

Почти никогда. В 90% случаев проблема решается одной из команд:

restorecon -Rv /path/to/dir

или

semanage fcontext -a -t нужный_тип "/path(/.*)?"

Отключать SELinux стоит только временно, для диагностики, но не в продакшене.

Заключение

SELinux — это мощный механизм, который защищает систему даже при взломе приложения.
Он не заменяет права доступа, а дополняет их, добавляя слой «кто с кем может взаимодействовать».

Понимание контекстов (httpd_sys_content_t, ssh_port_t, и др.) — ключ к тому, чтобы система оставалась безопасной и рабочей.
Один раз разобравшись, ты перестанешь видеть SELinux как врага — и начнёшь использовать его как союзника в защите сервера.

7 минут чтения
Средний рейтинг статьи — 4.9

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний