Установка и настройка 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.
Шаг 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Совет: начните с 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
- Войти на хост (SSH) и проверить системный журнал: sudo journalctl -u
-b - Проверить AVC-записи: sudo ausearch -m AVC -ts recent
- Временно перевести SELinux в permissive: sudo setenforce 0 (если срочно восстановить работу)
- Собрать логи и метаданные: ausearch/audit.log, systemctl status, ls -Z контекстов
- На основе логов сформировать правило через audit2allow для тестовой проверки
- После тестирования применить модуль policy и вернуть enforcing
- Документировать изменения и уведомить команду
Критерий отката: если новая политика нарушает критичные сервисы, удалить модуль semodule -r
Команды-справочник (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 часа.
- Наличие документации по новым политикам, инструкции по откату и контактных данных ответственных.
Пример принятой методики работы (минимальная последовательность)
- 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-логи, применяйте политики аккуратно и всегда имейте план отката.
Важное: перед любыми изменениями в продакшене выполните резервное копирование и согласуйте окно обслуживания с заинтересованными сторонами.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone