С помощью rsync server настройка бекапа Вашей информации не составит особого труда. Не нужно говорить о важности бекапов в наш электронный век. Итак, у нас есть компьютер с установленной ОС Linux CentOS 7. Превратим его в rsync server, куда будут копироваться наши данные с разных компьютеров. А в дальнейшем эти данные будут синхронизироваться между источником и сервером. Первым делом создадим пользователя, от имени которого будет запускаться и работать rsync server. При создании укажем домашнюю директорию, куда будут складываться наши бекапы. Далее подразумевается, что все команды выполняются от имени пользователя root. Если Вы пользуетесь механизмом sudoers, то перед командами добавляйте sudo.
useradd -d /var/backup -m backuper
passwd backuper
1 2 3 |
Changing password for user backuper. New password: Retype new password: |
Rsync server: установка и настройка
Теперь перейдем к установке rsync сервера, если он еще не был установлен.
yum -y install rsync
В Fedora пакет с сервером назывется rsync-daemon. Поэтому после установки проверим комплектность пакета (вывод обрезан).
rpm -ql rsync
1 2 3 4 5 6 7 |
/etc/rsyncd.conf /etc/sysconfig/rsyncd /usr/bin/rsync /usr/lib/systemd/system/rsyncd.service /usr/lib/systemd/system/rsyncd.socket /usr/lib/systemd/system/rsyncd@.service /usr/share/doc/rsync-3.1.2 |
Конфигурационный файл /etc/rsyncd.conf и скрипты запуска systemd присутствуют. Начнем настройку rsync сервера. Отредактируем вышеуказанный конфигурационный файл, как показано ниже.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
max connections = 2 pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log timeout = 300 ignore nonreadable = yes dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 [aleksey] path = /var/backup/aleksey auth users = backuper secrets file = /etc/rsyncd.pass use chroot = true uid = backuper gid = backuper read only = false write only = false hosts allow = 192.168.41.3 hosts deny = * transfer logging = false |
Думаю в общей секции все параметры предельно ясны. Дальше следует модуль aleksey. Это мое название, обусловленное тем, что сюда будут складываться бекапы пользователя aleksey. Вы можете назвать этот модуль как угодно 🙂 . Кстати, модулей может быть много, например, для каждого компьютера или пользователя в Вашей сети. Рассмотрим параметры модуля:
— path = /var/backup/aleksey — путь, куда будут копироваться файлы и папки (название опять мое по той же причине);
— auth users = backuper — наш пользователь на сервере rsync;
— secrets file = /etc/rsyncd.pass — файл содержащий пароль пользователя. Этот файл создается Вами по указанному пути и имеет формат backuper:nap0/\b. Причём этот пароль не должен быть паролем пользователя backuper, указанным при его создании. Это пароль только на rsync server на модуль aleksey. Правда, никто не запрещает и одинаковые пароли. Это вопрос в Вашем видении безопасности! Создав и вписав в файл пользователя и пароль, проверьте права и моды доступа. Файл должен принадлежать root и иметь моды чтения и записи только для владельца, иначе rsync server не запустится!
chmod 600 /etc/rsyncd.pass
chown root:root /etc/rsyncd.pass
-rw-------. 1 root root 19 Apr 17 18:06 /etc/rsyncd.pass
— use chroot = true указывает rsync выполнить chroot по пути, приведенному выше. Это полезно с точки зрения безопасности;
— параметры uid и gid указывают пользователя и группу, от имени которых ведется работа с файлами;
— параметры read only = false и write only = false разрешают удалённой системе работать с модулем в режиме чтения и записи;
— hosts allow = 192.168.41.3 и hosts deny = * разрешает работать с модулем только компьютеру с IP-адресом 192.168.41.3, остальным запрещено. Можно использовать шаблоны типа 192.168.41.0/24, а также доменные имена;
— transfer logging = false — отключает запись в лог по каждому копируемому файлу.
Далее необходимо отключить SELINUX.
vi /etc/selinux/config
Заменим enforcing на disabled в следующей строке:
1 |
SELINUX=disabled |
Чтобы не перегружать машину, выполните команду
setenforce 0. Это отключит SELINUX в реальном времени, а при следующей перезагрузке уже сработает Ваше изменение конфигурационного файла. Нам остается только добавить правило в iptables, чтобы к серверу могли коннектиться компьютеры из сети.
iptables -I INPUT 7 -m state --state NEW -p tcp --dport 873 -j ACCEPT
Цифра 7 здесь означает, что я добавляю правило 7-ой строкой. У Вас строка будет другой. Подробнее можно посмотреть здесь. Не забудьте сохранить конфигурацию iptables.
Теперь, когда конфигурация готова, запускаем rsync server.
systemctl enable rsyncd
systemctl start rsyncd
Если всё прошло успешно, следующая команда выдаст нам список доступных модулей.
rsync rsync://192.168.41.100
aleksey
где 192.168.41.100 — IP-адрес нашего rsync сервера, aleksey — имя модуля.
Установка и настройка клиентов rsync
Для начала сделаем секретный файл с паролем для клиентов rsync сервера. Пусть он называется rsync.pass (без d в конце). В этом файле прописывается только nap0/\b, который мы использовали на сервере в файле /etc/rsyncd.pass. Проверьте права доступа и моды этого файла на linux клиенте. Чтение и запись только для владельца, в моем случае это aleksey.
-rw------- 1 aleksey aleksey 10 Apr 17 19:23 rsync.pass
Теперь осталось дать команду для копирования определенных файлов и директорий на наш rsync сервер. В linux это следующая команда:
/usr/bin/rsync -au --password-file=/home/aleksey/rsync.pass /home/aleksey/Documents rsync://backuper@192.168.41.100/aleksey
У rsync множество опций, посмотреть и выбрать какие подходят Вам можно, как обычно, использовав руководство. [bash]man rsync[/bash] Отмечу тут опции:
— —password-file=/home/aleksey/rsync.pass — полный путь к файлу с паролем;
— /home/aleksey/Documents — копируемая директория. Можно использовать несколько источников, например, /home/aleksey/Documents /home/aleksey/Video /home/aleksey/Music;
— rsync://backuper@192.168.41.100/aleksey — адрес назначения, то есть нашего rsync сервера с пользователем backuper и модулем aleksey. Замечу, что везде в команде прописаны полные, абсолютные пути. Это сделано специально для cron! Поместив эту команду в crontab (
crontab -e), у Вас будет ежедневное копирование или синхронизация в 3 часа ночи.
1 2 |
# min hour d_of_m mon d_of_week command 00 3 * * * /usr/bin/rsync -au --password-file=/home/aleksey/rsync.pass /home/aleksey/Documents rsync://backuper@192.168.41.100/aleksey |
Можно запускать синхронизацию/копирование и через ssh. В этом случае команда будет немного отличаться. Кстати, тут у Вас спросят пароль пользователя backuper, который будет уже паролем, введенным при создании пользователя.
rsync -auv --rsh='ssh -p2222' /home/aleksey/Documents backuper@192.168.41.100:aleksey
где -p2222 — порт ssh, если Вы его изменили при настройке.
Обратите внимание, что модуль aleksey отделяется : от адреса сервера.
Для Windows существует много разных клиентов rsync. Я нашел самый простой и бесплатный grsync. Скачать его можно по ссылке https://sourceforge.net/projects/grsync-win/files/grsync-win/Windows Installer/
В первом поле выбираем что копировать, во втором — куда. Также есть много опций, но нас интересует поле Advanced Options -> Additional Options. Сюда мы прописываем
--password-file=/cygdrive/c/Program\ Files/Grsync/rsync.pass
Обратите внимание на синтаксис пути, не похожий на стиль windows, /cygdrive/c и обратный \ перед пробелом в папке Program\ Files, куда и установился наш клиент. Туда же и скопирован секретный файл с паролем rsync.pass (можете скопировать его в любое место, указывая при этом путь к нему).
Как в linux, так и в windows стоит обратить внимание на закрывающий / в конце копируемого пути. Если он НЕ ПРИСУТСТВУЕТ, то скопируется вся директория /home/aleksey/Documents или C:\Users\aleksey\Desktop\tools как в наших примерах.
pwd
/var/backup/aleksey
ls -al
1 2 3 4 |
drwxr-xr-x. 5 backuper backuper 4096 Apr 18 14:51 . drwx------. 6 backuper backuper 4096 Mar 18 18:49 .. drwxr-xr-x. 8 backuper backuper 4096 Apr 17 14:15 Documents drwx------. 2 backuper backuper 4096 Mar 29 2017 tools |
Если будет такой вид /home/aleksey/Documents/, то файлы из Documents попадут в корень нашего модуля, то есть в /var/backup/aleksey. Будьте внимательны!
Настройка ротации логов rsyncd
И напоследок, так как у нас пишется лог-файл /var/log/rsyncd.log, неплохо было бы его включить в ротацию логов, во избежании переполнения диска. Для этого создадим файл /etc/logrotate.d/rsyncd и пропишем в него следующее:
1 2 3 4 5 6 7 |
/var/log/rsyncd.log { missingok notifempty size=100k compress rotate 5 } |
Когда файл-лог достигнет 100k, он заархивируется. Будут хранится 5 последних файлов.
Удачных бекапов!