Установка и настройка SELinux на Ubuntu
TL;DR
SELinux добавляет обязательное разграничение доступа (MAC) к ядру Linux и повышает защиту хоста. На Ubuntu по умолчанию используется AppArmor — можно сменить его на SELinux: выключить или удалить AppArmor, установить пакеты selinux-basics, policycoreutils и selinux-utils, активировать SELinux, выбрать режим (permissive/enforcing) и проверить логи. Перед изменениями обязательно сделайте резервную копию системы или снимок виртуальной машины.
Важно: изменение ОС-уровневой безопасности может привести к нестабильности. Тестируйте на стенде и имейте план отката.

SELinux (Security-Enhanced Linux) добавляет дополнительный слой контроля доступа в ядро и инструменты пользователя. Он отделяет принятие решений о безопасности от самой политики и упрощает принудительное применение правил. Коротко: SELinux ограничивает, что процессы могут делать с файлами, сокетами и ресурсами, даже если злоумышленник получил привилегии процесса.
Что такое SELinux?
SELinux — это модуль ядра и набор утилит для реализации Mandatory Access Control (MAC). Основные понятия:
- Политика — набор правил, кто и что может делать.
- Контекст — метаданные (label) файла или процесса, которые используются при проверке прав.
- Enforcing/Permissive/Disabled — режимы работы, определяющие, блокируются ли нарушения или только логируются.
Краткое определение: SELinux контролирует доступ на уровне политик, а не только через традиционные UNIX-права.
Основные преимущества и ограничения
- Преимущества: уменьшает размах атаки при компрометации, изолирует сервисы, помогает защищать веб-сервера и хранилища данных.
- Когда не подходит: легкие embedded-системы со строгими требованиями к размеру; старые приложения с нестандартным поведением, которые сложно правильно профилировать без значительной доработки.
Альтернативы
- AppArmor — профильный MAC по умолчанию в Ubuntu; проще в настройке, но менее гибкий в сложных сценариях.
- TOMOYO, Smack — другие MAC-системы с собственными моделями.
- Grsecurity — коммерческая/патчная защита ядра (подходит для специфичных задач).
Подготовка и общие рекомендации
- Сделайте резервную копию системы или снимок виртуальной машины (VM snapshot).
- Работайте на тестовой машине перед продакшеном.
- Документируйте текущие профили AppArmor и их влияние на сервисы.
- План отката: как быстро вернуть AppArmor и удалить SELinux.
Пошаговая инструкция: установка SELinux на Ubuntu
Ниже — рекомендуемый рабочий поток для безопасной установки и включения SELinux.
Шаг 1. Обновите систему
Откройте терминал (Ctrl+Alt+T) и выполните:
sudo apt update && sudo apt upgrade -yЭто гарантирует, что вы устанавливаете последние пакеты и зависимости.
Шаг 2. Отключите или удалите AppArmor
Выберите отключение (быстрый тест) или полное удаление (чистая система). Для временного отключения:
sudo systemctl stop apparmor
sudo systemctl disable apparmor
systemctl status apparmorЕсли хотите удалить AppArmor полностью:
sudo apt-get remove --purge apparmor -y
sudo apt autoremove -yПосле удаления или отключения перезагрузите систему:
sudo reboot
Примечание: для тестирования достаточно отключить сервис. Полное удаление полезно, если вы уверены, что переход к SELinux — навсегда.
Шаг 3. Установка пакетов SELinux
Установите основные пакеты:
sudo apt-get install policycoreutils selinux-utils selinux-basics -yПосле установки запустите инструмент активации (предоставляется пакетом selinux-basics):
sudo selinux-activateselinux-activate выполняет конфигурацию, но на некоторых системах может потребоваться ручная правка конфигурационного файла. Если команда недоступна, убедитесь, что пакет selinux-basics установлен.
Шаг 4. Файлы конфигурации и постоянное включение
Основные файлы:
- /etc/selinux/config — основной конфигурационный файл режима SELinux.
Чтобы включить SELinux постоянно, откройте файл и измените строку SELINUX=:
sudo nano /etc/selinux/configУстановите:
SELINUX=enforcingСохраните и выйдите (Ctrl+X, Y, Enter).
Шаг 5. Режимы SELinux и проверка
SELinux поддерживает состояния:
- disabled — отключён
- permissive — нарушения не блокируются, только логируются
- enforcing — нарушения блокируются и логируются
Для немедленного переключения используйте:
sudo setenforce 1 # включить enforcing
sudo setenforce 0 # включить permissive
getenforce # показывает текущий режим
sestatus # подробный статус SELinuxПосле смены конфигурации рекомендуется перезагрузить систему:
sudo reboot
Замечание: getenforce печатает только текущий режим (Enforcing/Permissive/Disabled), а sestatus даёт подробности о политике и состоянии.
Шаг 6. Просмотр логов SELinux
Логи находят в /var/log/audit/audit.log (если работает auditd) и в системном журнале:
grep selinux /var/log/audit/audit.log
ausearch -m avc -ts today
journalctl -t setroubleshootПонимание AVC (Access Vector Cache) сообщений — ключ к исправлению блокировок: они содержат процесс, цель операции и необходимые контексты.
Краткий SOP: быстрая процедура для администратора
- Сделать snapshot/резервную копию.
- Обновить пакеты.
- Отключить AppArmor (systemctl stop/disable).
- Установить selinux-basics, selinux-utils, policycoreutils.
- Выполнить sudo selinux-activate.
- Переключить в permissive и перезагрузить.
- Мониторить логи, исправлять AVC с помощью audit2allow (только после анализа).
- Переключить в enforcing, повторно тестировать.
Как безопасно переводить в enforcing
- Сначала permissive: так вы увидите, какие правила будут блокироваться.
- Анализируйте логи (ausearch, audit2allow). Не создавайте автоматически политики без ревью.
- Применяйте исключения точечно: пишите минимальные правила.
- Переходите в enforcing поэтапно, контролируя сервисы и тесты.
Отладка и откат — аварийный план
Если после включения SELinux сервисы перестали работать:
- Быстро временно переведите систему в permissive:
sudo setenforce 0- Просмотрите последние AVC записи:
ausearch -m avc -ts recent
ausearch -m avc --start recent --raw | audit2allow -M myfix
semodule -i myfix.pp # только после ревью содержимого- Если восстановить не получается, откатитесь к резервной копии или снимку VM.
Как полностью удалить SELinux
Если вы приняли решение убрать SELinux:
sudo apt-get remove --purge policycoreutils selinux-utils selinux-basics -y
sudo apt autoremove -y
sudo rebootПосле удаления проверьте, что /etc/selinux/config указывает SELINUX=disabled или файл отсутствует.
Критерии приёмки
- SELinux включён в режиме enforcing и отвечает getenforce: Enforcing.
- Ключевые сервисы (веб, БД, sshd) проходят интеграционные тесты без нежелательных блокировок.
- Нет непринятых AVC ошибок в логах в течение заданного окна наблюдения (обычно 24–72 часа).
- Документированы все созданные пользовательские модули и внесённые изменения в политики.
Тестовые сценарии и критерии приёмки
- Проверка старта сервисов: nginx, mysql/postgres, sshd должны стартовать и отвечать.
- Функциональные тесты: страницы приложения, авторизация, запись данных.
- Нагрузочные тесты: базовые запросы под нагрузкой без новых AVC ошибок.
- Безопасность: попытка доступа к защищённым файлам из приложений должна блокироваться.
Чек-листы по ролям
Администратор:
- Сделал snapshot/резервную копию.
- Отключил AppArmor.
- Установил SELinux пакеты.
- Включил permissive и собрал логи.
- Составил и проверил пользовательские модули.
Разработчик:
- Прогнал интеграционные тесты при permissive.
- Сообщил о блокировках инфраструктуре безопасности.
Команда безопасности:
- Проанализировала AVC и одобрила правила.
- Контролировала deployment в enforcing режиме.
Полезные команды (cheat sheet)
sudo apt update && sudo apt upgrade -y
sudo systemctl stop apparmor
sudo systemctl disable apparmor
sudo apt-get remove --purge apparmor -y
sudo apt-get install policycoreutils selinux-utils selinux-basics -y
sudo selinux-activate
sudo setenforce 1 # enforcing
sudo setenforce 0 # permissive
getenforce
sestatus
ausearch -m avc -ts today
audit2allow -w -a # показать, почему правило не применяется
audit2allow -a -M localmod # сгенерировать модуль политики (ревью обязателен)
semodule -i localmod.ppКогда SELinux может не сработать или вызывать сложности
- Приложения, которые меняют контексты файлов динамически или используют нестандартные IPC/сокеты.
- Сложные контейнерные сценарии, где нужна дополнительная интеграция (например, Docker, Podman требуют корректной политики для контейнеров).
- Системы с ограниченным администрированием и отсутствием специалистов для анализа AVC-логов.
Советы и эвристики
- Всегда начинать с permissive и наблюдать 48–72 часа.
- Не создавать широких разрешающих правил; вместо этого уточняйте контексты для конкретных процессов и ресурсов.
- Использовать audit2allow как подсказку, но не применять правила сразу без ревью.
Локальные особенности для Ubuntu
- Ubuntu по умолчанию использует AppArmor; при переходе стоит проверить зависимости PPA и кастомных пакетов, которые могли ориентироваться на AppArmor-профили.
- В облачных образах (Cloud Images) и управляемых инстансах провайдеры могут иметь свои рекомендации по включению SELinux.
FAQ
Как временно отключить SELinux?
Временно переведите систему в permissive (не требует перезагрузки):
sudo setenforce 0Как навсегда отключить SELinux?
Откройте /etc/selinux/config и установите:
SELINUX=disabledЗатем перезагрузите систему.
Чем SELinux отличается от AppArmor?
SELinux использует маркировку ресурсов (labels) и централизованную политику, что даёт более детальный и гибкий контроль. AppArmor опирается на профили по пути (pathname) и часто проще в настройке, но менее точен в тонких сценариях безопасности.
Итог
SELinux — мощный инструмент контроля доступа, который значительно повышает безопасность хоста, но требует аккуратной и поэтапной настройки. Начинайте с резервного копирования, включайте permissive, анализируйте логи, добавляйте только необходимые правила и только после проверки переводите систему в enforcing.
Ключевые шаги: обновление системы, отключение AppArmor, установка selinux-пакетов, активация, мониторинг логов, пошаговый перевод в enforcing и наличие плана отката.
Дополнительные ресурсы
- Справка по ausearch, audit2allow, semodule и sestatus в man-страницах (man ausearch, man audit2allow, man semodule, man sestatus).
FAQ — краткая сводка
- Вопросы по восстановлению: используйте setenforce 0 и откат к snapshot.
- Вопросы по логам: используйте ausearch и audit2allow.

Похожие материалы
Как копировать формулы в Excel эффективно
Фокус на iPad — настройка и лучшие практики
Защитить домашний Wi‑Fi: как не дать соседям воровать интернет
Профессиональный баннер LinkedIn в Canva
Spotify Wrapped 2024 — как посмотреть и что нового