Открыть сервис

SELinux

SELinux (Security-Enhanced Linux) — это реализованная в ядре Linux подсистема принудительного контроля доступа (Mandatory Access Control, MAC), разработанная Агентством национальной безопасности США (NSA) для повышения безопасности операционной системы путём ограничения привилегий процессов и пользователей даже в случае их компрометации.

История

Разработка SELinux началась в 1990-х годах в рамках проекта АНБ по созданию системы безопасности, способной предотвратить утечки данных и несанкционированный доступ даже при наличии уязвимостей в прикладном программном обеспечении. Первая публичная версия была выпущена в 2000 году как набор патчей для ядра Linux. В 2003 году SELinux был включён в основную ветку ядра Linux (версия 2.6), а в 2004 году — в дистрибутив Red Hat Enterprise Linux 4. С тех пор он стал стандартным компонентом многих дистрибутивов, включая Fedora, CentOS, Debian (начиная с версии 10) и Android (начиная с версии 4.3).

Основные принципы

SELinux реализует модель принудительного контроля доступа, которая дополняет традиционную дискреционную модель (DAC), используемую в Unix-подобных системах. В отличие от DAC, где права доступа определяются владельцем файла или процесса, в SELinux каждому субъекту (процессу) и объекту (файлу, сокету, порту) назначается метка безопасности — контекст. Политика безопасности определяет, какие действия субъекта над объектом разрешены на основе их контекстов.

Типы политик

SELinux поддерживает несколько типов политик, определяющих уровень строгости контроля:

  • Строгая политика (strict) — все взаимодействия между субъектами и объектами контролируются; любое действие, не разрешённое явно, запрещается.
  • Целевая политика (targeted) — контролируются только определённые, наиболее критичные процессы (например, сетевые сервисы), остальные работают в неограниченном режиме.
  • Политика MLS (Multi-Level Security) — реализует многоуровневую защиту, основанную на классификации данных (например, «секретно», «совершенно секретно») и уровнях допуска пользователей.

Архитектура и компоненты

SELinux состоит из трёх основных компонентов:

  1. Ядро с поддержкой SELinux — модуль безопасности, встроенный в ядро Linux, который перехватывает все системные вызовы и проверяет их соответствие политике.
  2. Политика безопасности — набор правил, определяющих, какие действия разрешены. Политика компилируется в бинарный файл и загружается в ядро при загрузке системы.
  3. Инструменты управления — набор утилит (например, chcon, restorecon, semanage, sealert) для настройки контекстов, просмотра логов и управления политикой.

Контексты безопасности

Каждый объект и субъект в системе имеет контекст, состоящий из четырёх полей:

  • Пользователь (user) — идентификатор пользователя SELinux (например, system_u, user_u).
  • Роль (role) — роль, определяющая набор разрешённых типов (например, object_r для объектов, system_r для системных процессов).
  • Тип (type) — основной идентификатор, используемый в политике для принятия решений (например, httpd_t для веб-сервера Apache, httpd_sys_content_t для файлов, доступных веб-серверу).
  • Уровень (level) — метка для многоуровневой безопасности (например, s0 — низкий, s15 — высокий).

Режимы работы

SELinux может работать в трёх режимах:

  • Enforcing (принудительный) — политика применяется, нарушения блокируются и записываются в журнал аудита.
  • Permissive (разрешающий) — нарушения регистрируются, но не блокируются; используется для отладки и тестирования политик.
  • Disabled (отключён) — SELinux не загружается, подсистема неактивна.

Применение

SELinux широко используется в серверных и встраиваемых системах, где требуется высокий уровень безопасности. Основные области применения:

  • Веб-серверы — ограничение доступа процессов Apache, Nginx к файлам и сетевым ресурсам.
  • Базы данныхизоляция процессов СУБД (например, PostgreSQL, MySQL) от других частей системы.
  • Контейнеры и виртуализация — в Android SELinux используется для изоляции приложений и системных процессов; в Docker и Kubernetes — для усиления безопасности контейнеров.
  • Мобильные устройства — в Android начиная с версии 4.3 SELinux работает в принудительном режиме для всех приложений.

Преимущества и недостатки

Преимущества

  • Принудительный контроль — даже если злоумышленник получает права root, он не может выполнять действия, не разрешённые политикой.
  • Гибкость — политики могут быть настроены под конкретные требования безопасности.
  • Аудит — все нарушения регистрируются, что позволяет выявлять атаки и ошибки конфигурации.

Недостатки

  • Сложность настройки — создание и отладка политик требуют глубоких знаний системы и безопасности.
  • Совместимость — некоторые приложения могут работать некорректно, если их политики не настроены или отсутствуют.
  • Производительность — проверка каждого системного вызова может незначительно увеличивать нагрузку на процессор (обычно менее 5%).

Примеры использования

Настройка веб-сервера Apache

Для корректной работы веб-сервера необходимо, чтобы его процессы имели тип httpd_t, а файлы, которые он обслуживает, — тип httpd_sys_content_t. Если файлы находятся в нестандартном каталоге (например, /var/www/mysite), можно изменить их контекст с помощью команды:

`` chcon -R -t httpd_sys_content_t /var/www/mysite ``

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

Для анализа заблокированных действий используется утилита sealert, которая интерпретирует сообщения из журнала /var/log/audit/audit.log:

`` sealert -a /var/log/audit/audit.log ``

Интересные факты

  • SELinux не является единственной реализацией MAC для Linux. Альтернативой является AppArmor, который использует пути к файлам вместо меток типов и считается более простым в настройке.
  • В 2019 году АНБ выпустило версию SELinux с открытым исходным кодом для FreeBSD, что расширило его применение на другие операционные системы.
  • В Android SELinux используется в режиме «строгая политика» для всех приложений, что предотвращает многие виды вредоносного ПО.

Критика

Основная критика SELinux связана с его сложностью. Многие системные администраторы предпочитают AppArmor из-за более простой модели политик. Кроме того, в дистрибутивах, где SELinux включён по умолчанию (например, Red Hat Enterprise Linux), новички часто сталкиваются с проблемами, когда приложения не работают из-за неправильных контекстов, что приводит к отключению SELinux «в лоб» вместо настройки политик.

Источники

  • SELinux Project Wiki (NSA)
  • Red Hat Enterprise Linux 8 Security Hardening Guide
  • Linux Kernel Documentation: SELinux
  • «SELinux by Example» by Frank Mayer, Karl MacMillan, David Caplan
  • Android Security Documentation: SELinux for Android

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →