SystemdDoctor
служба не работает apparmor права

AppArmor: apparmor="DENIED" в журнале ядра

Записи apparmor="DENIED" в журнале ядра означают, что операцию запретил профиль AppArmor. Как и с SELinux, права на файлы тут не при чём: разбираться надо с профилем.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. В профиле нет правила для нужного пути

    Профиль перечисляет разрешённые пути. Новый каталог данных или файл настроек в нестандартном месте в него не входит.

  2. Профиль в режиме принудительного применения, хотя готов не полностью

    Новый профиль обычно ставят в режим наблюдения, собирают запреты и только потом включают. Преждевременное включение ломает службу.

  3. Профиль от другой версии программы

    После обновления программы пути могли измениться. Профиль остался прежним и запрещает новое.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Запреты с путями и операциями.

journalctl -k -b --no-pager | grep -i DENIED | tail -20

Список профилей и их режимы.

sudo aa-status

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. В профиле нет правила для нужного пути
Почему происходит
Профиль перечисляет разрешённые пути. Новый каталог данных или файл настроек в нестандартном месте в него не входит.
Как проверить
Посмотрите запрет и профиль.
journalctl -k -b --no-pager | grep -i "apparmor=\"DENIED\"" | tail -10
sudo aa-status | head -10
Как исправить
Добавьте правило в локальную часть профиля и перезагрузите его. Локальные файлы переживают обновление пакета.
# /etc/apparmor.d/local/usr.sbin.myapp
# /srv/data/** rw,
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.myapp
2. Профиль в режиме принудительного применения, хотя готов не полностью
Почему происходит
Новый профиль обычно ставят в режим наблюдения, собирают запреты и только потом включают. Преждевременное включение ломает службу.
Как проверить
Посмотрите режимы профилей.
sudo aa-status | head -20
Как исправить
Переведите профиль в режим наблюдения, соберите запреты, дополните правила и включите обратно.
sudo aa-complain /usr/sbin/myapp
3. Профиль от другой версии программы
Почему происходит
После обновления программы пути могли измениться. Профиль остался прежним и запрещает новое.
Как проверить
Сравните запрещённые пути с фактическими.
journalctl -k -b --no-pager | grep DENIED | grep -oE 'name="[^"]+"' | sort -u | head
Как исправить
Обновите профиль под новую версию или возьмите профиль из нового пакета.

Пример вывода

Профиль запрещает запись в новый каталог. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

kernel: audit: type=1400 audit(1789...): apparmor="DENIED" operation="open" profile="/usr/sbin/myapp" name="/srv/data/state.db" pid=4200 comm="myapp" requested_mask="wc" denied_mask="wc"

Связанные ошибки

Источники

  • Документация AppArmor документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено новым каталогом данных вне правил профиля.
    собственная проверка, systemd 255
    сверено 15 сентября 2026