Команда getenforce — самый быстрый способ проверить статус SELinux: достаточно выполнить её в терминале, и система вернёт один из трёх режимов — Enforcing, Permissive или Disabled. Если после установки веб-сервера, базы данных или стороннего приложения сервис внезапно отказывается запускаться с ошибкой «Permission denied», хотя права на файлы выставлены корректно, первым делом стоит проверить, не блокирует ли доступ именно SELinux.
SELinux (Security-Enhanced Linux) — это модуль принудительного контроля доступа, встроенный в ядро дистрибутивов семейства RHEL, CentOS, Fedora, Rocky Linux и AlmaLinux. Он работает поверх стандартных Unix-прав и может запрещать операции даже пользователю root, если политика безопасности этого не разрешает. Поэтому умение быстро определить текущий режим — базовый навык диагностики.
Быстрая проверка через getenforce
Самая короткая команда для проверки — getenforce. Она не требует дополнительных аргументов и мгновенно выводит текущий режим работы модуля.
getenforce
Возможны три варианта ответа. Enforcing означает, что политики активно применяются и нарушения блокируются. Permissive — нарушения только записываются в журнал, но не блокируются; этот режим удобен для отладки. Disabled говорит о том, что SELinux полностью выключен.
Обратите внимание: команда показывает текущее состояние ядра, которое может отличаться от значения, прописанного в конфигурационном файле. Например, администратор мог временно перевести систему в Permissive до перезагрузки.
Подробная информация через sestatus
Когда нужна не просто строка режима, а полная картина, используйте команду sestatus. Она выводит точку монтирования SELinuxfs, путь к конфигурации, загруженную политику и режимы — текущий и заданный при загрузке.
sestatus
Типичный вывод содержит несколько важных строк:
- 🔒 SELinux status — включён модуль или выключен (enabled/disabled).
- 📂 Loaded policy name — имя загруженной политики, обычно targeted.
- ⚙️ Current mode — режим, активный прямо сейчас.
- 🧭 Mode from config file — режим, указанный в конфигурации и применяемый при загрузке.
Расхождение между Current mode и Mode from config file — частая находка. Оно означает, что режим меняли «на лету» командой setenforce, и после перезагрузки система вернётся к значению из файла настроек.
Проверка конфигурационного файла
Постоянные настройки SELinux хранятся в файле /etc/selinux/config. Чтобы узнать, какой режим будет активен после перезагрузки, откройте его любым способом:
cat /etc/selinux/config
Ключевой параметр — строка SELINUX=, которая принимает значения enforcing, permissive или disabled. Рядом обычно находится параметр SELINUXTYPE=, определяющий тип политики — чаще всего targeted.
⚠️ Внимание: изменение значения в/etc/selinux/configне переключает режим немедленно — правка вступает в силу только после перезагрузки системы. Для мгновенного переключения между Enforcing и Permissive используйтеsetenforce 1илиsetenforce 0.
Ниже сводная таблица основных способов проверки.
| Способ | Что показывает | Когда использовать |
|---|---|---|
getenforce | Текущий режим одной строкой | Быстрая проверка |
sestatus | Режим, политику, точку монтирования | Полная диагностика |
cat /etc/selinux/config | Режим после перезагрузки | Проверка постоянных настроек |
sestatus -v | Контексты процессов и файлов | Углублённый анализ |
Проверка контекстов файлов и процессов
Иногда важно не только знать режим, но и понять, почему SELinux блокирует конкретную операцию. Для этого проверяют контексты безопасности — метки, присвоенные файлам и процессам.
Контекст файла или каталога показывает команда ls -Z:
ls -Z /var/www/html/
Контекст запущенного процесса можно увидеть через ps -eZ с фильтром по имени сервиса. Если, например, веб-сервер nginx пытается читать файлы с контекстом, не предусмотренным политикой, доступ будет отклонён даже при корректных правах chmod.
Диагностика блокировок через журнал аудита
Все отказы доступа SELinux фиксирует в журнале. В системах с auditd записи попадают в /var/log/audit/audit.log, а найти их удобнее всего специальной утилитой:
ausearch -m avc -ts recent
Фильтр -m avc выбирает именно сообщения об отказах (Access Vector Cache), а -ts recent ограничивает вывод последними событиями. Если пакет setroubleshoot установлен, команда sealert -a /var/log/audit/audit.log выдаст человекочитаемый разбор каждого инцидента с рекомендациями по исправлению.
⚠️ Внимание: не спешите переводить систему в Disabled при первом отказе доступа. Отключение SELinux снимает целый уровень защиты и часто маскирует, а не решает проблему — правильный путь обычно лежит через корректировку контекстов или булевых параметров политики.
☑️ Чек-лист диагностики SELinux
Временное переключение режима для теста
Классический приём диагностики выглядит так: переведите систему в Permissive командой setenforce 0, повторите операцию, которая завершалась ошибкой, и проверьте результат. Если сервис заработал — причина почти наверняка в политиках SELinux, и дальше нужно анализировать журнал аудита.
Вернуть принудительный режим можно командой setenforce 1. Учтите, что переключение работает только между Enforcing и Permissive: если модуль полностью отключён (Disabled), включить его без перезагрузки не получится.
Почему setenforce не работает при Disabled
Когда SELinux выключен через конфигурацию, ядро загружается без модуля безопасности. Политика не загружена, файловая система selinuxfs не смонтирована, поэтому setenforce возвращает ошибку. Для включения нужно исправить /etc/selinux/config и перезагрузить сервер, а затем дождаться перемаркировки файловой системы.
Часто задаваемые вопросы
Чем отличаются Enforcing и Permissive?
В режиме Enforcing SELinux реально блокирует действия, нарушающие политику. В Permissive нарушения лишь записываются в журнал аудита, но не запрещаются — это режим для диагностики и настройки.
Почему getenforce и конфиг показывают разные режимы?
Команда getenforce отражает текущее состояние ядра, а файл /etc/selinux/config — режим, задаваемый при загрузке. Если кто-то выполнил setenforce 0, до перезагрузки значения будут различаться.
Как проверить, включён ли SELinux вообще?
Выполните sestatus: первая строка SELinux status покажет enabled или disabled. Также можно проверить, смонтирована ли /sys/fs/selinux.
Безопасно ли отключать SELinux на сервере?
Отключение снижает уровень защиты: процессы больше не ограничиваются политиками принудительного доступа. Прежде чем отключать модуль, попробуйте решить проблему через контексты файлов, булевы параметры (getsebool -a) или режим Permissive для конкретной отладки.
Где смотреть причину блокировки конкретного сервиса?
Ищите записи AVC в /var/log/audit/audit.log командой ausearch -m avc -ts recent либо используйте sealert из пакета setroubleshoot — она выдаёт разбор инцидента и варианты исправления.