Вопрос или проблема
Похожий вопрос здесь. Я пытаюсь отключить AppArmor на системном уровне. После выполнения следующего:
sudo systemctl stop apparmor
sudo systemctl disable apparmor
И перезагрузки, у меня получается:
❯❯ sudo aa-status | egrep '^[0-9]'
Загружено 48 профилей.
41 профиль в режиме принуждения.
7 профилей в режиме жалоб.
0 профилей в режиме запроса.
0 профилей в режиме уничтожения.
0 профилей в неограниченном режиме.
У 17 процессов определены профили.
17 процессов в режиме принуждения.
0 процессов в режиме жалоб.
0 процессов в режиме запроса.
0 процессов в режиме уничтожения.
0 процессов неограничены, но имеют определенный профиль.
0 процессов в смешанном режиме.
❯❯ sudo aa-enabled
Да
❯❯ sudo systemctl status apparmor
○ apparmor.service - Загрузка профилей AppArmor
Загружено: загружено (/usr/lib/systemd/system/apparmor.service; отключено; предустановлено: включено)
Активно: неактивно (мертво)
Документы: man:apparmor(7)
https://gitlab.com/apparmor/apparmor/wikis/home/
Если я делаю что-то, что нарушает политику (в моем случае, создание пространства имен пользователя), я получаю такие сообщения в журнале ядра, которые, кажется, подтверждают, что AppArmor в действии:
[ 942.570952] audit: type=1400 audit(1735492407.323:89): apparmor="DENIED" operation="userns_create" class="namespace" info="Userns create restricted - failed to find unprivileged_userns profile" error=-13 profile="unconfined" pid=6227 comm="python" requested="userns_create" denied="userns_create" target="unprivileged_userns"
Ответ или решение
Проблема, с которой вы сталкиваетесь при попытке отключить AppArmor на вашей системе, связана с некоторыми аспектами работы данного механизма безопасности в Ubuntu 24.04.1. Несмотря на предпринятые действия по остановке и отключению службы AppArmor через systemctl, данный модуль может продолжать функционировать из-за нескольких факторов.
Почему AppArmor продолжает работать:
-
Ядровый модуль: AppArmor интегрирован в ядро Linux и может работать независимо от состояния службы systemd. Даже если служба AppArmor остановлена и отключена, ядровый модуль может оставаться активным. Команда
lsmod
может показать, что модуль AppArmor загружен в систему, и его может понадобиться выгрузить вручную черезrmmod apparmor
. -
Файловая система: Профили AppArmor загружаются при старте системы из
/etc/apparmor.d
. Даже при отключении службы, наличие этих файлов может привести к автоматической загрузке профилей на уровне ядра. -
Дополнительные сервисы: Некоторые системные сервисы сами по себе могут запускаться с активацией AppArmor независимо от состояния службы apparmor.service. Эти процессы могут инициировать профили на лету.
Что делать:
Чтобы полностью отключить AppArmor, нужно выполнить следующие шаги:
-
Выгрузка из ядра: Выполните команду
sudo rmmod apparmor
для выгрузки модуля из ядра. Однако, учтите, что это может вызвать проблемы с зависимостями других модулей. -
Удаление или переименование профилей: Скопируйте профили из
/etc/apparmor.d
в резервную папку или временно переименуйте, чтобы исключить их автоматическую загрузку при запуске. -
Обновление параметров загрузчика: В файле конфигурации вашего загрузчика (например, GRUB) добавьте параметр
apparmor=0
в строку загрузки ядра. Для этого:- Отредактируйте файл
/etc/default/grub
. - Найдите строку
GRUB_CMDLINE_LINUX_DEFAULT
и добавьтеapparmor=0
. - Обновите конфигурацию GRUB командой
sudo update-grub
. - Перезагрузите систему.
- Отредактируйте файл
Заключение
Очень важно осознавать риски, связанные с отключением механизма безопасности, такого как AppArmor. Данный модуль обеспечивает дополнительную защиту вашей системе, помогая предотвратить несанкционированные действия и выполнение вредоносных программ. Если отключение действительно необходимо, убедитесь, что у вас есть альтернативные механизмы защиты, такие как SELinux или другие средства безопасности.
Это краткое руководство поможет в отключении AppArmor, однако важно понимать, что снижение уровня безопасности может повысить уязвимость системы. Разумный подход требует взвешивания всех возможных последствий.