SystemdDoctor
служба не работает права скрипты

sudo: user is not in the sudoers file

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

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

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

  1. Нет правила для пользователя службы

    Служба работает от служебного пользователя, которого нет в списке. Запрос отклоняется, а сообщение попадает в журнал.

  2. Требуется пароль, а ввести его негде

    У службы нет терминала. Запрос пароля повисает и завершается отказом по таймауту.

  3. Требуется терминал

    Настройка requiretty в правилах не даёт выполнять sudo без терминала. В службах это всегда так.

Диагностика

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

Какие команды разрешены пользователю службы.

sudo -l -U app

Записи о попытках повышения прав.

journalctl -u myapp.service -n 20 --no-pager | grep -i sudo

Решение

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

1. Нет правила для пользователя службы
Почему происходит
Служба работает от служебного пользователя, которого нет в списке. Запрос отклоняется, а сообщение попадает в журнал.
Как проверить
Посмотрите правила и пользователя службы.
sudo -l -U app 2>/dev/null | head
systemctl show myapp.service -p User
Как исправить
Лучший вариант — убрать sudo из службы: выдайте нужную возможность параметром AmbientCapabilities= или перенесите действие в отдельную службу. Если правило всё же нужно, оно должно быть точным: одна команда, без пароля.
2. Требуется пароль, а ввести его негде
Почему происходит
У службы нет терминала. Запрос пароля повисает и завершается отказом по таймауту.
Как проверить
Посмотрите, требует ли правило пароль.
sudo -l -U app 2>/dev/null | grep -i nopasswd
Как исправить
Правило для автоматизации должно быть без пароля и на конкретную команду. Разрешать всё без пароля нельзя.
3. Требуется терминал
Почему происходит
Настройка requiretty в правилах не даёт выполнять sudo без терминала. В службах это всегда так.
Как проверить
Посмотрите настройку.
sudo grep -r requiretty /etc/sudoers /etc/sudoers.d/ 2>/dev/null
Как исправить
Уберите требование терминала для нужного пользователя или откажитесь от sudo в службе.

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

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

myapp.sh[4100]: sudo: a password is required
sudo[4101]: app : user NOT in sudoers ; TTY=unknown ; PWD=/opt/myapp ; USER=root ; COMMAND=/usr/bin/systemctl restart nginx
systemd[1]: myapp.service: Main process exited, code=exited, status=1/FAILURE

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

Источники

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