systemd Linux с systemd (конкретный дистрибутив и версия могут отличаться)

Служба запускается под root, но не под отдельным пользователем

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Служба работает от root, но падает после настройки User=непривилегированный_пользователь. Требуется точечная диагностика прав, а не возвращение запуска от root.

В этой статье
  1. Как распознать проблему и где применимы действия
  2. Возможные причины и диагностические признаки
  3. Пошаговая диагностика и исправление
  4. Как проверить, что проблема действительно устранена
  5. Если результат не получен

#Как распознать проблему и где применимы действия

Служба работает от root, но падает после настройки User=непривилегированный_пользователь. Требуется точечная диагностика прав, а не возвращение запуска от root. Перед выполнением определите название программы, редакцию Linux и управляющий сервис. Значения примеров в командах не являются готовой конфигурацией вашего устройства.

#Возможные причины и диагностические признаки

Возможная причинаКак узнатьЧто делать
Нет нужной учётной записиЖурнал показывает 217/USER либо getent не находит записьПроверить существование пользователя, а не менять User на root
Недоступны каталоги/файлыОшибка Permission denied или status=200/CHDIRПроверить владельца, x-бит на пути и WorkingDirectory
Нужны системные привилегииПрограмма пытается открыть защищённый порт или устройствоОпределить минимально необходимые права по документации

#Пошаговая диагностика и исправление

  1. Шаг 1. Определите пользователя службыВ systemctl show смотрите User, Group, WorkingDirectory и ExecStart. Запишите их, прежде чем менять что-либо; доступ к файлам определяется всеми компонентами пути.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; systemctl show "$UNIT" -p User -p Group -p WorkingDirectory -p ExecStart
  1. Шаг 2. Проверьте наличие записи пользователяЗамените имя на User= из предыдущей команды. getent passwd показывает домашний каталог и оболочку; /usr/sbin/nologin допустима для технического аккаунта и сама по себе не мешает systemd.
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    getent passwd имя_пользователя; id имя_пользователя
  1. Шаг 3. Найдите точное сообщение отказаОтличите 217/USER, 200/CHDIR, 203/EXEC и Permission denied. Эти коды означают разные проблемы. Не лечите их общей заменой прав.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; journalctl -b -u "$UNIT" -n 90 --no-pager
  1. Шаг 4. Посмотрите права каждого компонента путиПодставьте настоящий каталог приложения. namei -l выводит владельцев и права каталога на каждом уровне; отсутствие x у нужной группы мешает проходу.
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    namei -l /srv/приложение/рабочий-каталог
    stat -c '%A %U:%G %n' /srv/приложение/рабочий-каталог
  1. Шаг 5. Проверьте чтение только от нужной учётной записиПри необходимости запустите безопасную проверку доступа, не сам демон с повышенными привилегиями. Команда проверяет только доступность каталога, а не право изменять файлы. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)КомандаНужен sudo
    Терминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    sudo -u имя_пользователя test -r /srv/приложение/рабочий-каталог && echo 'каталог доступен для чтения'
  1. Шаг 6. Исправьте единственный недоступный путь и перезапуститеМеняйте права через владельца ресурса или настройку группы, а не chmod -R 777. После согласованных адресных правок проверьте unit и перезапустите одну службу. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; sudo systemctl restart "$UNIT"
    systemctl status "$UNIT" --no-pager

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

#Как проверить, что проблема действительно устранена

Успех: процесс запускается под отдельной учётной записью и выполняет назначенную операцию без отказов. Для восстановления возвращайте конкретные права из сохранённого stat, а не переводите весь сервис под root.

#Если результат не получен

Вернитесь к самому раннему отличающемуся результату диагностики и проверьте точный текст ошибки, текущую загрузку и фактическую версию программы. Не повторяйте опасную команду с другими правами наугад. Если это рабочий сервер, передайте администратору обезличенные отрывки журнала за момент сбоя и уже выполненные действия.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.