Создать профиль AppArmor и защитить приложение

Кратко: пошаговое руководство по созданию, настройке и включению профилей AppArmor в Ubuntu. Рассмотрены тестовый план, режимы complain и enforce, ручная доработка профиля, чек-листы и обратный откат.
Важно: профиль AppArmor — это текстовый файл, который ограничивает доступ программы к файлам, сетям и ресурсам. AppArmor включён в Ubuntu по умолчанию.
Быстрые ссылки
- Создание и запуск тест-плана
- Включение режима complain и доработка профиля
- Переход в режим enforce для жёсткой изоляции
Что такое AppArmor (одно предложение)
AppArmor — это подсистема безопасности ядра Linux, которая применяет профили с разрешениями для отдельных программ.
Введение
AppArmor помогает ограничивать программы в системе Ubuntu. Оно даёт приложению только те права, которые ему нужны при обычной работе. Это особенно полезно для серверных сервисов, которые могут быть скомпрометированы. В комплекте с Ubuntu идут утилиты, которые помогают сгенерировать и доработать профиль.
Прежде чем писать профиль с нуля, проверьте пакет apparmor-profiles в репозиториях Ubuntu — возможно профиль для вашей программы уже существует.
Создание и запуск тест-плана
Для корректного профиля нужно запустить приложение под наблюдением AppArmor и пройти все его обычные сценарии работы. Составьте тест-план: запуск, остановка, перезагрузка, основные функции и типичные рабочие сценарии.
Откройте терминал и установите утилиты, затем запустите генератор профиля:
sudo apt-get install apparmor-utils
sudo aa-genprof /path/to/binaryОставьте aa-genprof запущенным в терминале. Запустите приложение и пройдите тест-план. Чем полнее тесты, тем меньше ручной доработки потребуется позже.

После завершения тест-плана вернитесь в терминал и нажмите клавишу S, чтобы просканировать системный журнал на события AppArmor.
aa-genprof поочерёдно покажет события и предложит варианты действий. Например, если /usr/bin/man, который вы профилировали, запустил /usr/bin/tbl, вам предложат выбрать: наследовать профиль родителя, назначить новый профиль для дочернего бинарника или разрешить его запуск без ограничения.

Для других событий вы увидите иные подсказки. Здесь, например, мы разрешаем доступ к специальному устройству терминала /dev/tty:

В конце процесса aa-genprof предложит сохранить созданный профиль.

Полезные команды для проверки
- Проверить статус AppArmor:
sudo aa-statusПросмотреть активные профили и их состояние
Отключить профиль (откат):
sudo aa-disable /path/to/binaryИспользуйте откат осторожно и только для быстрого возврата в случае ошибок.
Включение режима complain и доработка профиля
После первоначального создания переведите профиль в режим complain. В этом режиме AppArmor не блокирует действия приложения, а записывает возможные нарушения в логи. Это безопасный способ собрать реальные ошибки и дополнить профиль разрешениями.
sudo aa-complain /path/to/binaryРаботайте с приложением в течение некоторого времени. Затем просканируйте логи и примените рекомендуемые изменения:
sudo aa-logprof
aa-logprof покажет список предложений. Читайте подсказки внимательно. Отказывайтесь от изменений, которые раскрывают избыточные права.
Советы при работе в режиме complain:
- Тестируйте в условиях, приближённых к продакшену.
- Собирайте логи в течение нескольких рабочих циклов.
- Фиксируйте изменения в системе контроля версий (git) для профилей.
Переход в режим enforce для жёсткой изоляции
Когда вы уверены в профиле, включите режим enforce — AppArmor начнёт блокировать действия, которые не разрешены профилем.
sudo aa-enforce /path/to/binaryПосле включения режима следите за логами. При необходимости повторите цикл: перевести в complain, собрать логи, доработать профиль, снова включить enforce.
Ручная правка профиля
Профили AppArmor — обычные текстовые файлы. Их можно править в любом редакторе. Файлы обычно лежат в /etc/apparmor.d/.
Простейший пример структуры профиля:
/usr/bin/example {
#include
/usr/bin/example ix,
/etc/example/ r,
/var/log/example/ rw,
/tmp/** rw,
deny /etc/shadow r,
} Ключевые элементы:
- include — подключаемые общие правила
- права доступа: r (read), w (write), x (execute), ix (inherit execute)
- шаблоны путей: /*, /path/
После ручных правок примените профиль:
sudo apparmor_parser -r /etc/apparmor.d/your.profile(Команда пересоберёт профиль и загрузит изменения в ядро.)
Когда AppArmor не подходит
- Приложения с очень динамическими правами, которые постоянно генерируют новые пути, сложнее профилировать.
- Если вам нужна политика на основе ролей и атрибутов (RBAC на уровне объектов), может подойти SELinux.
- AppArmor ориентирован на файлы и пути; для сетевой сегментации нужны другие решения (firewall, network namespaces).
Альтернативы и дополнения
- SELinux — более гибкая и мощная, но сложнее в настройке и аудите.
- Контейнерные технологии (Docker, Podman) дают изоляцию процесса и файловой системы.
- seccomp — ограничивает системные вызовы процесса.
Выбор зависит от требований к безопасности и операционной сложности.
Мини-методология (SOP) для внедрения профиля
- Оцените приложение и найдите существующие профили в apparmor-profiles.
- Составьте тест-план с основными сценариями.
- Запустите aa-genprof и выполните тест-план.
- Сохраните и переведите профиль в режим complain.
- Соберите логи с помощью aa-logprof и доработайте профиль.
- Протестируйте в complain ещё один цикл.
- Включите режим enforce и наблюдайте за логами.
- Храните версионируемые копии профилей и документируйте изменения.
Ролевые чек-листы
Администратор:
- Проверить наличие профиля в репозитории.
- Запустить aa-genprof и контролировать тест-план.
- Применить профиль и следить за журналами.
Разработчик:
- Предоставить список файлов и сетевых ресурсов, которые нужны приложению.
- Помочь воспроизвести редкие кейсы в тест-плане.
Инженер по безопасности:
- Оценить изменения, предлагаемые aa-logprof.
- Проверить на предмет избыточных разрешений.
Критерии приёмки
- Приложение выполняет все функции в режиме enforce без блокировок.
- В логах нет критичных отказов, связанных с профилем.
- Профиль задокументирован и версионирован.
Примеры неприятностей и их устранение (runbook)
- Симптом: приложение перестало запускаться после перехода в enforce. Действие: временно перевести профиль в complain и проанализировать логи, затем доработать правило.
sudo aa-complain /path/to/binary
sudo journalctl -u appname --no-pager | tail -n 200
sudo aa-logprofСимптом: профиль дал слишком много прав. Действие: отменить предложенные изменения, провести ревью и убрать явно лишние разрешения.
Откат полного профиля:
sudo aa-disable /path/to/binaryБезопасность и конфиденциальность логов
AppArmor логирует события доступа. Убедитесь, что туда не попадают чувствительные данные. Настройте ротацию логов и права доступа к журналам, чтобы логи не раскрывали секреты пользователей.
Глоссарий (1 строка на термин)
- AppArmor — система ограничений доступа для программ в Linux.
- Профиль — текстовый набор правил для конкретной программы.
- complain — режим, где нарушения логируются, но не блокируются.
- enforce — режим, где нарушения блокируются.
- aa-genprof — утилита для интерактивного создания профилей.
- aa-logprof — утилита для анализа логов и предложения изменений.
Краткое резюме
AppArmor даёт управляемую и понятную модель изоляции процессов. Сочетание aa-genprof, режима complain и aa-logprof позволяет минимизировать ручную работу. Всегда тестируйте профиль в условиях, близких к реальным, и документируйте изменения.
Ключевые шаги: 1) сгенерировать профиль через aa-genprof; 2) работать в режиме complain и править через aa-logprof; 3) включить enforce и мониторить логи.
Похожие материалы
Доступ к Android с разбитым экраном
Сброс Samsung при заблокированном телефоне
Как разогнать монитор через NVIDIA Control Panel
APC_INDEX_MISMATCH: как исправить BSOD в Windows
Как исправить ошибку Blink 1011