hostprofi.ru
Подобрать хостинг
Термин·буква S

SELinux

краткое определение

SELinux (Security-Enhanced Linux) — система обязательного контроля доступа (MAC) для Linux. Ограничивает действия процессов через политики безопасности, даже если они запущены под root. Стандартна в RHEL, AlmaLinux и Fedora.

SELinux (Security-Enhanced Linux) — расширение ядра Linux, реализующее систему мандатного контроля доступа (MAC — Mandatory Access Control). В отличие от стандартного DAC (Discretionary Access Control, права rwxrwxrwx), SELinux применяет политики безопасности, которые ограничивают действия процессов вне зависимости от прав пользователя.

Как работает

Каждый объект в системе (файл, процесс, сокет, порт) получает метку безопасности (security context) в формате user:role:type:level. Например, файл Nginx: system_u:object_r:httpd_exec_t:s0. Ядро проверяет: разрешает ли политика процессу с контекстом httpd_t обращаться к объекту с типом httpd_exec_t. Нет разрешения — доступ запрещён и записывается в audit-лог.

Режимы SELinux: Enforcing — политики применяются, нарушения блокируются (продакшн). Permissive — политики только логируются, не блокируются (для отладки). Disabled — SELinux выключен. Проверка: getenforce. Переключение: setenforce 0 (временно) или правка /etc/selinux/config (постоянно, требует перезагрузки).

Типичные проблемы при настройке: Nginx не может прочитать файлы сайта из нестандартной директории (chcon -R -t httpd_sys_content_t /srv/www), Nginx не может открыть нестандартный порт (semanage port -a -t http_port_t -p tcp 8080).

История

SELinux разработан NSA (Агентство национальной безопасности США) совместно с Red Hat. Первая версия опубликована в 2000 году. В ядро Linux 2.6 (2003) SELinux включён как стандартный модуль безопасности через LSM (Linux Security Modules). В RHEL 4 (2005) стал компонентом по умолчанию. AppArmor (Ubuntu) — альтернативная реализация MAC с другим подходом (пути файлов вместо меток).

SELinux: практика управления политиками

Типичная ситуация: после перемещения файлов nginx теряет к ним доступ — SELinux блокирует из-за неправильного контекста. Исправление: restorecon -Rv /path/to/files восстанавливает контекст из политики. chcon -t httpd_sys_content_t /path/to/file — ручное изменение. semanage fcontext -a -t httpd_sys_content_t '/path(/.*)?' — добавить в политику постоянно.

audit2allow — инструмент для создания custom-политик из audit.log: ausearch -c nginx --raw | audit2allow -M mynginx && semodule -i mynginx.pp. Это загружает новый модуль политики, разрешающий конкретную операцию. Для VPS-серверов SELinux рекомендуется оставить в enforcing — это дополнительный уровень защиты при компрометации PHP/веб-приложения. На AlmaLinux/RHEL SELinux включён по умолчанию.

На что обращать внимание

Не рекомендуется отключать SELinux на продакшн-серверах — это снижает безопасность при компрометации. Правильный подход: использовать audit2allow для генерации правил из audit-лога, а не переключать в permissive при проблемах. AlmaLinux, RHEL и Fedora поставляются с SELinux в режиме Enforcing по умолчанию. Ubuntu и Debian используют AppArmor вместо SELinux.

SELinux в хостинге

SELinux — обязательный компонент безопасности в AlmaLinux/RHEL. Режимы: enforcing — блокирует нарушения политик, permissive — только логирует. Для nginx: SELinux по умолчанию запрещает nginx слушать нестандартные порты и обращаться к файлам вне /var/www/html. Добавить разрешение: semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?'. Для Docker: используйте :z или :Z при bind mount volumes — SELinux иначе блокирует доступ контейнера к файлам хоста. На Ubuntu/Debian: SELinux не используется по умолчанию — вместо него AppArmor. VPS-провайдеры на AlmaLinux обычно оставляют SELinux в permissive режиме для совместимости.

Другие термины

SELinux — что это, определение и как работает | Справочник — hostprofi.ru