SystemdDoctor
служба не работает частое user права учётные данные

status=217/USER в systemd

Код 217/USER systemd выдаёт до запуска программы, когда не смог получить или применить учётные данные пользователя из User=. Чаще всего такого пользователя просто нет в системе — например, он создаётся установщиком, который ещё не выполнялся.

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

Определение пользователя идёт до вызова программы, поэтому ни одной строки от службы в журнале не будет. Проверять надо не программу, а систему: есть ли пользователь, разрешимо ли имя, не мешает ли другой параметр unit-файла.

Сюда же systemd относит неудачу с пользовательскими пространствами имён: если в unit-файле задан PrivateUsers=, а ядро или контейнер такого не позволяют, код будет тем же 217.

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

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

  1. Пользователя из User= нет в системе

    Пакет не создал пользователя, его удалили, или в unit-файле опечатка. systemd не заводит пользователей сам, кроме случая DynamicUser=yes.

  2. Пользователь есть только в сетевом каталоге, который недоступен на момент запуска

    При LDAP, SSSD или FreeIPA имя разрешается через сеть. Если служба стартует раньше готовности сети и nss-модулей, пользователь «не существует» именно в этот момент.

  3. Имя пользователя недопустимо для systemd

    systemd строже обычного useradd: имя с точкой, пробелом, символами в верхнем регистре в некоторых версиях или длиннее 31 символа будет отвергнуто ещё при разборе.

  4. User= задан вместе с DynamicUser=yes

    Эти настройки противоречат друг другу: временного пользователя systemd создаёт сам, и явно заданное имя ломает схему.

  5. Пользовательские пространства имён недоступны

    При PrivateUsers=yes в контейнере без нужных прав или на ядре с отключёнными user namespaces подготовка не проходит, и systemd сообщает тот же 217.

Диагностика

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

systemd пишет, какое именно имя не удалось разобрать: «Failed to determine user credentials» с указанием имени.

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

Показывает пользователя так, как его видит система целиком, включая сетевые источники. Пустой вывод — пользователя нет.

getent passwd app

Действующие значения после всех drop-in: бывает, что пользователь задан в двух местах и применилось не то, что ожидалось.

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

Решение

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

1. Пользователя из User= нет в системе
Почему происходит
Пакет не создал пользователя, его удалили, или в unit-файле опечатка. systemd не заводит пользователей сам, кроме случая DynamicUser=yes.
Как проверить
Проверьте наличие пользователя.
id app
getent passwd app
Как исправить
Создайте системного пользователя без оболочки и домашнего каталога, если он служебный.
sudo useradd --system --no-create-home --shell /usr/sbin/nologin app
2. Пользователь есть только в сетевом каталоге, который недоступен на момент запуска
Почему происходит
При LDAP, SSSD или FreeIPA имя разрешается через сеть. Если служба стартует раньше готовности сети и nss-модулей, пользователь «не существует» именно в этот момент.
Как проверить
Сравните, разрешается ли имя после загрузки, и посмотрите, когда стартовала служба относительно сети.
getent passwd app
systemctl status sssd.service nss-user-lookup.target
Как исправить
Добавьте ожидание готовности разрешения имён: After=nss-user-lookup.target и, при необходимости, зависимость от службы каталога.
[Unit]
After=nss-user-lookup.target sssd.service
Wants=nss-user-lookup.target
3. Имя пользователя недопустимо для systemd
Почему происходит
systemd строже обычного useradd: имя с точкой, пробелом, символами в верхнем регистре в некоторых версиях или длиннее 31 символа будет отвергнуто ещё при разборе.
Как проверить
Посмотрите точное значение и сообщение в журнале: при недопустимом имени systemd пишет про invalid user name.
systemctl show myapp.service -p User
Как исправить
Переименуйте пользователя в допустимое имя: строчные буквы, цифры, дефис и подчёркивание.
4. User= задан вместе с DynamicUser=yes
Почему происходит
Эти настройки противоречат друг другу: временного пользователя systemd создаёт сам, и явно заданное имя ломает схему.
Как проверить
Поищите оба параметра в действующей конфигурации.
systemctl show myapp.service -p User -p DynamicUser
Как исправить
Оставьте одно: либо DynamicUser=yes без User=, либо явного пользователя без динамического.
5. Пользовательские пространства имён недоступны
Почему происходит
При PrivateUsers=yes в контейнере без нужных прав или на ядре с отключёнными user namespaces подготовка не проходит, и systemd сообщает тот же 217.
Как проверить
Проверьте, задан ли параметр и разрешены ли пространства имён ядром.
systemctl show myapp.service -p PrivateUsers
sysctl kernel.unprivileged_userns_clone 2>/dev/null
Как исправить
Уберите PrivateUsers=yes или запускайте службу в окружении, где пространства имён разрешены.

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

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

× myapp.service - My application
     Active: failed (Result: exit-code) since Mon 2026-09-14 13:04:55 MSK; 1s ago
    Process: 6410 ExecStart=/usr/local/bin/myapp (code=exited, status=217/USER)

systemd[6410]: myapp.service: Failed to determine user credentials: No such process
systemd[1]: myapp.service: Main process exited, code=exited, status=217/USER
systemd[1]: myapp.service: Failed with result 'exit-code'.

Приписка «No such process» тут сбивает с толку: речь не о процессе, а о том, что запись о пользователе не найдена.

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

  • status=216/GROUP в systemd Код 216/GROUP: systemd не смог определить или сменить группу из Group= или SupplementaryGroups=. Причины и как проверить.
  • status=203/EXEC в systemd Код 203/EXEC означает, что systemd не смог выполнить программу из ExecStart=. Разбор причин: путь, права, интерпретатор, синтаксис оболочки.
  • status=200/CHDIR в systemd Код 200/CHDIR означает, что systemd не смог перейти в каталог из WorkingDirectory= до запуска программы. Причины и решение.
  • status=224/PAM в systemd Код 224/PAM: не удалось открыть сеанс PAM для службы. Обычно нет нужного файла настроек в /etc/pam.d.
  • MySQL: Can't open the mysql.plugin table и повреждение системных таблиц MySQL не запускается: недоступны или повреждены системные таблицы. Права на каталог данных, версия схемы, восстановление.
  • Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
  • PostgreSQL: data directory has invalid permissions Кластер PostgreSQL не запускается из-за прав на каталог данных. Требование 0700 или 0750 и как вернуть владельца.
  • nginx 403 Forbidden и Permission denied на файлы сайта nginx отдаёт 403: нет прав на файлы сайта, закрыт каталог по пути, мешает SELinux или AppArmor, нет индексного файла.

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

Источники

  • systemd.exec(5)
    217 EXIT_USER: не удалось определить или сменить учётные данные пользователя, либо настроить user namespace.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено на unit с User=nonexistent и на связке User= + DynamicUser=yes.
    собственная проверка, systemd 255
    сверено 15 сентября 2026