Служба синхронизации отдаёт отказ: путь модуля недоступен
Служба синхронизации отдаёт данные модулями с отдельными путями и правами. Отказ при обращении к модулю означает одно из трёх: путь не существует, пользователь службы к нему не имеет доступа, или ограничение каталога мешает выйти за его пределы.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Путь модуля не существует или недоступен
Служба переходит на указанного пользователя и не может открыть путь модуля.
-
Ограничение каталога мешает работе
Служба по умолчанию запирается в каталоге модуля. Символические ссылки за его пределы перестают работать.
-
Служба запущена по сокету и путает настройки
При запуске по обращению на сокет может использоваться другой набор настроек, чем при запуске службой напрямую.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Прогон службы на переднем плане: ошибки видны сразу.
sudo rsync --daemon --no-detach --config=/etc/rsyncd.conf 2>&1 | headСообщения службы об обращениях клиентов.
journalctl -u rsync -n 30 --no-pagerПрава каталога модуля.
sudo ls -ld /srv/backupРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Служба переходит на указанного пользователя и не может открыть путь модуля.
- Как проверить
-
Посмотрите описание модулей и права пути.
sudo grep -A5 "^\[" /etc/rsyncd.conf 2>/dev/null | head -20 sudo ls -ld /srv/backup 2>/dev/null
- Как исправить
- Исправьте путь и права так, чтобы указанный в описании пользователь имел доступ. Каталог при этом должен существовать до запуска службы.
- Почему происходит
- Служба по умолчанию запирается в каталоге модуля. Символические ссылки за его пределы перестают работать.
- Как проверить
-
Посмотрите настройку ограничения и ссылки внутри модуля.
sudo grep -iE "use chroot|munge symlinks" /etc/rsyncd.conf 2>/dev/null sudo find /srv/backup -maxdepth 2 -type l 2>/dev/null | head
- Как исправить
- Либо уберите ссылки за пределы каталога, либо осознанно отключите ограничение. Отключение ослабляет защиту и делать это стоит только в закрытой сети.
- Почему происходит
- При запуске по обращению на сокет может использоваться другой набор настроек, чем при запуске службой напрямую.
- Как проверить
-
Посмотрите, что именно запускает службу.
systemctl is-active rsync.service rsync.socket 2>/dev/null systemctl cat rsync.socket 2>/dev/null | grep -E "^(ListenStream|Accept)"
- Как исправить
- Выберите одну схему запуска: службой или по обращению на сокет. Держать включённым и то и другое означает два разных пути с разным поведением.
Пример вывода
Путь модуля недоступен пользователю службы. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
rsyncd[8600]: rsync: [Receiver] chdir /srv/backup failed: Permission denied (13)
rsyncd[8600]: rsync error: errors selecting input/output files, dirs (code 3) at main.c(828)
rsyncd[8600]: rsync: connection unexpectedly closed
Связанные ошибки
- status=200/CHDIR в systemd Код 200/CHDIR означает, что systemd не смог перейти в каталог из WorkingDirectory= до запуска программы. Причины и решение.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Сокет и служба включены одновременно: конфликт при загрузке При сокет-активации в автозапуск включена и служба, и сокет. Порт занимает то, что стартовало первым.
- AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
- Caddy не занимает порты 80 и 443 без прав Служба падает при открытии слушателя: нет возможности занимать привилегированные порты.
- Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
- Interactive authentication required при управлении службой systemctl требует аутентификации: обращение от непривилегированного пользователя через polkit. Как разрешить точечно.
Источники
-
rsyncd.conf(5)
Описание модулей, пользователь службы и ограничение каталога. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено модулем с каталогом, недоступным пользователю службы.