Меню Закрыть

Сохранение резервных копий в облачных хранилищах

При создании домашних резервных копий одним из главных вопросов становится их хранение. Резервные необходимо хранить на другой машине и лучше всего за пределами домашней сети. Наиболее доступным решением будет использование облачных хранилищ, но у каждого провайдера может быть своё API для доступа к хранилищу, к которому нужно написать или найти свой адаптер. Но с помощью утилиты rclone можно одновременно делать резервные копии в различные облачные хранилища

Для этого понадобится всего несколько программ:

  • tar – для создания архива
  • gpg – для шифрования архива
  • rclone – для сохранения архива в облачном хранилище

tar и gpg входят в стандартные пакеты линукс дистрибутивов. rclone необходимо установить согласно документации и самый простой способ – воспользоваться автоустановщиком

sudo -v ; curl https://rclone.org/install.sh | sudo bash

Создание ключа GPG

По-умолчанию GPG уже идет у большинства дистрибутивов. При отсутствии можно установить с помощью комады

sudo apt install gnupg

ВАЖНО!!! Не теряйте ключи, иначе будет не возможна расшифровка резервных копий. После генерации ключей экспортируйте их и сохраните в надежном месте, а лучше нескольких. Экспортируемые ключи имеют не большой размер, на худой конец можно даже распечатать

Для шифрования архивов необходимо сгенерировать GPG ключ

gpg --full-gen-key

Выбираем все значения по-умолчанию. В качестве идентификатор пользователя достаточно ввести E-Mail, не обязательно реальный, в примере будем использовать backup@example.com. Пароль не обязательно задавать

gpg (GnuPG) 2.4.4; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
(1) RSA and RSA
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(9) ECC (sign and encrypt) *default*
(10) ECC (sign only)
(14) Existing key from card
Your selection?
Please select which elliptic curve you want:
(1) Curve 25519 *default*
(4) NIST P-384
(6) Brainpool P-256
Your selection?
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name:
Email address: backup@example.com
Comment:
You selected this USER-ID:
"backup@example.com"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: revocation certificate stored as '/home/imaroz/.gnupg/openpgp-revocs.d/79B02D3497EBA5E1D68544AAE52F670590BD64DB.rev'
public and secret key created and signed.

pub ed25519 2025-01-21 [SC]
79B02D3497EBA5E1D68544AAE52F670590BD64DB
uid backup@example.com
sub cv25519 2025-01-21 [E]

Проверим созданные ключи

gpg --list-keys
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
/home/imaroz/.gnupg/pubring.kbx
-------------------------------
pub ed25519 2025-01-21 [SC]
79B02D3497EBA5E1D68544AAE52F670590BD64DB
uid [ultimate] backup@example.com
sub cv25519 2025-01-21 [E]

После генерации необходимо экспортировать ключи. Экспорт секретного ключа

gpg --export-secret-key --export-options backup --armor backup@example.com > 'backup@example.com.gpg'
# или с указанием имени файла в опциях
gpg --export-secret-key --export-options backup --armor 'backup@example.com.gpg' -a backup@example.com

-a (или –armor) – выводить в виде текста ASCII. По умолчанию вывод производится в двоичном формате OpenPGP

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

gpg --export --export-options backup --armor 'backup@example.com.gpg.pub' -a backup@example.com

После того как скопировали ключ (публичный или приватный) на сервер, его необходимо импортировать

gpg --import --import-options restore backup@example.com.gpg.pub

и установить уровень абсолютного доверия (5 = I trust ultimately)

gpg --edit-key backup@example.com trust
gpg (GnuPG) 2.4.4; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


pub ed25519/E52F670590BD64DB
created: 2025-01-21 expires: never usage: SC
trust: unknown validity: unknown
sub cv25519/F27C6CF8D26F4BA7
created: 2025-01-21 expires: never usage: E
[ unknown] (1). backup@example.com

pub ed25519/E52F670590BD64DB
created: 2025-01-21 expires: never usage: SC
trust: unknown validity: unknown
sub cv25519/F27C6CF8D26F4BA7
created: 2025-01-21 expires: never usage: E
[ unknown] (1). backup@example.com

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu

Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y

pub ed25519/E52F670590BD64DB
created: 2025-01-21 expires: never usage: SC
trust: ultimate validity: unknown
sub cv25519/F27C6CF8D26F4BA7
created: 2025-01-21 expires: never usage: E
[ unknown] (1). backup@example.com
Please note that the shown key validity is not necessarily correct
unless you restart the program.

Или в одну строку

echo -e "5\ny\n" | gpg --command-fd 0 --expert --edit-key backup@example.com trust

Настройка подключений rclone

По умолчанию rclone хранит настройки в домашней директории пользователя, но местоположение можно указать параметром –config. Настройки доступа для резервного копирования лучше хранить в отдельном файле и не домашней директории, например, в /etc/rclone/backup.conf. Тогда для настройки подключения необходимо вызывать команды с ключом –config

sudo rclone --config /etc/rclone/backup.conf config

И далее следуем по меню для создания необходимых подключений. Допустим, что создали три подключения с кодовыми названиями:

Создание резервной копии

Основной сценарий создания резервной копии: создать архивы на той же машине, а затем скопировать в резервное хранилища. Но с помощью rclone можно одновременно копировать архивы в несколько удаленных хранилищ, не создавая временных файлов на локальной машине с помощью команды rcat

Для создания резерных копий одной директории, например, /var/www необходимо выполнить всего одну команду

tar -czf - -C /var/www "." | \
gpg -e -r backup@example.com | \
tee \
 >(rclone --config /etc/rclone/backup.conf rcat "ftp:backup/var/www.tar.gz.gpg" --size-only) \
 >(rclone --config /etc/rclone/backup.conf rcat "yandex:backup/var/www.tar.gz.gpg") \
 >(rclone --config /etc/rclone/backup.conf rcat "dropbox:backup/var/www.tar.gz.gpg") \
&>/dev/null

Последовательно выполняются следующие действия

  • Архивируется директория /var/www и результат отправляется в стандартный поток
  • Поток шифруется и подписывается ключом backup@example.com
  • Команда tee передает одновременно в три потока в rclone

Как следует из команды создания резервной копии, количество внешних хранилищ может быть любым, нужно только добавлять соответствующую строку с целевым хранилищем команде tee

Если не нужно шифрование, то можно опустить шаг с вызовов gpg

Восстановление из резервной копии

Перейдите в директорию, в которой хотите восстановить резервную копию, в примере выше: /var/www и восстановите файлы из одного из облачных хранилищ

cd /var/www
rclone --config /etc/rclone/backup.conf cat "ftp:backup/var/www.tar.gz.gpg" | gpg -d | tar -xzf -

Обязательным условием должно быть наличие приватного ключа на сервере

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии