#Когда возникает проблема и к каким системам относится
Пользовательская служба не может открыть файл или каталог, в журнале Permission denied. Разбираются права на путь, режим пользовательского manager и SELinux, а не глобальное отключение защиты. Rocky Linux с пользовательским systemd (systemctl --user); единица запускается от собственного UID, не является системной службой root.
#Основные причины: как отличить одну от другой
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Права в цепочке каталоговНедостаточно x на одном из родительских каталогов | namei показывает недоступный компонент пути | Уточнить владельца и точечно исправить путь |
| SELinux запрещает доступОбычные права допускают, но AVC фиксирует отказ | ausearch или журнал показывает denied и контекст | Исправить назначение и метку согласно политике |
| Ограничения unit sandboxProtectHome или ReadOnlyPaths скрывают рабочие каталоги | systemctl --user cat показывает ограничения | Согласовать доступ только требуемому каталогу |
#Пошаговая диагностика и устранение неисправности
- Шаг 1. Уточните имя и владельца пользовательской службыВ терминале того же пользователя, под которым ожидается работа сервиса, установите UNIT. Не используйте sudo systemctl --user: он обратится не к той пользовательской сессии. При ошибке Failed to connect to bus убедитесь, что вход выполнен от нужного пользователя с работающим пользовательским manager.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
UNIT="имя.service"idsystemctl --user status "$UNIT" --no-pager
- Шаг 2. Сохраните точное сообщение отказаПоищите в журнале не только Permission denied, но и исполняемый путь, UID, фазу запуска. Если журнал пустой, уточните время и повторите попытку в той же пользовательской сессии — ошибка может относиться к системной службе с параметром User=.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
UNIT="имя.service"journalctl --user -b -u "$UNIT" --no-pager -n 90
- Шаг 3. Найдите полный путь, который процессу не разрешёнИз сообщения ошибки скопируйте реальный путь, не используйте демонстрационный буквально. namei -l показывает права на каждый компонент; для каталога необходимо разрешение поиска (x) по всей цепочке. Наличие r на конечном файле недостаточно.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
FILE="/home/пользователь/путь/файл"namei -l "$FILE"ls -ld "$(dirname "$FILE")"
- Шаг 4. Проверьте защитные параметры самого unitОткройте фактический unit и drop-in, сравните User, WorkingDirectory, ProtectHome, ReadWritePaths. Параметры sandbox могут ограничивать доступ независимо от файловых прав. Не отключайте все параметры защиты для одного файла.Linux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
UNIT="имя.service"systemctl --user cat "$UNIT"systemctl --user show "$UNIT" -p WorkingDirectory -p ProtectHome -p ReadWritePaths
- Шаг 5. Проверьте SELinux без его отключенияgetenforce показывает Enforcing/Permissive/Disabled. Если он активен и есть доказанный отказ, изучите AVC через установленный audit; на минимальном образе ausearch может отсутствовать. Не применяйте audit2allow автоматически: сначала проверьте правильность контекста и расположения данных.Linux · Терминал (Bash)КомандаНужен sudoТерминал Rocky Linux; нужны административные права. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
getenforcels -Z "$HOME"command -v ausearch && sudo ausearch -m AVC,USER_AVC -ts recent | tail -40 || true
- Шаг 6. Исправляйте только установленную причинуЕсли каталог принадлежит неправильному пользователю после переноса, согласуйте исправление владельца конкретного файла с администратором и сохраните его права. Для неверно размеченного стандартного пути сначала получите сухой список изменений меток; никаких chmod -R 777 по HOME.
- Терминал Rocky Linux; нужны административные праваLinux · Терминал (Bash)КомандаНужен sudoТерминал Rocky Linux; нужны административные права. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
FILE="/home/пользователь/путь/файл"ls -lZ "$FILE"sudo restorecon -n -v "$FILE"
- Шаг 7. Проверьте запуск в том же сеансеПосле точечной правки вернитесь в исходную пользовательскую сессию, запустите лишь эту единицу и проверьте состояние и журнал. Если причина не ушла, отмените только внесённое изменение и приложите AVC/путь к отчёту.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
UNIT="имя.service"systemctl --user restart "$UNIT"systemctl --user status "$UNIT" --no-pagerjournalctl --user -u "$UNIT" --no-pager -n 30
#Как убедиться, что неисправность устранена
Пользовательский unit успешно выполняет целевую операцию с файлом, в журнале нет нового Permission denied или AVC; ранее установленная защита остаётся включённой.
#Если предложенный способ не сработал
При отсутствии подтверждённой причины не расширяйте права: сообщите специалисту полный путь, вывод namei -l, unit и AVC, исключив конфиденциальные данные.