Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
AppArmor: apparmor="DENIED" operation="open" profile="..." Linux / DevOps

AppArmor: apparmor=DENIED operation=open — Решение блокировок AppArmor

Обновлено: 18.08.2026  ·  Официальная база знаний

Архитектура ошибки и симптомы сбоя

Сообщение «AppArmor: apparmor="DENIED" operation="open" profile="..."» регистрируется подсистемой Mandatory Access Control (MAC) AppArmor ядра Linux. Ошибка указывает на то, что запущенный процесс, ограниченный профилем безопасности (например, MySQL, Nginx, Docker/runc, Named), попытался открыть системный путь, сетевой сокет или дескриптор, явно не разрешенный набором правил в профиле /etc/apparmor.d/. В результате ядро блокирует системный вызов и возвращает приложению ошибку EACCES (Permission denied).

Диагностическая таблица параметров сбоя

ПараметрЗначениеИнженерный смысл сбоя
profileTarget Security ProfileИмя загруженного профиля изоляции (например, /usr/sbin/mysqld или docker-default).
operationopen / file_mmap / execЗаблокированный системный вызов ядра Linux.
nameFile / Socket PathАбсолютный путь к целевому ресурсу, доступ к которому был отклонен.
requested_maskr / w / x / k / mЗапрошенные права (чтение, запись, исполнение, блокировка файла, mmap).

Пошаговое дерево решений и сценарии траблшутинга

Сценарий 1: Просмотр и фильтрация блокировок AppArmor

# Просмотр статуса всех активных профилей:
sudo aa-status

# Мониторинг заблокированных вызовов в реальном времени:
sudo aa-notify -s 1 -w 60

# Поиск последних записей в аудит-логах:
sudo dmesg -T | grep -i "apparmor=\"DENIED\""

Сценарий 2: Интерактивное обновление профиля через aa-logprof

Утилита aa-logprof анализирует журнал аудита и предлагает внести легитимные пути в конфигурацию профиля:

# Установка утилит администрирования AppArmor:
sudo apt-get install apparmor-utils

# Запуск интерактивного мастера обновления правил:
sudo aa-logprof
# Нажмите (A)llow для добавления правила или (G)lob для маски путей.

Сценарий 3: Временный перевод профиля в режим обучения (Complain Mode)

Если сервис блокируется, но должен работать без остановки:

# Перевод конкретного профиля в режим логирования без блокировок:
sudo aa-complain /etc/apparmor.d/usr.sbin.mysqld

# Возврат профиля в режим принудительной блокировки (Enforce Mode):
sudo aa-enforce /etc/apparmor.d/usr.sbin.mysqld

Сценарий 4: Ручное добавление локальных правил в tunables / local

Для сохранения изменений при обновлениях пакетов используйте файлы local/:

# Добавьте кастомный путь (например, для нестандартного каталога MySQL) в /etc/apparmor.d/local/usr.sbin.mysqld:
/var/data/mysql/ r,
/var/data/mysql/** rwk,

# Перезагрузите профиль в ядро:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
Службы или контейнеры падают с ошибкой Permission Denied на Ubuntu?
ITSTM настроит корректные профили изоляции AppArmor для СУБД, веб-сервисов и контейнерных платформ Kubernetes без ущерба для безопасности.
Практический опыт инженера: Никогда не отключайте подсистему AppArmor глобально через systemctl disable apparmor. Используйте каталог /etc/apparmor.d/local/ для оверрайда правил конкретных сервисов — это защитит хост при взломе веб-приложений через RCE.

Частые вопросы (FAQ)

Чем AppArmor принципиально отличается от SELinux?

AppArmor использует path-based подход (привязка правил к абсолютным путям файловой системы), что упрощает настройку профилей людьми. SELinux использует label-based подход (привязка контекстов безопасности к inode файлов), что обеспечивает более строгую, но сложную в администрировании модель.

Почему после изменения пути datadir в MySQL он перестает запускаться?

Стандартный профиль /etc/apparmor.d/usr.sbin.mysqld жестко разрешает доступ только к путям /var/lib/mysql. При переносе базы данных на другой диск/директорию AppArmor блокирует чтение конфигураций и файлов данных.

Как временно полностью выключить профиль для одного демона?

Выполните: sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ && sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld.

Как AppArmor работает с контейнерами Docker?

Docker по умолчанию запускает контейнеры под обобщенным профилем docker-default. Если контейнеру требуются расширенные привилегии (например, системные вызовы ptrace, mount), запускайте его с флагом --security-opt apparmor=unconfined или создавайте специализированный кастомный профиль.