status=227/NO_NEW_PRIVILEGES в systemd
Код 227 относится к параметру NoNewPrivileges=yes, который запрещает процессу получать новые привилегии — в том числе через setuid-программы. Сам вызов почти никогда не отказывает, поэтому код редкий и указывает на необычное окружение.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Окружение запрещает установку флага
Во вложенных контейнерах и при внешней фильтрации системных вызовов вызов prctl с этим флагом может быть заблокирован.
-
Противоречие с постоянными возможностями
Запрет новых привилегий и выдача постоянных возможностей несовместимы: одно закрывает механизм, который нужен другому.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Показывает шаг NO_NEW_PRIVILEGES и причину.
journalctl -xeu myapp.service --no-pager -n 20Параметры, которые влияют на этот шаг.
systemctl show myapp.service -p NoNewPrivileges -p AmbientCapabilities -p SystemCallFilterРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Во вложенных контейнерах и при внешней фильтрации системных вызовов вызов prctl с этим флагом может быть заблокирован.
- Как проверить
-
Определите окружение и посмотрите сообщение в журнале.
systemd-detect-virt journalctl -xeu myapp.service -n 20 --no-pager
- Как исправить
-
Уберите
NoNewPrivileges=yesв таком окружении: изоляцию всё равно обеспечивает контейнер.
- Почему происходит
- Запрет новых привилегий и выдача постоянных возможностей несовместимы: одно закрывает механизм, который нужен другому.
- Как проверить
-
Проверьте оба параметра.
systemctl show myapp.service -p NoNewPrivileges -p AmbientCapabilities
- Как исправить
- Оставьте либо запрет привилегий, либо постоянные возможности.
Пример вывода
Отказ при включении запрета новых привилегий. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× myapp.service - My application
Active: failed (Result: exit-code) since Mon 2026-09-14 22:15:22 MSK; 1s ago
Process: 22400 ExecStart=/usr/local/bin/myapp (code=exited, status=227/NO_NEW_PRIVILEGES)
systemd[22400]: myapp.service: Failed at step NO_NEW_PRIVILEGES spawning /usr/local/bin/myapp: Operation not permitted
Связанные ошибки
- status=218/CAPABILITIES в systemd Код 218/CAPABILITIES: не удалось применить набор возможностей процесса из CapabilityBoundingSet= или AmbientCapabilities=.
- status=213/SECUREBITS в systemd Код 213/SECUREBITS: не удалось выставить биты безопасности процесса из SecureBits=. Редкий параметр, требующий прав.
- status=228/SECCOMP в systemd Код 228/SECCOMP: не удалось применить фильтр системных вызовов из SystemCallFilter=. Причины: неизвестное имя вызова, отсутствие поддержки в ядре.
- status=236/SMACK_PROCESS_LABEL в systemd Код 236/SMACK_PROCESS_LABEL: не удалось выставить метку SMACK процессу службы. Встречается на системах со SMACK.
- No such file or directory в журнале службы Служба не находит файл или каталог. Разбор: путь, момент запуска, изоляция unit-файла, символические ссылки, приватный /tmp.
- Operation not permitted в журнале службы Операция запрещена: не хватает возможностей процесса, мешает seccomp или модуль безопасности. Отличие от Permission denied.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Protocol not supported при создании сокета Ошибка 93: семейство или протокол не поддержаны. Разбор для IPv6, ограничений изоляции и контейнеров.
Источники
-
systemd.exec(5)
227 EXIT_NO_NEW_PRIVILEGES: не удалось запретить получение новых привилегий. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизводится только в окружении с внешней фильтрацией системных вызовов.