Rocky Linux Rocky Linux

Rocky Linux: служба работает от root, но не от отдельного пользователя

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

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

Служба запускается от root, но завершается ошибкой при переходе на отдельного пользователя. Нельзя решать это отключением SELinux или chmod 777 на всё приложение.

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

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

Служба запускается от root, но завершается ошибкой при переходе на отдельного пользователя. Нельзя решать это отключением SELinux или chmod 777 на всё приложение. Rocky Linux с системной службой systemd и User=; используйте отдельную системную учётную запись с наименьшими правами.

#Основные причины: как отличить одну от другой

Возможная причинаКак узнатьЧто делать
Нет доступа к файламДанные или каталоги принадлежат rootnamei, журнал содержат Permission deniedТочечно назначить владельца рабочих каталогов
Недостаточны привилегии порта/устройстваПроцесс требует privileged port или системный сокетВ журнале bind: permission deniedИспользовать socket activation/capabilities при подтверждённой нужде
Неподходящая домашняя/рабочая папкаUser= задан, но WorkingDirectory закрытstatus=200/CHDIR или 217/USERИсправить unit и существование учётной записи

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

  1. Шаг 1. Сравните рабочую и нерабочую конфигурацииВ терминале администратора найдите имя unit. Перед изменениями сохраните вывод systemctl cat. Не редактируйте файлы из /usr/lib/systemd/system напрямую: обновления RPM их заменят.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    UNIT="имя.service"
    systemctl cat "$UNIT"
    systemctl show "$UNIT" -p User -p Group -p WorkingDirectory -p ExecStart
  1. Шаг 2. Проверьте, существует ли назначенный пользовательИмя пользователя перепишите из User=. getent должен вернуть запись с UID, GID и домашним каталогом. Если не возвращает — сначала восстановите учётную запись по инструкциям поставщика приложения, не создавая её произвольным UID.
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    getent passwd имя_пользователя
    id имя_пользователя
  1. Шаг 3. Проверьте журнал именно после попытки запускаОсобенно важны коды 217/USER, 200/CHDIR, Permission denied и Cannot bind. От этих признаков зависит следующий шаг. Для удобства временно воспроизведите сбой в разрешённое окно, чтобы видеть новые сообщения.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    UNIT="имя.service"
    systemctl status "$UNIT" --no-pager
    journalctl -b -u "$UNIT" --no-pager -n 100
  1. Шаг 4. Проверьте доступ к рабочему каталогу и исполняемому файлуУзнайте путь из WorkingDirectory и ExecStart, затем проверьте права всех промежуточных папок через namei -l. Если исполняемая программа в /usr/bin, не меняйте её владельца ради отдельного пользователя.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    WORK="/srv/приложение"
    namei -l "$WORK"
    ls -ldZ "$WORK"
  1. Шаг 5. Если обычные права подходят, проверьте SELinuxВ Rocky Linux SELinux часто работает в Enforcing. Найдите именно связанный по времени AVC, прежде чем менять метку. restorecon -n показывает предполагаемые исправления и не изменяет файлов. Не используйте setenforce 0 для постоянного решения.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)КомандаНужен sudo
    Терминал Rocky Linux; нужны административные права. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    getenforce
    command -v ausearch && sudo ausearch -m AVC,USER_AVC -ts recent | tail -40 || true
    sudo restorecon -n -v /srv/приложение
  1. Шаг 6. Определите минимум изменений в systemdДля каталога состояния предпочтите RuntimeDirectory, StateDirectory или LogsDirectory: systemd может создавать их с согласованным владельцем. Введите фактическое имя unit и откройте drop-in; не используйте глобальный запуск как root для обхода ошибки.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Rocky Linux; нужны административные права. Меняет настройки/состояние службы: сначала копия и возможность отката.
    sudo systemctl edit имя.service

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

  1. Шаг 7. Перезапустите только проверенную службуПеред перезапуском обеспечьте возможность восстановления и при необходимости сохраните прежнюю конфигурацию. Проверьте, что после старта PID использует нужного пользователя и выполняет прикладную задачу, а не просто остаётся active.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Rocky Linux; нужны административные права. Меняет настройки/состояние службы: сначала копия и возможность отката.
    sudo systemctl daemon-reload
    sudo systemctl restart имя.service
    systemctl status имя.service --no-pager
    ps -eo user,pid,comm | grep имя_процесса

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

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

Служба работает от требуемой учётной записи, отвечает на штатный запрос и не выдаёт новые отказы файловых прав или SELinux; права root не нужны.

#Если предложенный способ не сработал

Если код 217/USER или 200/CHDIR остаётся, проверьте конкретную запись пользователя и путь, отмените неработающий drop-in и соберите журнал. Для портов <1024 используйте отдельный разбор capabilities или socket activation.

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

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

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