Гид по технологиям

Установка и настройка SELinux на Ubuntu: руководство по безопасности

7 min read Безопасность Обновлено 18 Dec 2025
Установка и настройка SELinux на Ubuntu
Установка и настройка SELinux на Ubuntu

логотип безопасности на экране

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

SELinux (Security-Enhanced Linux) — модуль безопасности ядра Linux, реализующий механизм политики доступа и принудительного контроля (Mandatory Access Control, MAC).

Зачем использовать SELinux

  • Изолирует процессы и ограничивает ущерб при компрометации одного сервиса.
  • Уменьшает поверхность атаки поверх стандартных прав Unix (UID/GID и DAC).
  • Полезен для серверов, контейнеров и сред с высоким уровнем требований к безопасности.

Важно: SELinux усиливает безопасность, но требует тестирования и адаптации политик — некорректные политики могут нарушить работу сервисов.

Основные понятия — в одну строку

  • Policy: набор правил разрешений для действий процессов.
  • Enforcing: политика применяется и блокирует запрещённые операции.
  • Permissive: операции не блокируются, но записываются в логи для анализа.
  • Disabled: SELinux выключен.

Содержание

  • Что такое SELinux
  • Подготовка системы
  • Установка SELinux на Ubuntu — шаги и команды
  • Режимы SELinux и переключение
  • Просмотр логов и отладка
  • Временное и постоянное отключение
  • Удаление SELinux
  • Когда SELinux не подходит и альтернативы
  • Чек-листы по ролям (админ, разработчик)
  • Runbook при инциденте и откат
  • Советы по безопасности и соответствию
  • Краткий глоссарий
  • Резюме

Подготовка: резервные копии и тестовая среда

Перед началом:

  • Создайте полную резервную копию системы или снимок виртуальной машины (snapshot).
  • Если возможно, воспроизведите цельную среду в тестовой VM или стенде.
  • Составьте список критичных сервисов (веб-серверы, БД, агенты мониторинга) и проверьте совместимость с SELinux.

Как установить SELinux на Ubuntu — пошагово

Ниже — пошаговая инструкция с командами. Выполняйте в тестовой среде перед продакшеном.

Шаг 1 — обновите систему

Откройте терминал (нажмите Ctrl+Alt+T) и выполните:

sudo apt-get update && sudo apt-get upgrade -y

Шаг 2 — остановите и отключите AppArmor

Ubuntu по умолчанию использует AppArmor. Перед установкой SELinux желательно отключить AppArmor или удалить его.

Остановите сервис и проверьте статус:

sudo systemctl stop apparmor
sudo systemctl status apparmor

Отключите автозагрузку AppArmor:

sudo systemctl disable apparmor

Если нужно удалить пакет AppArmor полностью:

sudo apt-get remove --purge apparmor -y
sudo apt-get autoremove -y

После изменений перезагрузите систему:

sudo reboot

AppArmor остановлен и отключён на Ubuntu

Примечание: достаточно просто отключить службу, если вы хотите иметь опцию возврата к AppArmor.

Шаг 3 — установка зависимостей SELinux

Установка включает утилиты управления политиками и базовые скрипты активации:

sudo apt-get install policycoreutils selinux-utils selinux-basics -y

После установки активируйте SELinux (скрипт selinux-activate доступен в пакете selinux-basics):

sudo selinux-activate

Если команда выдаёт ошибки, проверьте вывод и журналы apt/dpkg — устраните конфликты зависимостей и повторите.

Шаг 4 — режимы SELinux и переключение

SELinux поддерживает несколько состояний:

  • disabled — отключён
  • enabled — включён (при этом возможны режимы permissive или enforcing)
  • permissive — включён для логирования, не блокирует действия
  • enforcing — применяет и блокирует запрещённые действия

Для временного переключения режима используйте setenforce:

# Переключить в enforcing
sudo setenforce 1

# Переключить в permissive
sudo setenforce 0

# Проверить текущий режим
getenforce
# или получить подробную информацию
sestatus

Для постоянного изменения откройте файл конфигурации:

sudo nano /etc/selinux/config

Установите одну из строк:

SELINUX=enforcing
# или
SELINUX=permissive
# или
SELINUX=disabled

Сохраните изменения и перезагрузите:

sudo reboot

текущий режим SELinux отображается как permissive

Совет: начните с permissive на тестовой системе, проанализируйте логи и только после этого переводите в enforcing.

Просмотр логов SELinux и отладка

Логи SELinux обычно находятся в /var/log/audit/audit.log (пакет auditd должен быть установлен).

Просмотр записей, связанных с SELinux:

sudo grep -i selinux /var/log/audit/audit.log
# или для поиска AVC-сообщений (Access Vector Cache)
sudo ausearch -m AVC

Инструмент audit2allow помогает генерировать временные правила на основе логов:

# Установите пакет, если нужно
sudo apt-get install policycoreutils-python-utils -y

# Сгенерировать правило из лога и просмотреть его
sudo ausearch -m AVC -ts recent | audit2allow -m localpolicy

# Применить аккуратно: сначала просмотрите, затем создайте модуль
sudo ausearch -m AVC -ts recent | audit2allow -M mylocal
sudo semodule -i mylocal.pp

Важно: не применяйте автоматически сгенерированные правила в продакшен без ревью — они могут расширить права слишком широко.

Как временно отключить SELinux

Только для текущего сеанса (вернётся после перезагрузки):

sudo setenforce 0

Альтернативный способ (для отладки в экстренном случае):

sudo -i
echo 0 > /selinux/enforce

Как окончательно отключить SELinux

Измените конфигурацию:

sudo nano /etc/selinux/config
# установить SELINUX=disabled

Сохраните и перезагрузите:

sudo reboot

Как удалить SELinux с Ubuntu

Если после тестов вы решаете удалить пакеты:

sudo apt-get remove --purge policycoreutils selinux-utils selinux-basics -y
sudo apt-get autoremove -y

Проверьте, что связанных модулей и политик не осталось:

sestatus || true

Когда SELinux не подходит (примеры и контрпримеры)

  • Подходит: серверы с публичными сервисами, системы с критичными данными, многопользовательские хосты.
  • Не подходит (или требует осторожности): устаревшее ПО без поддержки SELinux, узкие embedded-системы с ограниченным пространством, когда команда не имеет ресурсов для сопровождения политик.

Контрпример: небольшая однопользовательская рабочая станция для разработчика — усилия по поддержке SELinux могут превысить выгоду.

Альтернативы

  • AppArmor — проще в управлении, использует профили по приложению и распространён в Debian/Ubuntu.
  • GrSecurity (historical/paid) — предоставляет расширенные механизмы защиты на уровне ядра (не всегда доступен для общедоступных дистрибутивов).

Выбор основывайте на требованиях к контролю доступа, ресурсах команды и поддержке со стороны приложений.

Чек-листы по ролям

Для администратора (sysadmin)

  • Сделан snapshot/резервная копия VM.
  • Отключён/удалён AppArmor или подготовлена стратегия coexistence.
  • Установлены policycoreutils, selinux-utils, selinux-basics.
  • Система переведена в permissive, собраны логи для 24–72 часов.
  • Проанализированы AVC-сообщения, созданы необходимые политики вручную.
  • Переведено в enforcing в контролируемом окне обслуживания.

Для разработчика приложения

  • Протестировать запуск сервиса в permissive и собирать AVC-записи.
  • Проверить доступы к файлам, портам и сокетам, настроить контексты (chcon/semanage fcontext).
  • Добавить проверку поведения при CI (smoke tests под SELinux).

Runbook: при обнаружении отказа сервиса из-за SELinux

  1. Войти на хост (SSH) и проверить системный журнал: sudo journalctl -u -b
  2. Проверить AVC-записи: sudo ausearch -m AVC -ts recent
  3. Временно перевести SELinux в permissive: sudo setenforce 0 (если срочно восстановить работу)
  4. Собрать логи и метаданные: ausearch/audit.log, systemctl status, ls -Z контекстов
  5. На основе логов сформировать правило через audit2allow для тестовой проверки
  6. После тестирования применить модуль policy и вернуть enforcing
  7. Документировать изменения и уведомить команду

Критерий отката: если новая политика нарушает критичные сервисы, удалить модуль semodule -r и вернуть permissive, затем доработать политику.

Команды-справочник (cheat sheet)

# Проверка статуса
sestatus
getenforce

# Переключение
sudo setenforce 1   # enforcing
sudo setenforce 0   # permissive

# Логи
sudo ausearch -m AVC -ts today
sudo grep -i avc /var/log/audit/audit.log

# Генерация политики
sudo ausearch -m AVC -ts recent | audit2allow -M mylocal
sudo semodule -i mylocal.pp

# Работа с контекстами файлов
ls -Z /path/to/file
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
sudo semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'
sudo restorecon -Rv /var/www/html

Совместимость и миграция

  • Перед миграцией проверьте совместимость приложений с SELinux (особенно веб-серверы, БД и агенты мониторинга).
  • Для контейнеров используйте профиль, совместимый с SELinux в Docker/Podman (user:role:type и label: MCS/MLS при необходимости).
  • Для сложных приложений планируйте фазу permissive минимум 24–72 часа для накопления логов.

Безопасность и требования конфиденциальности (GDPR)

SELinux сам по себе не изменяет требования GDPR, но помогает снизить риск несанкционированного доступа к персональным данным. Рекомендации:

  • Зафиксируйте политики, влияющие на доступ к директориям с персональными данными.
  • Логируйте и храните записи доступа по регламенту хранения логов и политике безопасности.
  • Контролируйте, кто имеет права на изменение SELinux-политик (role-based access).

Краткий глоссарий (1 строка)

  • AVC: сообщение о нарушении политики SELinux, фиксируемое auditd.
  • semodule: утилита для управления модулями политик SELinux.
  • chcon / semanage / restorecon: команды для управления контекстами файлов.

Критерии приёмки

  • SELinux работает в enforcing без критических отказов в течение согласованного окна тестирования.
  • Нет незадокументированных исключений или плотных правил, требующих ручного вмешательства каждые 24 часа.
  • Наличие документации по новым политикам, инструкции по откату и контактных данных ответственных.

Пример принятой методики работы (минимальная последовательность)

  1. Snapshot VM → 2. Отключить AppArmor → 3. Установить selinux-пакеты → 4. Запустить в permissive → 5. Накопить логи → 6. Создать и протестировать правило → 7. Перевести в enforcing → 8. Документировать

Decision flowchart

flowchart TD
  A[Начало: нужно ли усиливать безопасность?] -->|Да| B[Подготовка тестовой среды]
  B --> C{AppArmor активен?}
  C -->|Да| D[Отключить или удалить AppArmor]
  C -->|Нет| E[Установить пакеты SELinux]
  D --> E
  E --> F[Перевести в permissive и собрать логи]
  F --> G{Логи показывают критические AVC?}
  G -->|Да| H[Анализ и создание политик]
  G -->|Нет| I[Перевести в enforcing]
  H --> F
  I --> J[Мониторинг и поддержка]

Риски и смягчения

  • Риск: неправильная политика нарушает сервисы. Смягчение: тестовый стенд, permissive и отзывы команд.
  • Риск: нехватка компетенций. Смягчение: обучение, документация, поэтапное внедрение.

Короткая заметка для социальных сетей (announce, 100–200 слов)

SELinux добавляет ценный уровень изоляции и контроля доступа для Ubuntu-систем, сокращая последствия взлома сервиса. Пошаговое внедрение: snapshot → отключение AppArmor → permissive режим для сбора логов → генерация и ревью политик → перевод в enforcing. Обязательно протестируйте в тестовой среде и подготовьте runbook для быстрого отката.

Резюме

SELinux — мощный инструмент для усиления безопасности Linux-хостов. Его внедрение требует планирования, тестирования и понимания политик. Начните с permissive, анализируйте AVC-логи, применяйте политики аккуратно и всегда имейте план отката.

файл конфигурации SELinux отображается в редакторе

Важное: перед любыми изменениями в продакшене выполните резервное копирование и согласуйте окно обслуживания с заинтересованными сторонами.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство