SystemdDoctor
AmbientCapabilities= [Service]

AmbientCapabilities= и CapabilityBoundingSet=: права без root

Возможности — это разрезанные на части права root. AmbientCapabilities= выдаёт процессу конкретные возможности, CapabilityBoundingSet= задаёт потолок: чего у процесса не может быть ни при каких условиях.

Что делает

Самый частый случай — порт ниже 1024. Вместо запуска службы от root ей выдают одну возможность CAP_NET_BIND_SERVICE: она сможет занять 80-й порт и ничего больше. Это заметно лучше, чем полные права из-за одного порта.

Два параметра работают вместе: выданная возможность обязана входить в ограничивающий набор. Иначе systemd откажет с кодом 218/CAPABILITIES — потолок ниже запроса.

Где ставится. В секции [Service]. Имена возможностей пишутся полностью, с префиксом CAP_.

Значения

ЗначениеЧто происходит
CAP_NET_BIND_SERVICEпривязка к портам ниже 1024.
CAP_NET_ADMINнастройка сети: интерфейсы, маршруты, правила.
CAP_SYS_NICEповышение приоритета процесса и политики реального времени.
CAP_SYS_RESOURCEпревышение жёстких пределов ресурсов.

Пример

Служба от обычного пользователя, слушающая 443-й порт.

[Service]
User=web
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=no
ExecStart=/usr/local/bin/web --listen 0.0.0.0:443

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

Типичные ошибки

Возможность вне ограничивающего набора не выдаётся: запуск падает с кодом 218/CAPABILITIES.

NoNewPrivileges=yes несовместим с выдачей постоянных возможностей.

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

Возможности не заменяют права на файлы: доступ к файлу они не открывают.

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

  • status=218/CAPABILITIES в systemdКод 218/CAPABILITIES: не удалось применить набор возможностей процесса из CapabilityBoundingSet= или AmbientCapabilities=.
  • bind: Permission denied при привязке к портуОтказ при привязке к порту: обычно порт ниже 1024 у службы от непривилегированного пользователя. Как дать возможность CAP_NET_BIND_SERVICE.
  • status=227/NO_NEW_PRIVILEGES в systemdКод 227/NO_NEW_PRIVILEGES: не удалось включить запрет получения новых привилегий. Редкий код, обычно из-за окружения.

Рядом стоящие параметры

Где важен на практике

Источники

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