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

После изменения прав каталога сервис перестал запускаться

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

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

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

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

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

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

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

Возможная причинаКак узнатьЧто делать
Недоступен проход по родительскому каталогуnamei показывает каталог без x для владельца службыВернуть необходимое право прохода адресно
Сменился владелец данныхsystemd запускает User=app, а файлы принадлежат другому владельцуСравнить с резервной копией и вернуть владельца отдельных файлов
Действует MAC-защита или sandboxUnix-права достаточны, но журнал сообщает deniedПроверить SELinux/AppArmor/ProtectHome без отключения защиты

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

  1. Шаг 1. Проверьте, от кого запускается сервисВыпишите User, Group, DynamicUser, StateDirectory и WorkingDirectory. При DynamicUser статический chown на случайный UID не нужен и способен ухудшить работу.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; systemctl show "$UNIT" -p User -p Group -p DynamicUser -p StateDirectory -p WorkingDirectory
  1. Шаг 2. Найдите путь отказаПроверьте сообщения журнала именно после изменения прав. Сообщения EACCES, Permission denied и CHDIR требуют проверки соответствующего файла или каталога, а не всей файловой системы.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; journalctl -b -u "$UNIT" -n 80 --no-pager
  1. Шаг 3. Покажите владельцев и права по всему путиПодставьте фактический путь ошибки. namei -l помогает обнаружить родительский каталог, у которого не хватает x. Не используйте chmod -R 777.
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    namei -l /srv/приложение/data/config.json
    stat -c '%a %U:%G %n' /srv/приложение/data
  1. Шаг 4. Проверьте, что может делать пользователь сервисаЗапустите только безопасные test -r и test -x от User= службы. Примерный путь замените. Для записи используйте test -w, но не создавайте файлов в рабочей базе без необходимости. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)КомандаНужен sudo
    Терминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    sudo -u имя_пользователя test -r /srv/приложение/data/config.json && echo 'чтение доступно'
  1. Шаг 5. Сравните права с сохранённым эталономЕсли сохранился список прав из резервной копии или пакета, определите точное прежнее значение. При ACL отдельно посмотрите getfacl при наличии утилиты; chmod может скрыть или изменить ACL-маску.
    Linux · Терминал (Bash)Команда
    Терминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    getfacl -p /srv/приложение/data 2>/dev/null || echo 'getfacl не установлен или нет доступа'
  1. Шаг 6. Верните только необходимый доступИсправьте владельца/группу адресно после согласования с владельцем приложения; затем перезапустите только одну службу. Приведённая команда не меняет права автоматически, чтобы не стереть действующие ACL. Команды sudo или sudoedit выполняются с полномочиями администратора; если sudo не установлен, используйте разрешённую административную сессию.
  2. Терминал Linux на сервере/клиенте, указанном в шаге
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Linux на сервере/клиенте, указанном в шаге. Нужны права администратора; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
    UNIT='имя.service'; sudo systemctl restart "$UNIT"
    systemctl status "$UNIT" --no-pager

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

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

Сервис должен выполнять исходную операцию с конкретным файлом. Если Unix-права нормальны, проверьте защитные профили и монтирование без глобального выключения механизмов безопасности.

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

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

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

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

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