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

status=4/NOPERMISSION в systemd

Код 4 по соглашению LSB означает недостаток прав, и возвращает его сама программа — чаще всего init-скрипты и службы, унаследовавшие их поведение. Разбирать нужно не код, а то, к чему именно не хватило доступа.

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

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

  1. Служба работает от пользователя без нужных прав

    В unit-файле задан User=, а программе нужен доступ к файлу, устройству или привилегированному порту.

  2. Программа требует именно root

    Часть служб проверяет идентификатор пользователя в начале работы и отказывается работать не от root.

  3. Мешают параметры изоляции из того же unit-файла

    ProtectSystem=, ReadOnlyPaths=, PrivateDevices= закрывают доступ к путям и устройствам, даже когда права на них в порядке.

Диагностика

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

Сообщение программы о том, чего именно ей не хватило.

journalctl -u myapp.service -n 40 --no-pager

От кого работает служба и какие возможности ей оставлены.

systemctl show myapp.service -p User -p Group -p AmbientCapabilities

Решение

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

1. Служба работает от пользователя без нужных прав
Почему происходит
В unit-файле задан User=, а программе нужен доступ к файлу, устройству или привилегированному порту.
Как проверить
Посмотрите пользователя службы и сообщение программы.
systemctl show myapp.service -p User -p Group
journalctl -u myapp.service -n 40 --no-pager
Как исправить
Дайте доступ точечно: права на файл, членство в группе, AmbientCapabilities=CAP_NET_BIND_SERVICE для портов ниже 1024. Запускать от root ради одного доступа — плохой обмен.
2. Программа требует именно root
Почему происходит
Часть служб проверяет идентификатор пользователя в начале работы и отказывается работать не от root.
Как проверить
Поищите в журнале сообщение про root или про недостаток привилегий.
journalctl -u myapp.service -n 30 --no-pager | grep -iE "root|privile|permission"
Как исправить
Уберите User= для такой службы либо найдите в её настройках способ работать от обычного пользователя.
3. Мешают параметры изоляции из того же unit-файла
Почему происходит
ProtectSystem=, ReadOnlyPaths=, PrivateDevices= закрывают доступ к путям и устройствам, даже когда права на них в порядке.
Как проверить
Посмотрите действующие параметры изоляции.
systemctl show myapp.service | grep -E "Protect|Private|Paths"
Как исправить
Разрешите нужное точечно через ReadWritePaths= или DeviceAllow=, не снимая изоляцию целиком.

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

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

× web.service - Web server
     Active: failed (Result: exit-code) since Mon 2026-09-15 11:40:55 MSK; 1s ago
    Process: 9100 ExecStart=/usr/local/bin/web --port 80 (code=exited, status=4/NOPERMISSION)

web[9100]: fatal: bind 0.0.0.0:80: permission denied
systemd[1]: web.service: Main process exited, code=exited, status=4/NOPERMISSION

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

Где встречается чаще всего

Источники

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