README.md

    Скрипт синхронизации данных 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 ( системная и пользовательская версия )

    Релизы
    20250513_01 2025-05-13
    Конвейеры
    0 успешных
    0 с ошибкой