SystemdDoctor
служба не работает возможности права изоляция

status=218/CAPABILITIES в systemd

Код 218/CAPABILITIES значит, что systemd не сумел настроить возможности процесса. Чаще всего в AmbientCapabilities= просят возможность, которой нет в ограничивающем наборе, или указано неизвестное имя.

Что это значит

Возможности в Linux — это разрезанные на части права root. Ограничивающий набор задаёт потолок: возможность, исключённая из него, не может появиться у процесса никаким способом. Постоянные возможности (AmbientCapabilities=) выдаются процессу поверх этого потолка, поэтому их набор обязан быть его подмножеством.

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

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

  1. Постоянная возможность не входит в ограничивающий набор

    Просить AmbientCapabilities=CAP_NET_BIND_SERVICE при CapabilityBoundingSet= без этой возможности бессмысленно: потолок ниже запроса, и systemd отказывает.

  2. Указано неизвестное имя возможности

    Опечатка вроде CAP_NET_BIND вместо CAP_NET_BIND_SERVICE приводит к отказу при разборе или применении.

  3. Постоянные возможности заданы вместе с NoNewPrivileges=yes

    Запрет получения новых привилегий закрывает механизм, через который выдаются постоянные возможности.

Диагностика

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

Показывает шаг CAPABILITIES и причину.

journalctl -xeu myapp.service --no-pager -n 20

Все связанные параметры вместе: возможности, запрет привилегий, пользователь.

systemctl show myapp.service | grep -iE "capab|noNewPriv|user"

Решение

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

1. Постоянная возможность не входит в ограничивающий набор
Почему происходит
Просить 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
2. Указано неизвестное имя возможности
Почему происходит
Опечатка вроде CAP_NET_BIND вместо CAP_NET_BIND_SERVICE приводит к отказу при разборе или применении.
Как проверить
Посмотрите список возможностей, известных ядру, и сверьте имена.
capsh --print | head -3
systemctl show myapp.service -p AmbientCapabilities
Как исправить
Исправьте имя. Полный список имён есть в capabilities(7).
3. Постоянные возможности заданы вместе с 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
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на AmbientCapabilities вне CapabilityBoundingSet и вместе с NoNewPrivileges=yes.
    собственная проверка, systemd 255
    сверено 15 сентября 2026