#Симптом и границы применимости
Журнал user-unit в Arch Linux сообщает Permission denied или EACCES. Причина может быть в доступе к исполняемому файлу, родительскому каталогу, переменной окружения, системном сокете или файлу с данными; права всей домашней папки менять нельзя.
#Возможные причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет доступа к родительскому каталогуДля открытия файла требуются права прохода x на каждом каталоге. | namei -l отмечает участок без x у пользователя. | Исправить только конкретный каталог при согласовании владельца. |
| Неверный пользовательский unitСлужба работает под user manager, но путь или данные принадлежат root. | В журнале Permission denied у файла в /var/lib или /run. | Разместить пользовательские данные в доступном каталоге или назначить ACL. |
| Запрет со стороны sandbox systemdProtectHome, ReadWritePaths, PrivateTmp меняют доступность ресурсов внутри службы. | Обычный cat работает, unit не видит путь. | Проверить параметры sandbox до изменения файловых прав. |
#Подробная диагностика и безопасные действия
- 1. Убедитесь, что это именно пользовательская службаПод обычной учётной записью, которая владеет службой, запустите команды с --user. При ошибке Failed to connect to bus проверьте, что вы вошли через действующий пользовательский сеанс, а не применяйте sudo к пользовательскому unit.
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
systemctl --user status ИМЯ.service --no-pagersystemctl --user is-enabled ИМЯ.service
- 2. Найдите строку отказа в журналеСмотрите последние записи только этого пользователя; укажите конкретный путь, который программа не смогла открыть, и код ошибки. Если отказа не видно, включите прикладной журнал программы, не меняя права наугад.
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
journalctl --user -u ИМЯ.service -b --no-pager -n 100
- 3. Выясните, от кого и как запускается процессПрочитайте полный пользовательский unit: ExecStart, WorkingDirectory, EnvironmentFile и параметры защиты. Для user unit обычно User= не требуется, так как его уже запускает пользовательский менеджер.
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
systemctl --user cat ИМЯ.servicesystemctl --user show ИМЯ.service -p User -p ExecStart -p WorkingDirectory -p ProtectHome
- 4. Проверьте проблемный файл по всей цепочкеПуть замените на точный путь из ошибки; namei показывает права родительских каталогов, stat — владельца и маску. Если ошибок нет, возможно, файл исчезает до запуска или доступ ограничен средствами sandbox.Linux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
namei -l /ПУТЬ/К/ФАЙЛУstat -c "%U:%G %a %n" /ПУТЬ/К/ФАЙЛУ
- 5. Сверьте наличие доступа именно у нужного пользователяВ пользовательской сессии команда test -r сообщает 0 при чтении файла; для каталогов отдельно нужен x. Если данные в /var/lib системной службы, не открывайте их всему миру. Уточните необходимость доступа и согласуйте настройку ACL или групп.Linux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
test -r /ПУТЬ/К/ФАЙЛУ; printf "read_exit=%s\n" "$?"id
- 6. Исправьте только проверенную пользовательскую настройкуЕсли ошибка вызвана неверным WorkingDirectory или EnvironmentFile, отредактируйте свою копию unit через systemctl --user edit; после изменения сделайте daemon-reload. Отсутствующий файл создавайте только по документации приложения и с правильными правами, а не как пустую заглушку.Linux · Терминал (Bash)С осторожностьюИзменение только своего пользовательского unit; сохранить исходный вариант для отката.
systemctl --user edit ИМЯ.servicesystemctl --user daemon-reloadsystemctl --user cat ИМЯ.serviceКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 7. Перезапустите и проверьте журналПовторный запуск проводите после исправления точного пути. Убедитесь не только в active, но и в том, что приложение читает данные; если ошибки остаются — верните изменение и соберите описание пути, ACL и защитных свойств unit.
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)С осторожностьюДиагностическая команда в терминале Arch Linux, без изменения настроек.
systemctl --user restart ИМЯ.servicesystemctl --user status ИМЯ.service --no-pagerjournalctl --user -u ИМЯ.service -b --no-pager -n 40Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как понять, что проблема устранена
Повторите исходное действие, из-за которого возникла неисправность, и сверяйте не только код завершения команды, но и прикладной результат. Сохраните вывод последней диагностической команды и записи журнала до и после исправления. Если ошибка повторяется, верните только изменённую настройку из резервной копии и передайте специалисту точный симптом, имя программы/службы, версию системы и необходимые фрагменты журнала без паролей и закрытых ключей.
#Что делать, если не помогло
Не применяйте случайные советы для другого дистрибутива: в Arch Linux особенно опасны частичные обновления пакетов, а в Rocky Linux — отключение SELinux или неконтролируемый перезапуск системных служб. Остановитесь после неуспешного безопасного шага, зафиксируйте фактическое сообщение и вернитесь к соответствующей причине. Для загрузки, разделов диска и единственного удалённого подключения используйте резервную копию и локальную консоль.