Что такое SELinux и AppArmor?
SELinux и AppArmor — системы мандатного контроля доступа (MAC — Mandatory Access Control), обеспечивающие дополнительный уровень безопасности поверх стандартных прав доступа Linux (DAC).
Аналогия из жизни: стандартные права (rwx) — это замок на двери офиса. MAC-система — это пропускная система на входе в здание, которая контролирует, какие сотрудники в какие помещения могут заходить, даже если у них есть ключ от двери.
Зачем нужны
Стандартные права (rwx) защищают файлы от других пользователей, но если приложение запущено от root и скомпрометировано, злоумышленник получает полный доступ. MAC-системы ограничивают даже root.
Сравнение SELinux и AppArmor
| Характеристика | SELinux | AppArmor |
|---|---|---|
| Разработчик | NSA и Red Hat | Canonical (Novell/SUSE) |
| Подход | Метки (контексты безопасности) | Профили на основе путей |
| Сложность | Высокая | Средняя |
| Гибкость | Очень высокая | Достаточная для большинства задач |
| Дистрибутивы | RHEL, CentOS, Fedora | Ubuntu, SUSE |
| Изучение | Сложное | Относительно простое |
SELinux (Security-Enhanced Linux)
Режимы работы:
- Enforcing — правила применяются, нарушения блокируются и логируются
- Permissive — правила не применяются, но нарушения логируются (для отладки)
- Disabled — SELinux выключен
Пример
# Проверить статус (на RHEL/CentOS)
getenforce
sestatus
AppArmor (в Ubuntu 24.04)
Работает на основе профилей, привязанных к путям файлов:
- Enforce — правила применяются
- Complain — нарушения логируются, но не блокируются
Пример
sudo aa-status # Проверить статус
sudo aa-complain /usr/sbin/nginx # Режим complain (для отладки)
sudo aa-enforce /usr/sbin/nginx # Режим enforce
ls /etc/apparmor.d/ # Профили хранятся здесь
Для Java-разработчика
Если приложение на сервере не может открыть файл или порт, и стандартные права в порядке — проверьте AppArmor (Ubuntu) или SELinux (RHEL). Это частая причина ошибок «Permission denied» при развёртывании.
На собеседовании: достаточно знать, что MAC-системы существуют и зачем нужны. Интервьюер оценит, если вы упомянете AppArmor/SELinux как одну из причин «Permission denied» при деплое. Частая ошибка — отключать SELinux/AppArmor вместо правильной настройки профилей.