status=218/CAPABILITIES в systemd
Код 218/CAPABILITIES значит, что systemd не сумел настроить возможности процесса. Чаще всего в AmbientCapabilities= просят возможность, которой нет в ограничивающем наборе, или указано неизвестное имя.
Что это значит
Возможности в Linux — это разрезанные на части права root. Ограничивающий набор задаёт потолок: возможность, исключённая из него, не может появиться у процесса никаким способом. Постоянные возможности (AmbientCapabilities=) выдаются процессу поверх этого потолка, поэтому их набор обязан быть его подмножеством.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Постоянная возможность не входит в ограничивающий набор
Просить
AmbientCapabilities=CAP_NET_BIND_SERVICEприCapabilityBoundingSet=без этой возможности бессмысленно: потолок ниже запроса, и systemd отказывает. -
Указано неизвестное имя возможности
Опечатка вроде
CAP_NET_BINDвместоCAP_NET_BIND_SERVICEприводит к отказу при разборе или применении. -
Постоянные возможности заданы вместе с
NoNewPrivileges=yesЗапрет получения новых привилегий закрывает механизм, через который выдаются постоянные возможности.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Показывает шаг CAPABILITIES и причину.
journalctl -xeu myapp.service --no-pager -n 20Все связанные параметры вместе: возможности, запрет привилегий, пользователь.
systemctl show myapp.service | grep -iE "capab|noNewPriv|user"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Просить
AmbientCapabilities=CAP_NET_BIND_SERVICEприCapabilityBoundingSet=без этой возможности бессмысленно: потолок ниже запроса, и systemd отказывает.
- Как проверить
-
Сравните оба набора.
systemctl show myapp.service -p CapabilityBoundingSet -p AmbientCapabilities
- Как исправить
-
Добавьте нужную возможность в ограничивающий набор или уберите её из постоянных.
CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE
- Почему происходит
- Опечатка вроде
CAP_NET_BINDвместоCAP_NET_BIND_SERVICEприводит к отказу при разборе или применении.
- Как проверить
-
Посмотрите список возможностей, известных ядру, и сверьте имена.
capsh --print | head -3 systemctl show myapp.service -p AmbientCapabilities
- Как исправить
- Исправьте имя. Полный список имён есть в capabilities(7).
NoNewPrivileges=yes- Почему происходит
- Запрет получения новых привилегий закрывает механизм, через который выдаются постоянные возможности.
- Как проверить
-
Проверьте оба параметра.
systemctl show myapp.service -p NoNewPrivileges -p AmbientCapabilities
- Как исправить
- Уберите один из параметров: либо запрет новых привилегий, либо постоянные возможности.
Пример вывода
Постоянная возможность вне ограничивающего набора. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
× web.service - Small web server
Active: failed (Result: exit-code) since Mon 2026-09-14 21:02:11 MSK; 1s ago
Process: 20100 ExecStart=/usr/local/bin/web (code=exited, status=218/CAPABILITIES)
systemd[20100]: web.service: Failed at step CAPABILITIES spawning /usr/local/bin/web: Operation not permitted
Связанные ошибки
- status=227/NO_NEW_PRIVILEGES в systemd Код 227/NO_NEW_PRIVILEGES: не удалось включить запрет получения новых привилегий. Редкий код, обычно из-за окружения.
- status=213/SECUREBITS в systemd Код 213/SECUREBITS: не удалось выставить биты безопасности процесса из SecureBits=. Редкий параметр, требующий прав.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Operation not permitted в журнале службы Операция запрещена: не хватает возможностей процесса, мешает seccomp или модуль безопасности. Отличие от Permission denied.
- Read-only file system в журнале службы Служба не может писать: файловая система только для чтения. Разбор: параметры изоляции unit, монтирование ro, ошибки файловой системы.
- bind: Permission denied при привязке к порту Отказ при привязке к порту: обычно порт ниже 1024 у службы от непривилегированного пользователя. Как дать возможность CAP_NET_BIND_SERVICE.
- status=209/STDOUT в systemd Код 209/STDOUT: systemd не смог настроить стандартный вывод службы. Чаще всего виноват путь в StandardOutput=append: или file:.
- status=210/CHROOT в systemd Код 210/CHROOT: не удалось сменить корневой каталог из RootDirectory= или подключить образ RootImage=.
Где встречается чаще всего
Источники
-
systemd.exec(5)
218 EXIT_CAPABILITIES: не удалось сбросить или выдать возможности. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено на AmbientCapabilities вне CapabilityBoundingSet и вместе с NoNewPrivileges=yes.