AppArmor - это система обязательного контроля доступа. При включении AppArmor ограничивает программы в соответствии с набором правил, определяющих, к каким файлам может получить доступ та или иная программа. Этот проактивный подход помогает защитить систему от известных и неизвестных уязвимостей. AppArmor доступен в Debian начиная с Debian 7 "Wheezy".
Включение AppArmor
Если вы используете Debian 10 "Buster" или новее, AppArmor включен по умолчанию, поэтому этот шаг можно пропустить.
Модули безопасности AppArmor Linux Security Modules (LSM) должны быть включены из командной строки ядра linux в загрузчике:
1 | sudo mkdir -p /etc/default/grub.d |
1 2 | echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT apparmor=1 security=apparmor"' \ | sudo tee /etc/default/grub.d/apparmor.cfg |
1 | sudo update-grub |
1 | sudo reboot |
Проверить текущее состояние AppArmor
Профили AppArmor могут быть установлены в различные режимы:
- режим уведомления (complain): нарушения политики будут только регистрироваться в журнале
- режим принуждения (enforce): операции, нарушающие политику, будут блокироваться.
Обратите внимание, что правила запрета в профилях выполняются/блокируются даже в режиме жалобы.
Узнайте, включен ли AppArmor (возвращает Y, если истина):
1 | cat /sys/module/apparmor/parameters/enabled |
Вывести список всех загруженных профилей AppArmor для приложений и процессов и подробно описать их статус (принудительный, жалоба, не принудительный):
1 | sudo aa-status |
Список запущенных исполняемых файлов, которые в настоящее время ограничены профилем AppArmor:
1 | ps auxZ | grep -v '^unconfined' |
Список процессов с портами tcp или udp, у которых не загружены профили AppArmor:
1 | sudo aa-unconfined |
1 | sudo aa-unconfined --paranoid |
если получаем ошибку "sudo: aa-unconfined: command not found"
1 | sudo apt-get install apparmor-utils |
Включение профилей
Пакеты Debian, устанавливающие профили в /etc/apparmor.d/, автоматически включают их (режим complain). Другие профили должны быть скопированы в этот каталог и вручную установлены в режим complain или enforce.
Например, чтобы установить "дополнительный" профиль из каталога /usr/share/apparmor/extra-profiles/, предоставленного apparmor-profiles, и перевести его в режим жалоб:
список доступных профилей
1 | ls /usr/share/apparmor/extra-profiles/ |
установите профиль
1 | sudo cp /usr/share/apparmor/extra-profiles/usr.bin.example /etc/apparmor.d/ |
перевести профиль в режим мониторинга
1 | sudo aa-complain /etc/apparmor.d/usr.bin.example |
Чтобы перевести профиль в режим принуждения, используйте aa-enforce вместо aa-complain.
Будьте осторожны: многие профили неактуальны и будут нарушать функциональность в режиме принуждения, будьте готовы к отладке!
Отладка AppArmor
Журналы AppArmor можно найти в журнале systemd, в /var/log/syslog и /var/log/kern.log (и /var/log/audit.log, если установлен auditd).
Диагностика того, что ошибка могла быть вызвана AppArmor
Просмотрите эти журналы:
- ALLOWED (регистрируется, когда профиль в режиме жалобы нарушает политику)
- DENIED (регистрируется, когда профиль в режиме принуждения фактически блокирует операцию).
Полное сообщение журнала должно предоставить больше информации о том, какой именно доступ был запрещен. Вы можете использовать это для редактирования профилей перед включением их в режим принудительного исполнения.
Иногда полезно отключить профиль и проверить его снова, если ошибка сохраняется:
временно отключить профиль
1 | sudo aa-disable /etc/apparmor.d/usr.bin.example |
после тестирования снова включите его в режиме мониторинга
1 | sudo aa-complain /etc/apparmor.d/usr.bin.example |
или в режиме принуждения
1 | sudo aa-enforce /etc/apparmor.d/usr.bin.example |
Обратите внимание, что systemd может все еще загружать профиль, если у вас есть AppArmorProfile, установленный в файле unit. Тогда правильным способом отключения профиля будет закомментировать эту строку в файле модулей или через переопределение systemd.
Уведомления на рабочем столе
Пакет apparmor-notify предоставляет уведомления на рабочий стол (через aa-notify), когда происходит нарушение политики. Программа должна запускаться автоматически при входе в систему.
- Если auditd не установлен, ваш пользователь должен быть членом группы adm.
- Если auditd установлен, файл /etc/xdg/autostart/apparmor-notify.desktop должен быть изменен следующим образом Exec=sudo aa-notify -p -f /var/log/audit/audit.log
Выгрузка профилей
В вики AppArmorMonitoring в upstream есть информация о том, как отладить разбор фактических профилей. Команда apparmor_parser имеет множество различных инструментов для этого. Например, эта команда выгрузит препроцессированный профиль, сгладив все параметры #include в один поток:
1 | apparmor_parser --preprocess /etc/apparmor.d/usr.bin/man |
А это сделает все, кроме загрузки ядра, сбрасывая точные пути и параметры, переданные в ядро:
1 | apparmor_parser --skip-kernel-load --debug /etc/apparmor.d/usr.bin/man |
Отключить AppArmor
AppArmor - это механизм безопасности, и отключать его не рекомендуется. Если вам действительно необходимо отключить AppArmor в вашей системе:
1 | sudo mkdir -p /etc/default/grub.d |
1 2 | echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT apparmor=0"' \ | sudo tee /etc/default/grub.d/apparmor.cfg |
1 | sudo update-grub |
1 | sudo reboot |
Редактирование профилей AppArmor
После редактирования профиля перезагрузите его в ядро с помощью apparmor_parser:
1 | sudo apparmor_parser -r /etc/apparmor.d/usr.bin.example |
Перезапустите приложение и проверьте журналы.
Парсер молча игнорирует правила, которые не поддерживаются запущенным ядром. Чтобы проверить, какие правила действительно выполняются, передайте apparmor_parser параметры --warn=rules-not-enforced --warn=rule-downgraded.