SELinux: что это, режимы и контексты безопасности | Глоссарий FREEHOSTING

SELinux

Security-Enhanced Linux
SELinux — SELinux — модуль ядра Linux, реализующий мандатное управление доступом (MAC). Каждому процессу и файлу присваивается контекст безопасности, а политика SELinux определяет, какие переходы и операции разрешены. По умолчанию включён в Red Hat, CentOS, Fedora и Rocky Linux.

Определение простыми словами

SELinux — это второй слой проверки прав поверх классических Unix-прав (rwx). Даже если nginx запущен от root, SELinux не даст ему прочитать файл с контекстом, который не описан в политике. Каждый процесс получает домен (например, httpd_t), а каждый файл — тип (httpd_sys_content_t). Разрешённые переходы между ними определяются жёсткими правилами, а не пользовательскими ACL.

Идея пришла из проектов NSA для систем с высокой степенью защиты. В обычной CMS-инфраструктуре SELinux ловит ситуации, когда уязвимый PHP-скрипт пытается прочитать /etc/shadow или открыть TCP-порт за пределами разрешённого диапазона. Без него атакующий получил бы доступ ко всему, до чего дотягиваются права процесса. С ним — только к файлам и портам, явно прописанным в политике.

Сравнение режимов

Режим Что делает Когда применять
enforcing Блокирует и логирует Production
permissive Только логирует Отладка политики
disabled Полностью выключен Не рекомендуется

Кейсы использования

  • Защита веб-сервера: эксплойт в PHP не даст доступа к чужим vhost.
  • Изоляция контейнеров: container-selinux добавляет домен container_t.
  • Сертификация PCI DSS и ФСТЭК: MAC обязателен для ряда стандартов.
  • Негативный сценарий: «всё работало, после rsync сайт перестал отдаваться» — типичная проблема потерянных контекстов. Решается командой restorecon -Rv /var/www вместо отключения SELinux.

Технические детали

getenforce
setenforce 0
sestatus
ls -Z /var/www/html
chcon -t httpd_sys_content_t /var/www/html/index.html
restorecon -Rv /var/www
semanage port -a -t http_port_t -p tcp 8080
ausearch -m AVC -ts recent
audit2allow -a -M mypol
semodule -i mypol.pp

Альтернатива SELinux — AppArmor в Ubuntu и Debian, который оперирует путями вместо контекстов. Для глубокой изоляции отдельных операций используют seccomp и chroot. Все три механизма дополняют, а не заменяют классические права UNIX.

Частые вопросы

Можно ли выключить SELinux на проде?

Технически да, но это снимает целый слой защиты. Лучше перевести в permissive, починить контексты и вернуть enforcing.

Чем SELinux отличается от AppArmor?

SELinux работает с контекстами и метками файлов и сложнее в настройке. AppArmor описывает разрешённые пути и проще в освоении.

Как понять, что SELinux что-то заблокировал?

В логах появляются записи AVC denied. Утилита <code>ausearch</code> и <code>audit2allow</code> помогают сгенерировать правильную политику.