Скрипт синхронизации данных rsync backup
Версия stable: 20250517_01 (В соседней ветке dev версии)
Рекомендуется ознакомление с инструкцией в docx/pdf файле
Ссылки
GITFLIC: https://gitflic.ru/user/medved0001
Вконтакте: https://vk.com/medved0001
Описание
Удобный скрипт и настроенный systemd сервис с таймером для синхронизации данных через rsync ( системная и пользовательская версия )
Скрипт разрабатывается в первую очередь для личного использования в Astra Linux.
Проверено на системах:
- Astra linux 1.8.1
- Alt linux 10.4
- RedOS 8
Настройка авторизации (если используется синхронизация по сети)
Разрешите доступ по ssh
конкретным пользователям или группам в файле /etc/ssh/sshd_config
в параметрах AllowUsers
и AllowGroups
.
Использование ssh ключа
1.Создайте ключ с помощью команды ssh-keygen
.
2.Добавьте открытый ключ в профиль пользователя, которым будет выполняться подключение, на необходимом сервере и проверьте подключение (для подключения используется закрытый ключ).
3.Укажите в файле rsync-backup.conf
имя пользователя для подключения, которому был добавлен ключ (если оно отличается от имени пользователя выполняющего скрипт), путь к файлу закрытого ключа и метод авторизации key
. Если ключ должен быть доступен для более одного обычного пользователя, то необходимо на файл ключа выставить группу, в которую будут входить все необходимые пользователи, а также выставить права 440
.
Для использования ключа из под root
, в правах на файл должен быть владелец root
и права 400
. Если указанный вами файл существует, а права будут некорректными, то в том же каталоге будет создана копия файла с владельцем root
и правами 400
.
Использование kerberos
1.Для использования авторизации через kerberos
, у пользователя (от имени которого запущен скрипт), должен быть доступен активный kerberos билет (в скрипте проверка производится командой klist -A -s
).
2.На сервере необходимо включить поддержку kerberos
авторизации. Скопируйте файл 1-sshd-kerberos.conf
в /etc/ssh/sshd_config.d
или измените соответствующие настройки в основном файле /etc/ssh/sshd_config
.
3.На сервере в корне домашнего каталога пользователя, которым будет выполняться подключение, создайте файл .k5login
. Разместите в этом файле (по 1 записи на строку) имена kerberos билетов, которым разрешено подключение к данному пользователю (важно учитывать регистр). Например:
username1@TEST.LOCAL
UerName2@TEST.LOCAL
Все пользователи у которых есть соответствующие билеты могут авторизоваться на устройстве через пользователя у которого указаны эти билеты в .k5login
. Например, если поместить запись username1@TEST.LOCAL
в .k5login
у пользователя testuser1
, то пользователь username1
сможет авторизоваться через пользователя testuser1
.
Доступен скрипт kerberos_login.sh
для массовой инициализации домашних каталогов и внесения имени пользователя в файл .k5login
. Данный скрипт писался при использовании полного доменного имени пользователя и домашнего каталога, поэтому может не подойти под ваш вариант конфигурации. Рядом со скриптом должен находится файл list_users
с внесенными записями. В соответствии с этими записями будут инициализированы отсутствующие домашние каталоги и внесена запись в .k5login
каждого указанного пользователя.
4.Укажите в файле rsync-backup.conf
имя пользователя для подключения, у которого был создан .k5login
(если оно отличается от имени пользователя выполняющего скрипт) и метод авторизации kerberos
.
Настройка скрипта
Если заданы оба списка (белый и чёрный), то выполняется проверка только по белому списку.
Белые и черные списки подсетей
Необязательны для заполнения. Файлы могут отсутствовать, быть пусты или иметь закомментированные строки, которые не будут учитываться.
Для настройки белого списка подсетей для выполнения скрипта отредактируйте файл list_subnet_white.conf
Для настройки черного списка подсетей для запрета выполнения скрипта отредактируйте файл list_subnet_black.conf
На каждую строку одна запись в формате x.x.x
, где x
— число от 0
до 255
.
Белые и черные списки хостов
Необязательны для заполнения. Файлы могут отсутствовать, быть пусты или иметь закомментированные строки, которые не будут учитываться.
Для настройки белого списка хостов для выполнения скрипта отредактируйте файл list_hostname_white.conf
Для настройки черного списка хостов для запрета выполнения скрипта отредактируйте файл list_hostname_black.conf
На каждую строку одна запись в формате (значение|число
), где значение это имя хоста или часть имени хоста, а число (0/1
), где 0
- частичное совпадение, 1
- полное.
При сравнении регистр не учитывается.
Белые и черные списки пользователей (пользовательская версия)
Необязательны для заполнения. Файлы могут отсутствовать, быть пусты или иметь закомментированные строки, которые не будут учитываться.
Для пользовательской версии скрипта можно задать имена пользователей или части имен для разрешения и запрета выполнения скрипта.
Для настройки белого списка пользователей для выполнения скрипта отредактируйте файл list_user_white.conf
Для настройки черного списка пользователей для запрета выполнения скрипта отредактируйте файл list_user_black.conf
На каждую строку одна запись в формате (значение|число
), где значение это имя пользователя или часть имени пользователя, а число (0/1), где 0 - частичное совпадение, 1 - полное.
При сравнении регистр не учитывается.
Белые и черные списки групп (пользовательская версия)
Необязательны для заполнения. Файлы могут отсутствовать, быть пусты или иметь закомментированные строки, которые не будут учитываться.
Для пользовательской версии скрипта можно задать имена групп или части имен для разрешения и запрета выполнения скрипта.
Если пользователь указан в белом списке пользователей, то для него проверка по спискам групп будет пропущена.
Для настройки белого списка групп для выполнения скрипта отредактируйте файл list_group_white.conf
Для настройки черного списка групп для запрета выполнения скрипта отредактируйте файл list_group_black.conf
На каждую строку одна запись в формате (значение|число
), где значение это имя группы или часть имени группы, а число (0/1), где 0 - частичное совпадение, 1 - полное.
При сравнении регистр не учитывается.
Log файлы
Пользовательская версия скрипта сохраняет лог синхронизации в каталог $HOME/.rsync-backup/logs
.
Системная версия скрипта сохраняет лог синхронизации в каталог $dir_runscript/logs
, где $dir_runscript
это каталог в котором находится файл скрипта.
Сохранение логов можно отключить присвоив переменной log_create
в скрипте значение 0
.
Файл блокировки (пользовательская версия)
В пользовательском скрипте используется файл блокировки при выполнении. По умолчанию включен глобальный файл блокировки, т.е. выполняться может 1 скрипт независимо от пользователя. При использовании пользовательского файла блокировки будет свой файл у каждого пользователя.
Если в каталоге рядом со скриптом есть файл use_global_block
, то будет использован файл /tmp/.rsync-backup.block
, иначе /tmp/.rsync-backup-user_$UID.block
.
Внутри скрипта есть переменная let wait_file_del=0
. Если присвоить значение 1
, то вместо завершения скрипта будет ожидание удаления файла блокировки.
Белый и черный список синхронизации
Белый и черный список синхронизации заполняется в файлах rsync-list-white.conf
и rsync-list-black.conf
.
Белый список синхронизации. Синхронизация найденных путей соответствующих фильтру по частичному или полному совпадению (применимо к типу синхронизации 1 и 2. Номера строк из файла указываются в разделе №5 пути синхронизации).
Чёрный список синхронизации. Исключить из синхронизации найденных путей строки соответствующие фильтру по частичному или полному совпадению (применимо к типу синхронизации 1 и 2. Номера строк из файла указываются в разделе №6 пути синхронизации).
На каждую строку одна запись в формате (значение:число
), где значение это шаблон фильтра, а число (0/1), где 0 - частичное совпадение, 1 - полное.
Тип совпадения: 0 - частичное; 1 - полное (Используется параметр -w
(искать шаблон как слово, отделенное пробелами или другими знаками препинания). Для полного совпадения имени, заключите имя между знаками начала и конца строки, например ^значение1$
).
Фильтрация выполняется с учетом регистра.
Фильтрация выполняется через grep
, поэтому доступен следующий синтаксис:
^
- начало строки$
- конец строки.
- 1 любой символ[.]
- символ точки
Пример:
[.]doc[x]?$:0
[.]xls[x]?$:0
[.]pdf$:0
[.]od.$:0
^[.]:0
Параметры синхронизации rsync
Если необходимо переопределить параметры синхронизации rsync
определенные по умолчанию, то добавьте набор параметров в файл rsync-param.conf
и укажите номера сток, которые необходимо использовать, в разделе №4
при указании пути синхронизации.
По умолчанию в скрипте используются следующие параметры: -avczhRlptx --delete --force
В качестве альтернативы предлагается использовать (-avzhRlptx
) набор без параметра (-c
) и (--delete
--force
). По проведенным тестам, опция (c
- проверка по чексумме) и (--delete
- файлы, отсутствующие в источнике, считаются старыми и удаляются) приводят к дополнительной нагрузке и увеличению времени синхронизации. Выбирайте между скоростью и повышением гарантий корректной синхронизации.
Описание параметров:
-a
- активируется поддержка архивации данных;-v
- процесс синхронизации отображается на экране;-c
- включается сравнение контрольной суммы вместо даты, времени и размера как индикаторов изменения файлов;-z
- сжатие файлов происходит при передаче на удаленный сервер;-h
- выводить числа в удобном для восприятия человеком формате;-R
- использовать относительные пути (для пользовательской версии скрипта является фиксированным параметром);-l
- копировать символьные ссылки как символьные ссылки;-p
- утилита сохранит неизменными разрешения на файл или каталог;-t
- указывает передавать время модификации файлов и обновлять им соответствующий атрибут на приемной стороне;-x
- не переходить границ файловой системы при рекурсивном копировании;--delete
- удаление старых файлов, которых нет в источнике копирования;--force
- принудительно удалить каталоги, даже если они не пустые.--progress
- показать прогресс передачи (фиксированный параметр).
При необходимости синхронизации с учетом шаблона, даже при рекурсивной синхронизации, нужно указать следующий набор параметров (указав свои данные для шаблона):
Синхронизация по шаблону включения: --prune-empty-dirs --include "*/" --include="*.txt" --include="*.odt" —exclude="*"
--prune-empty-dirs
— не синхронизировать пустые каталоги;--include "*/"
- включить все каталоги;--include="*.txt"
–include=“*.odt” –exclude=“*” — передать толькоtxt
иodt
.
Синхронизация по шаблону исключения (исключение всех файлов *.od*
): --prune-empty-dirs --exclude="*.od*"
Список путей
Список путей и параметров синхронизации к ним заполняется в файле rsync-list-sync.conf
в формате (Один путь с параметрами на строку. Допустимо комментирование строк знаком #. Все активные строки должны строго соответствовать шаблону проверки):
путь1|тип-синхронизации|синхронизация-скрытых-файлов/каталогов|список-применяемых-параметров-rsync|белый-список-фильтров|черный-список-фильтров|минимальный-каталог|максимальный каталог|тип-поиска
путь2|тип-синхронизации|синхронизация-скрытых-файлов/каталогов|список-применяемых-параметров-rsync|белый-список-фильтров|черный-список-фильтров|минимальный-каталог|максимальный каталог|тип-поиска
Раздел 1 - путь к каталогу/файлу
Раздел 2 - тип синхронизации:
0
- синхронизировать указанный каталог/файл;1
- синхронизировать каталоги/файлы в указанном каталоге;2
- синхронизировать каталоги/файлы из указанного каталога, которые будут найдены командойfind
с указанными вами параметрами в разделах7
,8
,9
.Раздел 3 - синхронизация скрытых файлов/каталогов (0 -нет, 1 - да). Применимо к типу синхронизации 1 и 2.
Раздел 4 - перечисление списка параметров
rsync
, которые необходимо применить при передаче данного пути. Указывается в формате:число1,число2,...,числоN
(где числа являются номерами строк из файлаrsync-param.conf
). Укажите0
для использования стандартного набора параметров из скрипта.Раздел 5 - белый список фильтров, которые необходимо применить при сканировании указанного пути (применимо к типу синхронизации 1 и 2). Указывается в формате:
число1,число2,...,числоN
(где числа являются номерами строк из файлаrsync-list-white.conf
). Если фильтр использовать не нужно, то указать значение0
.Раздел 6 - чёрный список фильтров, которые необходимо применить при сканировании указанного пути (применимо к типу синхронизации 1 и 2). Указывается в формате:
число1,число2,...,числоN
(где числа являются номерами строк из файлаrsync-list-white.conf
). Если фильтр использовать не нужно, то указать значение0
.Раздел 7 — Указывается число определяющее с какой глубины указанного каталога необходимо начать поиск (добавление параметра
mindepth
кfind
). Применимо к типу синхронизации2
. Укажите0
, когда использовать не нужно и при других типах синхронизации.Раздел 8 — Указывается число определяющее максимальную глубину поиска по подкаталогам. Для поиска только в текущем каталоге установите 1 (добавление параметра
maxdepth
кfind
). Применимо к типу синхронизации 2. Укажите0
, когда использовать не нужно и при других типах синхронизации.Раздел 9 — Тип поиска (Применимо к типу синхронизации 2. Укажите любое доступное значение при других типах синхронизации). Допустимые значения:
a
- поиск без ограничений;f
- поиск только файлов;d
— поиск только каталогов.
В скрипте поиск некорректных строк выполняется командой (строки начинающиеся со знака # игнорируются):
grep -Ev '^[/][A-Za-zА-Яа-я0-9#%&()*+,./?@_[:space:]-]+[|][0-2][|][01][|](([0]|[1-9][0-9]*|([1-9][0-9]*[,])+[0-9]+)[|]){3}(([0]|[1-9][0-9]*)[|]){2}[afd]$'
Пояснение: путь должен начинаться со знака /
, за ним могут находится символы A-Za-zА-Яа-я0-9#%&()*+,./?@_[:space:]-
. Далее идет разделение разделов знаком |
, потом число от 0 до 2
, разделение разделов знаком |
, число 0 или 1
, разделение разделов знаком |
, число или числа разделенные запятыми (Повторяется 3 раза), любое число (повторяется 2 раза) и символ из набора afd
.
В пользовательской версии скрипта корнем является домашний каталог пользователя, который запускает скрипт, а в системной корень системы.
Пример для пользовательского скрипта (будут синхронизированы файлы и каталоги из корня домашнего каталога, без учета скрытых): /|1|0|0|0|0|0|0|a
Пример для пользовательского скрипта (будет полностью синхронизирован каталог test1
): /test1|0|0|0|0|0|0|0|a
Пример для пользовательского скрипта (будет синхронизирован каталог Документы
с применением дополнительных параметров rsync
из строк 1
и 7
файла rsync-param.conf
): /Документы|0|0|1,7|0|0|0|0|a
Пример для системного скрипта (Тип синхронизации 2, скрытые файлы отключены, использование первой строки для параметров rsync, использовать строки белого фильтра 5,6,7,8, черный список отключен, минимальная глубина 1, максимальная глубина 2, искать только файлы): /opt/test|2|0|1|5,6,7,8|0|1|2|f
Пример для системного скрипта (тип синхронизации 1, скрытые файлы включены, указание списка параметров синхронизации rsync
и чёрного списка): /opt/test5|1|1|1,3,4|0|1,5|0|0|a
Инструкция к rsync backup (system-run)
1.Скопируйте каталог
./rsync-backup/system-run
в нужное вам место. Допускаются следующие символы в пути (A-Za-zА-Яа-я0-9(),./@_[:space:]-
). По умолчанию в сервисе указан путь/opt/rsync-backup/system-run
.2.Если вы расположили каталог по другому пути, то отредактируйте путь запуска скрипта
ExecStart
в файле сервисаrsync-backup.service
.3.При необходимости измените параметры в файле таймера
rsync-backup.timer
.4.Переместите
rsync-backup.service
иrsync-backup.timer
в/etc/systemd/system
.5.Выполните команды от имени
root
:systemctl daemon-reload
(обновить конфигурацию юнитов для всех служб.) иsystemctl enable rsync-backup.timer
(Запускать таймер при старте системы).6.Установите необходимые пакеты, содержащие исполняемые файлы:
ssh
иrsync
. Если будет использованаkerberos
авторизация, то в системе должны присутствовать исполняемые файлыklist
иkinit
.7.Настройте файл конфигурации
rsync-backup.conf
.8.При необходимости проверьте работу скрипта, запустив его вручную без сервиса для быстрого анализа вывода (при использовании сервиса, вывод ошибок перенаправляется в системный журнал).
9.Перезагрузите ПК
Инструкция к rsync backup (user-run)
Пользовательская версия скрипта сделана на основе системной со следующими изменениями:
Синхронизация файлов/каталогов только из домашнего каталога пользователя запустившего скрипт/сервис (корнем для поиска указанных в конфигурации путей является
$HOME
);Синхронизация на удаленном сервере выполняется в
$server_dir_sync/$USER/$(hostname)
. Каталог$USER/$(hostname)
будет создан.Сервис работает от имени пользователя вошедшего в систему;
Возможность указать белый/черный список пользователей/групп, для которых будет/не будет выполняться скрипт;
Создается файл блокировки при выполнении скрипта;
Сообщение выводится для текущего пользователя.
1.Скопируйте каталог
./rsync-backup/user-run
в нужное вам место. Допускаются следующие символы в пути (A-Za-zА-Яа-я0-9(),./@_[:space:]-
). По умолчанию в сервисе указан путь/opt/rsync-backup/user-run
.2.Если вы расположили каталог по другому пути, то отредактируйте путь запуска скрипта
ExecStart
в файле сервисаrsync-backup-user.service
.3.При необходимости измените параметры в файле таймера
rsync-backup-user.timer
.4.Переместите
rsync-backup-user.service
иrsync-backup-user.timer
в/etc/systemd/user
.5.Скопируйте файл
./rsync-backup-user-run/etc/xdg/autostart/rsync-backup.desktop
в каталог/etc/xdg/autostart
. Команда будет запускаться одноразово при старте пользовательской сессии. Набор команд следующий:systemctl --user import-environment
— импорт переменных окружения текущего пользователя в systemd текущего пользователя (необходимо для использования вывода сообщения);systemctl --user is-enabled rsync-backup-user.timer || systemctl --user enable rsync-backup-user.timer
— Если у таймера не включен автозапуск, то включаем автозапуск;systemctl --user is-active rsync-backup-user.timer || systemctl --user start rsync-backup-user.timer
— Если таймер не запущен, то запускаем (Для исключения необходимости перезагрузки после активации автозапуска таймера);sleep 60m
— Задержка 60 минут перед запуском сервиса после входа пользователя (Далее будет регулироваться таймером). При необходимости измените значение или удалите команду;systemctl --user is-active rsync-backup-user.service || systemctl --user start rsync-backup-user.service
— Если сервис не запущен, то запуск сервиса.6.Установите необходимые пакеты, содержащие исполняемые файлы:
ssh
иrsync
. Если будет использованаkerberos
авторизация, то в системе должны присутствовать исполняемые файлыklist
иkinit
.7.Настройте файл конфигурации
rsync-backup.conf
.8.При необходимости проверьте работу скрипта, запустив его вручную без сервиса для быстрого анализа вывода (при использовании сервиса, вывод ошибок перенаправляется в системный журнал).
9.Перезагрузите ПК.
Описание
Удобный скрипт и настроенный systemd сервис с таймером для синхронизации данных через rsync ( системная и пользовательская версия )