Вопрос или проблема
Я нахожусь на Ubuntu 20.04 Desktop и создаю резервную копию удаленного сервера Ubuntu 20.04 клиента, используя следующую базовую настройку:
В /etc/sudoers
non-root-username ALL= NOPASSWD:/usr/bin/rsync
Из терминала Desktop я выполняю:
rsync -a -e "ssh -i /path/to/id_rsa" --rsync-path="sudo rsync" [email protected]::data /local/path
На удаленном сервере клиента у меня есть следующее в /etc/rsyncd.conf
:
root@admin:~# cat /etc/rsyncd.conf
# Глобальная конфигурация сервиса rsync
pid file = /var/run/rsyncd.pid
hosts allow = 123.123.123.123
log file = /var/log/rsync.log
# Имя пользователя и группа для работы с резервными копиями
uid = non-root-username
gid = non-root-username
# Не разрешать изменять исходные файлы
read only = yes
# Информация о источнике данных
[data]
use chroot = false
strict modes = false
path = /backups
list = yes
auth users = non-root-username
secrets file = /etc/rsyncd.passwd
В моем файле /etc/rsyncd.passwd
у меня есть:
root@admin:~# cat /etc/rsyncd.passwd
non-root-username:password
У меня есть такие разрешения для /etc/rsyncd.conf
:
root@admin:~# stat /etc/rsyncd.conf
Файл: /etc/rsyncd.conf
Размер: 471 Блоков: 8 Блок ввода-вывода: 4096 обычный файл
Устройство: fd00h/64768d Иной: 144028 Ссылок: 1
Доступ: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 1001/non-root-username)
Доступ: 2022-05-21 13:38:46.797769245 +0800
Изменить: 2022-05-21 13:38:42.641735637 +0800
Изменить: 2022-05-21 13:55:52.384894170 +0800
И у меня есть такие разрешения для /etc/rsyncd.passwd
:
root@admin:~# stat /etc/rsyncd.passwd
Файл: /etc/rsyncd.passwd
Размер: 31 Блоков: 8 Блок ввода-вывода: 4096 обычный файл
Устройство: fd00h/64768d Иной: 144040 Ссылок: 1
Доступ: (0640/-rwxrwxr-x) Uid: ( 0/ root) Gid: ( 1001/non-root-username)
Доступ: 2022-05-21 13:38:06.989448597 +0800
Изменить: 2022-05-21 13:37:37.473212811 +0800
Изменить: 2022-05-21 13:37:37.473212811 +0800
Но независимо от того, какую комбинацию UID / GID и разрешений я пробую, я всегда получаю одну и ту же ошибку:
Ubuntu 20.04.4 LTS <-- показывает, что успешно подключается, но не может аутентифицироваться
@ERROR: доступ запрещен к данным от UNKNOWN (0.0.0.0)
rsync error: ошибка запуска клиент-серверного протокола (код 5) в main.c(1675) [Receiver=3.1.3]
Я прочитал страницы мануала rsync и попробовал их советы по устранению неполадок… Я не вижу, что я упускаю…
Какие-либо предложения?
Я вернулся к основам и разобрался. Основная проблема заключалась в том, что hosts allow = 123.123.123.123
блокировал мой собственный IP (да, я проверял IP-адрес два и три раза, функция просто кажется сломанной)
Мое окончательное решение выше выглядит так:
root@admin:~# cat /etc/rsyncd.conf
# Глобальная конфигурация сервиса rsync
pid file = /var/run/rsyncd.pid
#hosts allow = 123.123.123.123 <-- закомментировано
log file = /var/log/rsync.log
# Имя пользователя и группа для работы с резервными копиями
uid = root
gid = root
# Не разрешать изменять исходные файлы
read only = yes
# Информация о источнике данных
[data]
use chroot = false
#strict modes = false <-- (по умолчанию true)
path = /backups
list = yes
auth users = non-root-username
secrets file = /etc/rsyncd.passwd
В моем файле /etc/rsyncd.passwd у меня есть:
root@admin:~# cat /etc/rsyncd.passwd
non-root-username:password
У меня есть такие разрешения для /etc/rsyncd.conf:
root@admin:~# stat /etc/rsyncd.conf
Файл: /etc/rsyncd.conf
Размер: 471 Блоков: 8 Блок ввода-вывода: 4096 обычный файл
Устройство: fd00h/64768d Иной: 144028 Ссылок: 1
Доступ: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 1001/root)
Доступ: 2022-05-21 13:38:46.797769245 +0800
Изменить: 2022-05-21 13:38:42.641735637 +0800
Изменить: 2022-05-21 13:55:52.384894170 +0800
И у меня есть такие разрешения для /etc/rsyncd.passwd
:
root@admin:~# stat /etc/rsyncd.passwd
Файл: /etc/rsyncd.passwd
Размер: 31 Блоков: 8 Блок ввода-вывода: 4096 обычный файл
Устройство: fd00h/64768d Иной: 144040 Ссылок: 1
Доступ: (0640/-rwxrwxr-x) Uid: ( 0/ root) Gid: ( 1001/root)
Доступ: 2022-05-21 13:38:06.989448597 +0800
Изменить: 2022-05-21 13:37:37.473212811 +0800
Изменить: 2022-05-21 13:37:37.473212811 +0800
Окончательная команда для резервного копирования с локального сервера резервного копирования:
rsync -a -e "ssh -i /path/to/id_rsa" --rsync-path="sudo rsync" [email protected]::data /local/path
Ответ или решение
Решение ошибки rsync Daemon для пользователя без прав root на Ubuntu
Ошибка, которую вы столкнулись при использовании rsync, указывает на проблемы с аутентификацией и разрешениями при подключении к удалённому серверу rsync. Давайте подробно рассмотрим вашу конфигурацию и шаги, которые вы предприняли для решения проблемы, а также предложим оптимизированное и корректное решение.
Описание проблемы
Вы использовали следующую команду для его выполнения:
rsync -a -e "ssh -i /path/to/id_rsa" --rsync-path="sudo rsync" [email protected]::data /local/path
Согласно сообщению об ошибке:
@ERROR: access denied to data from UNKNOWN (0.0.0.0)
rsync error: error starting client-server protocol (code 5) at main.c(1675) [Receiver=3.1.3]
Это сообщение указывает на то, что удалённый сервер rsync не позволяет доступ к модулю data
. Причина скорее всего связана с настройками в конфигурации сервера rsync, включая неправильные IP-адреса и разрешения пользователя.
Анализ вашей конфигурации
Конфигурация rsyncd.conf
Ваш файл /etc/rsyncd.conf
выглядит следующим образом:
pid file = /var/run/rsyncd.pid
hosts allow = 123.123.123.123
log file = /var/log/rsync.log
uid = non-root-username
gid = non-root-username
read only = yes
[data]
use chroot = false
strict modes = false
path = /backups
list = yes
auth users = non-root-username
secrets file = /etc/rsyncd.passwd
Проблемы:
- hosts allow: Убедитесь, что ваш IP-адрес добавлен в список разрешённых. Если вы находитесь за NAT или если у вас динамический IP, это может быть причиной доступа.
- UID и GID: Нет необходимости ограничивать
uid
иgid
до статических пользователей. Разумнее использоватьroot
, чтобы избежать проблем с правами доступа, если rsync запущен как демон. - strict modes: Вы отключили строгие режимы — это может привести к дополнительным проблемам с безопасностью.
Файл паролей
Ваш файл /etc/rsyncd.passwd
выглядит нормально, однако обратите внимание на разрешения:
Access: (0640/-rwxrwxr-x) Uid: ( 0/ root) Gid: ( 1001/non-root-username)
Разрешения файлы должны быть ограничены:
- Для
/etc/rsyncd.passwd
рекомендуется использовать разрешения0600
для повышения безопасности.
Рекомендации для исправления конфигурации
- Обновите файл
/etc/rsyncd.conf
:
pid file = /var/run/rsyncd.pid
# hosts allow = 123.123.123.123 # закомментируйте или добавьте свой IP
log file = /var/log/rsync.log
uid = root
gid = root
read only = yes
[data]
use chroot = false
strict modes = false
path = /backups
list = yes
auth users = non-root-username
secrets file = /etc/rsyncd.passwd
- Проверьте файл паролей:
Убедитесь, что файл /etc/rsyncd.passwd
имеет правильные разрешения, используя команду:
chmod 600 /etc/rsyncd.passwd
- Перезапустите демон rsync:
После внесения изменений в конфигурацию вам нужно перезапустить демон, чтобы изменения вступили в силу.
sudo systemctl restart rsync
Заключение
После выполнения вышеуказанных шагов попробуйте снова выполнить команду rsync
. Убедитесь, что ваш IP-адрес включён в список hosts allow
, если вы всё еще его используете. Если подключение пройдёт успешно, ошибка не должна больше возникать.
Используйте эти руководства для устранения дальнейших проблем с rsync. Если потребуется, можно добавить дополнительные уровни логирования для диагностики в случае возникновения новых ошибок.