Настройка сервера rsyncd для backup-ов

21.12.2019

Теги: LinuxКонфигурацияНастройкаСерверУстановка

Представим себе такую ситуацию. В сети есть несколько компьютеров пользователей и один сервер, на который надо регулярно выполнять backup пользовательских файлов. Инициатором резервного копирования будет выступать сервер — с некоторой периодичностью он будет обращаться к компьютерам сети и копировать себе содержимое домашних директорий пользователей. Для этого потребуется настроить и запустить rsync-сервер на компьютере каждого пользователя.

Кроме того, мы хотим, чтобы каждый пользователь мог сам выполнить резервное копирование своих файлов. Это уже опционально, но пусть будет для полноты картины. Для этого нам потребуется настроить и запустить rsync-сервер на backup-компьютере.

Итак, список задач:

  • настроить и запустить службу rsyncd на компьютере Иванова — ip-адрес 192.168.110.2
  • настроить и запустить службу rsyncd на компьютере Петрова — ip-адрес 192.168.110.3
  • настроить и запустить службу rsyncd на backup-компьютере — ip-адрес 192.168.110.100

Чтобы rsync мог быть запущен как демон, необходимо создать файл конфигурации rsyncd.conf. Формат этого файла достаточно прост и идентичен ini-файлам. В нём описываются «глобальные» параметры, контролирующие поведение демона в целом, а также «модули», описывающие доступ к конкретным каталогам файловой системы.

Все параметры в начале файла (до первого заголовка [модуль]) являются общими параметрами. Также есть возможность помещать любые параметры, специфичные для модулей, в общую часть конфигурационного файла — чтобы заменить значение по умолчанию для опции указанным значением.

Файл rsyncd.conf на компьютере backup

В этом файле конфигурации будет несколько модулей — по количеству пользователей:

# Глобальные параметры, отвечающие за поведение демона в целом
pid file = /var/run/rsyncd.pid
# Пользователь, от имени которого ведется работа с файлами
uid = backups
gid = backups
# Удаленная система может записывать файлы на этот сервер
read only = no

[ivanov-backup-dir]
comment = Ivanov's backup directory on server
# Путь к директории для копирования файлов
path = /backups/ivanov
# К этому модулю можно обращаться только с компьютера Иванова
hosts allow = 192.168.110.2
hosts deny = *

[petrov-backup-dir]
comment = Petrov's backup directory on server
# Путь к директории для копирования файлов
path = /backups/petrov
# К этому модулю можно обращаться только с компьютера Петрова
hosts allow = 192.168.110.3
hosts deny = *

Запустим службу, добавим ее в автозагрузку и посмотрим, какие модули теперь доступны на backup-сервере:

$ sudo systemctl start rsync
$ sudo systemctl enable rsync
$ rsync rsync://localhost
ivanov-backup-dir    Ivanov's backup directory on server
petrov-backup-dir    Petrov's backup directory on server

Можно упростить команду просмотра модулей:

$ rsync localhost::
ivanov-backup-dir    Ivanov's backup directory on server
petrov-backup-dir    Petrov's backup directory on server

Нужно еще создать директории /backups/ivanov и /backups/petrov + создать пользователя backups:

$ sudo su
# mkdir /backups
# mkdir /backups/ivanov
# mkdir /backups/petrov
# useradd -m -s /bin/bash backups
# chown backups:backups /backups
# chown backups:backups /backups/ivanov
# chown backups:backups /backups/petrov
# exit

Файл rsyncd.conf на компьютерах пользователей

Файлы конфигурации на компьютерах пользователей будут иметь только один модуль, связанный с домашней директорий.

Создаем файл rsyncd.conf на компьютере Иванова, ip-адрес 192.168.110.2:

$ sudo nano /etc/rsyncd.conf
# Глобальные параметры, отвечающие за поведение демона в целом
pid file = /var/run/rsyncd.pid
# Пользователь, от имени которого ведется работа с файлами
uid = ivanov
gid = ivanov
# К этому серверу можно обращаться только с backup-компьютера
hosts allow = 192.168.110.100
hosts deny = *
# Удаленная система может записывать файлы на этот сервер
read only = no

[ivanov-home-dir]
comment = Home directory on Ivanov's computer
# Путь к директории для копирования файлов
path = /home/ivanov

Запустим службу rsyncd и убедимся, что модуль ivanov-home-dir теперь доступен:

$ sudo systemctl start rsync
$ sudo systemctl enable rsync
$ rsync localhost::
ivanov-home-dir    Home directory on Ivanov's computer

Создаем файл rsyncd.conf на компьютере Петрова, ip-адрес 192.168.110.3:

$ sudo nano /etc/rsyncd.conf
# Глобальные параметры, отвечающие за поведение демона в целом
pid file = /var/run/rsyncd.pid
# Пользователь, от имени которого ведется работа с файлами
uid = petrov
gid = petrov
# К этому серверу можно обращаться только с backup-компьютера
hosts allow = 192.168.110.100
hosts deny = *
# Удаленная система может записывать файлы на этот сервер
read only = no

[petrov-home-dir]
comment = Home directory on Petrov's computer
# Путь к директории для копирования файлов
path = /home/petrov

Запустим службу rsyncd и убедимся, что модуль petrov-home-dir теперь доступен:

$ sudo systemctl start rsync
$ sudo systemctl enable rsync
$ rsync localhost::
petrov-home-dir    Home directory on Petrov's computer

Операции push (закачать) и pull (скачать)

Теперь пользователь Иванов со своего компьютера может создать резервную копию (закачать свои файлы на backup-сервер):

$ rsync -av /home/ivanov 192.168.110.100::ivanov-backup-dir  # push-операция

Разумеется, ему доступна и обратная операция — восстановление из резервной копии (скачать свои файлы с backup-сервера):

$ rsync -av 192.168.110.100::ivanov-backup-dir /home/ivanov  # pull-операция

С другой стороны, системный администратор, работая на backup-компьютере, может создать резервную копию файлов Иванова:

$ rsync -av 192.168.110.2::ivanov-home-dir /backups/ivanov  # pull-операция

Системный администратор с backup-компьютера может выполнить и обратную операцию — восстановить файлы Иванова:

$ rsync -av /backups/ivanov/ 192.168.110.2::ivanov-home-dir  # push-операция
Обратите внимание, что при работе на backup-компьютере запускать rsync надо от имени пользователя backups, потому что только у него есть необходимые права на директории /backups/ivanov и /backups/petrov.

И ничто не мешает системному администратору автоматизировать рутинную операцию ежедневного резервного копирования домашних директорий всех пользователей. Аналогично могут поступить и пользователи Иванов и Петров (но полагаться на это не стоит).

Использование паролей

По умолчанию все rsync-клиенты могут подключаться к rsync-серверу без пароля — это так называемый «анонимный rsync». Параметр auth users в файле rsyncd.conf задает список имен пользователей, которым разрешено подключаться к этому модулю. Эти пользователи не являются системными пользователями, это просто способ распознавания «свой-чужой» между rsync-клиентом и rsync-сервером.

Если параметр auth users установлен, то rsync-клиент будет запрошен на предмет предоставления имени пользователя и пароля при подключении к этому модулю. Имена пользователей, которым разрешено подключаться и их пароли сохраняются в файле, имя которого задается в параметре secrets file. Этот файл по-строковый и содержит пары имя пользователя и пароль, разделенные двоеточием.

Параметр strict modes определяет, будут ли проверяться права доступа к файлу с паролями. Если strict modes установлен в yes или true, то файл паролей не должен читаться любым пользователем с id, отличным от того, из-под которого запущен rsync-сервер. Если он установлен в no или false, то такая проверка не производится. По умолчанию параметр имеет значение yes.

Пароль на компьютерах пользователей

Устанавливаем пароль для доступа к rsync-серверу на компьютере Иванова:

$ sudo nano /etc/rsyncd.conf
# Глобальные параметры, отвечающие за поведение демона в целом
pid file = /var/run/rsyncd.pid
# Пользователь, от имени которого ведется работа с файлами
uid = ivanov
gid = ivanov
# К этому модулю можно обращаться только с backup-компьютера
hosts allow = 192.168.110.100
hosts deny = *
# Удаленная система может записывать файлы на этот сервер
read only = no
# При подключении к этому серверу требуется логин и пароль
auth users = admin
# В этом файле — логины и пароли для подключения к серверу
secrets file = /etc/rsyncd.secrets

[ivanov-home-dir]
comment = Home directory on Ivanov's computer
# Путь к директории для копирования файлов
path = /home/ivanov

Логин и пароль будут в файле /etc/rsyncd.secrets:

$ sudo nano /etc/rsyncd.secrets
admin:qwerty

Обязательно выставляем права на этот файл:

$ sudo chmod 600 /etc/rsyncd.secrets

На компьютере Петрова проделываем аналогичные операции — устанавливаем логин и пароль admin и qwerty. Конечно, можно для каждого компьютера пользователя установить свою пару логин-пароль, но это будет слишком уж сложно. Потому что для каждого пользователя на backup-компьютере придется создавать свой файл пароля, см. ниже.

Теперь, когда администратор с backup-компьютера от имени пользователя backups будет копировать файлы с компьютера Иванова, ему нужно указать имя пользователя admin и пароль qwerty:

$ rsync --archive admin@192.168.110.2::ivanov-home-dir /backups/ivanov  # pull-операция
Password: qwerty
$ rsync --archive /backups/ivanov/ admin@192.168.110.2::ivanov-home-dir  # push-операция
Password: qwerty

Безопасность мы повысили, но теперь администратор не сможет автоматизировать процесс резервного копирования, потому что rsync-серверы на компьютерах пользователей запрашивают пароль. Однако, на этот случай у rsync есть опция --password-file. Давайте на backup-компьютере от имени пользователя backups в его домашней директории создадим файл:

$ nano ~/.user-rsyncd.password
qwerty

Обязательно выставляем права на этот файл:

$ sudo chmod 600 ~/.user-rsyncd.password

Теперь администратор может с backup-компьютера от имени пользователя backups копировать файлы с компьютера Иванова без ввода пароля:

$ rsync --archive --password-file=/home/backups/.user-rsyncd.password \
> admin@192.168.110.3::ivanov-home-dir /backups/ivanov  # pull-операция
$ rsync --archive --password-file=/home/backups/.user-rsyncd.password \
> /backups/ivanov/ admin@192.168.110.3::ivanov-home-dir  # push-операция
Если бы мы для каждого rsync-сервера на каждом компьютере пользователя создали свою пару логин-пароль, нам бы пришлось на backup-компьютере в домашней директории пользователя backups создать файлы .ivanov-rsyncd.password и .petrov-rsyncd.password.

Пароль на компьютерe backup

Устанавливаем пароль для доступа к rsync-серверу на backup-компьютере:

$ sudo nano /etc/rsyncd.config
# Глобальные параметры, отвечающие за поведение демона в целом
pid file = /var/run/rsyncd.pid
# Пользователь, от имени которого ведется работа с файлами
uid = backups
gid = backups
# Удаленная система может загружать файлы на этот сервер
read only = no
# При подключении к этому серверу требуется логин и пароль
auth users = user
# В этом файле — логины и пароли для подключения к серверу
secrets file = /etc/rsyncd.secrets

[ivanov-backup-dir]
comment = Ivanov's backup directory on server
# Путь к директории для копирования файлов
path = /backups/ivanov
# К модулю можно подключаться только с компьютера Иванова
hosts allow = 192.168.110.2
hosts deny = *

[petrov-backup-dir]
comment = Petrov's backup directory on server
# Путь к директории для копирования файлов
path = /backups/petrov
# К модулю можно подключаться только с компьютера Петрова
hosts allow = 192.168.110.3
hosts deny = *

Логин и пароль будут в файле /etc/rsyncd.secrets:

$ sudo nano /etc/rsyncd.secrets
user:123456

Обязательно выставляем права на этот файл:

$ sudo chmod 600 /etc/rsyncd.secrets

Теперь Иванов при копировании своих файлов на backup-компьютер должен указывать имя пользователя user и пароль 123456:

$ rsync --archive /home/ivanov/ user@192.168.110.100::ivanov-backup-dir  # push-операция
Password: 123456
$ rsync --archive user@192.168.110.100::ivanov-backup-dir /home/ivanov  # pull-операция
Password: 123456

Чтобы не вводить пароль, Иванов в своей домашней директории должен создать файл .user-rsyncd.password:

$ nano ~/.user-rsyncd.password
123456

И обязательно выставить права на этот файл:

$ sudo chmod 600 ~/.user-rsyncd.password

Теперь Иванов может копировать свои файлы на backup-компьютер без ввода пароля:

$ rsync --archive --password-file=/home/ivanov/.user-rsyncd.password \
> /home/ivanov/ user@192.168.110.100::ivanov-backup-dir  # push-операция
$ rsync --archive --password-file=/home/ivanov/.user-rsyncd.password \
> user@192.168.110.100::ivanov-backup-dir /home/ivanov  # pull-операция
По поводу терминов «сервер» и «клиент». Когда с компьютера Иванова производится копирование файлов на backup-компьютер — компьютер Иванова выступает в роли rsync-клиента, а backup-компьютер — в роли rsync-сервера. С другой стороны, когда копирование файлов на компьютер Иванова производится с backup-компьютера — уже компьютер Иванова выступает в роли rsync-сервера, а backup-компьютер — в роли rsync-клиента.

Поиск: Linux • Настройка • Сервер • Установка • rsync • server • backup • Резервное копирование

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.