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 состоит из трёх основных компонентов:
- Ядро с поддержкой SELinux — модуль безопасности, встроенный в ядро Linux, который перехватывает все системные вызовы и проверяет их соответствие политике.
- Политика безопасности — набор правил, определяющих, какие действия разрешены. Политика компилируется в бинарный файл и загружается в ядро при загрузке системы.
- Инструменты управления — набор утилит (например,
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 →