AppArmor (Application Armor) — LSM-модуль (Linux Security Module) ядра Linux, реализующий мандатный контроль доступа. В отличие от DAC (дискреционный контроль — владелец файла) AppArmor ограничивает программу независимо от прав пользователя, запустившего её.
Как работает
Каждая программа получает профиль — текстовый файл в /etc/apparmor.d/. Профиль перечисляет разрешённые операции: пути к файлам с флагами (r — read, w — write, x — execute), сетевые протоколы, capabilities ядра.
Два режима: enforce — операции вне профиля блокируются и логируются; complain — только логируются без блокировки (для отладки профилей). Переключение: aa-complain /usr/sbin/nginx.
Пример фрагмента профиля для nginx: разрешить чтение конфигов в /etc/nginx/**, запись логов в /var/log/nginx/**, запрет записи в /etc/passwd. Даже если nginx взломан, атакующий не получит доступ к файлам за пределами профиля.
История
AppArmor разработан компанией Immunix (1998), в 2005 году куплен Novell, затем перешёл в Canonical. С Ubuntu 7.10 (2007) AppArmor включён по умолчанию. В Debian и Ubuntu — основная MAC-система. В RHEL/CentOS — SELinux (более мощный, но сложнее в настройке).
Сравнение MAC-систем
- AppArmor: пути к файлам, проще в настройке, Ubuntu/Debian.
- SELinux: контекст безопасности на каждый файл, более детальный контроль, RHEL.
- seccomp: фильтрация системных вызовов, используется в Docker/Kubernetes.
Связь с хостингом
На VPS с Ubuntu AppArmor активен по умолчанию для ряда демонов (mysqld, apache2). На выделенных серверах профили AppArmor для nginx и PHP-FPM ограничивают ущерб при компрометации веб-приложения. Docker по умолчанию применяет AppArmor-профиль для контейнеров на Ubuntu.
Ключевые отличия от похожих терминов
SELinux работает с контекстами безопасности, AppArmor — с путями к файлам. AppArmor проще писать и отлаживать; SELinux более мощный. Фаервол ограничивает сетевой трафик; AppArmor ограничивает действия программы на уровне ОС.
Принцип работы AppArmor
AppArmor (Application Armor) — LSM (Linux Security Module) с профильной моделью. Профиль описывает, что конкретной программе разрешено: читать файлы, подключаться по сети, использовать system calls. Режимы: enforce (блокировать) и complain (логировать). По умолчанию в Ubuntu.
Профили AppArmor
Предустановленные профили: /usr/share/apparmor/extra-profiles. aa-status — список активных профилей. aa-complain /usr/sbin/nginx — режим обучения. aa-enforce /usr/sbin/nginx — включение защиты. Для Docker-контейнеров: профиль docker-default применяется автоматически.
AppArmor vs SELinux
AppArmor — профили по пути к файлу, проще в настройке. SELinux — метки на объектах (файлы, процессы, сокеты), мощнее, но сложнее. AppArmor — стандарт Ubuntu и Debian. SELinux — стандарт RHEL/CentOS/Fedora. Оба снижают поверхность атаки при компрометации сервиса.
AppArmor и Docker
Docker автоматически применяет профиль docker-default к контейнерам. Кастомный профиль: docker run --security-opt apparmor=my-profile nginx. Просмотр применённых профилей: cat /proc/PID/attr/current. Для Kubernetes: PodSecurityContext.appArmorProfile в Pod spec.
AppArmor защищает сервисы на Ubuntu и Debian. Профили ограничивают Nginx, MySQL, Docker. Работает в паре с фаерволом. Аналог SELinux для RHEL-систем. Kubernetes применяет профили через Pod Security.