Как проверить статус SELinux в Linux

Команда 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 используется на вашем сервере?
Enforcing
Permissive
Disabled
Не знаю, только проверяю

Проверка конфигурационного файла

Постоянные настройки 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

Выполнено: 0 / 5

Временное переключение режима для теста

Классический приём диагностики выглядит так: переведите систему в 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 — она выдаёт разбор инцидента и варианты исправления.