🐧 Как сделать резервную копию с помощью Duplicity на Ubuntu 20.04 — Information Security Squad
🐧 Как сделать резервную копию с помощью Duplicity на Ubuntu 20.04

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

Duplicity — это бесплатная утилита резервного копирования с открытым исходным кодом и расширенной командной строкой, созданная на основе librsync и GnuPG.

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

Duplicity поддерживает множество протоколов для подключения к файловому серверу, включая ssh/scp, rsync, ftp, DropBox, Amazon S3, Google Docs, Google Drive, локальную файловую систему, OneDrive, WebDAV и многие другие.

В этом руководстве мы покажем вам, как установить и настроить Duplicity для выполнения вручную и автоматизации резервного копирования на сервере Ubuntu 20.04.

Предпосылки

  • Два сервера под управлением Ubuntu 20.04.
  • На сервере Duplicity настроен статический IP-адрес 104.245.32.161, а на сервере резервного копирования — 104.245.32.194.
  • Пароль root также настроен на вашем сервере.

Начало работы

Перед началом необходимо обновить пакеты до последней версии.

Вы можете обновить их все с помощью следующей команды:

apt-get update -y
После обновления всех пакетов вам также необходимо установить некоторые необходимые зависимости на вашем сервере.
Вы можете установить их, выполнив следующую команду:
apt-get install ncftp python3-paramiko python-pycryptopp lftp python3-boto python3-dev librsync-dev -y
После того, как все пакеты установлены, вы можете приступить к установке Duplicity.

Установка Duplicity

По умолчанию Duplicity доступна в репозитории Ubuntu 20.04.

Вы можете установить инструмент, просто выполнив следующую команду:

apt-get install duplicity -y
После установки проверьте установленную версию Duplicity с помощью следующей команды:

duplicity --version

Вы должны увидеть следующий вывод:

duplicity 0.8.12

Настройка аутентификации SSH без пароля

Затем вам нужно будет сгенерировать  RSA 2048-битный зашифрованный ключ SSH и использовать его для безопасной аутентификации на удаленной системе без предоставления пароля.

Сначала создайте ключ RSA с помощью следующей команды:

ssh-keygen -t rsa -m PEM
Вам будет предложено указать расположение ключа и пароль, как показано ниже:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:BwKSLtXT+WHhPqhu3MIH07QEb0c5Zh/f0XolMRyQaQE root@ubuntu2004
The key's randomart image is:
+---[RSA 3072]----+
|  .o.. ..oE.o*++ |
|  o.+.o.O . + +.o|
| o   +.*o+ + . +.|
|. .   =+o.. . o .|
| .   =.oS .    . |
|    o.o  o       |
|   o.+           |
|   .= o          |
|   ..o           |
+----[SHA256]-----+
Затем скопируйте сгенерированный ключ RSA на удаленный сервер резервного копирования с помощью следующей команды:

ssh-copy-id root@104.245.32.194
Вам будет предложено ввести пароль удаленного сервера, как показано ниже:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@104.245.32.194's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@104.245.32.194'"
and check to make sure that only the key(s) you wanted were added.

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

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

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

Вы можете использовать ключ GPG с помощью следующей команды на сервере Duplicity:

gpg --gen-key
Вам будет предложено ввести пароль ключа GPG во время процесса генерации, как показано ниже:
gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: directory '/root/.gnupg' created
gpg: keybox '/root/.gnupg/pubring.kbx' created
Note: Use "gpg --full-generate-key" for a full featured key generation dialog.

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

Real name: Hitesh Jethva
Email address: xxxx@gmail.com
You selected this USER-ID:
    "Hitesh Jethva <xxxx@gmail.com>"

Change (N)ame, (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: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key E8A334EB747BAD6A marked as ultimately trusted
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A.rev'
public and secret key created and signed.

pub   rsa3072 2020-07-30 [SC] [expires: 2022-07-30]
      6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A
uid                      Hitesh Jethva <xxxx@gmail.com>
sub   rsa3072 2020-07-30 [E] [expires: 2022-07-30]

Приведенная выше команда сгенерирует ключи GPG и сохранит их в каталоге /root/.gnupg/.

Если вы забыли свой ключ GPG, вы можете найти его с помощью следующей команды:

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
gpg: next trustdb check due at 2022-07-30
/root/.gnupg/pubring.kbx
------------------------
pub   rsa3072 2020-07-30 [SC] [expires: 2022-07-30]
      6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A
uid           [ultimate] Hitesh Jethva <hitjethva@gmail.com>
sub   rsa3072 2020-07-30 [E] [expires: 2022-07-30]

Создайте каталог резервного копирования

Затем вам нужно будет создать каталог на сервере резервного копирования для хранения резервной копии.

Войдите на сервер резервного копирования и создайте каталог резервного копирования с помощью следующей команды:

mkdir -p /remotebackup/Duplicity/
Как только вы закончите, вы можете перейти к следующему шагу.

Выполним ручное резервное копирование

На данном этапе Duplicity установлен и настроен.

Теперь давайте выполним резервное копирование на сервере Duplicity вручную.

Выполните следующую команду для резервного копирования каталога /etc на удаленный сервер резервного копирования (104.245.32.194) в каталог /remotebackup/Duplicity/:

duplicity /etc/ sftp://root@104.245.32.194//remotebackup/Duplicity/
Для выполнения операции резервного копирования вам потребуется предоставить пароль ключа GPG, как показано ниже:

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
GnuPG passphrase for decryption: 
Retype passphrase for decryption to confirm: 
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1596110093.56 (Thu Jul 30 11:54:53 2020)
EndTime 1596110095.24 (Thu Jul 30 11:54:55 2020)
ElapsedTime 1.67 (1.67 seconds)
SourceFiles 1413
SourceFileSize 2698964 (2.57 MB)
NewFiles 1413
NewFileSize 2698964 (2.57 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 1413
RawDeltaSize 1857098 (1.77 MB)
TotalDestinationSizeChange 493579 (482 KB)
Errors 0
-------------------------------------------------
Теперь войдите на удаленный сервер резервного копирования и проверьте резервную копию с помощью следующей команды:

ls /remotebackup/Duplicity/

Вы должны увидеть следующий вывод:

duplicity-full.20200730T115821Z.manifest.gpg      duplicity-full-signatures.20200730T115821Z.sigtar.gpg
duplicity-full.20200730T115821Z.vol1.difftar.gpg

Автоматизация резервного копирования с помощью Cron

Вы также можете запланировать ежедневное или еженедельное резервное копирование, настроив задание Cron на автоматическое выполнение его через заданный интервал времени.

Во-первых, вам нужно будет создать файл парольной фразы в каталоге /root, чтобы она автоматически передавалась без интерактивной подсказки.

Вы можете создать его с помощью следующей команды:

nano /root/.passphrase

Добавьте свой пароль ключа GPG, как показано ниже:

PASSPHRASE="admin"
Сохраните и закройте файл, а затем защитите файл с помощью следующей команды:
chmod 600 /root/.passphrase
Теперь создайте скрипт ежедневного резервного копирования в каталоге /etc/cron.daily/, который будет запускаться ежедневно:
nano /etc/cron.daily/duplicity.inc

Добавьте следующие строки:

#!/bin/sh

test -x $(which duplicity) || exit 0
. /root/.passphrase

export PASSPHRASE
$(which duplicity) --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A --exclude /var --exclude /home --exclude /swapfile --exclude /proc --exclude /sys --exclude /tmp --exclude /usr / sftp://root@104.245.32.194//remotebackup/Duplicity/

Сохраните и закройте файл, когда вы закончите.

Затем сделайте исполняемым скрипт с помощью следующей команды:

chmod +x /etc/cron.daily/duplicity.inc

Приведенный выше скрипт создаст резервную копию всего сервера, исключая некоторые папки.

Теперь протестируйте скрипт, чтобы убедиться, что все работает правильно.

/etc/cron.daily/duplicity.inc
Вы должны увидеть следующий вывод:
Local and Remote metadata are synchronized, no sync needed.
Last full backup left a partial set, restarting.
Last full backup date: Thu Jul 30 12:06:52 2020
RESTART: The first volume failed to upload before termination.
         Restart is impossible...starting backup from beginning.
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1596110992.57 (Thu Jul 30 12:09:52 2020)
EndTime 1596111062.63 (Thu Jul 30 12:11:02 2020)
ElapsedTime 70.06 (1 minute 10.06 seconds)
SourceFiles 13313
SourceFileSize 777994890 (742 MB)
NewFiles 13313
NewFileSize 777994890 (742 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 13313
RawDeltaSize 772067520 (736 MB)
TotalDestinationSizeChange 318263295 (304 MB)
Errors 0
-------------------------------------------------
Теперь вы можете проверить состояние вашей резервной копии с помощью следующей команды:

PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A collection-status  sftp://root@104.245.32.194//remotebackup/Duplicity/

Вы должны получить следующий вывод:

Last full backup date: Thu Jul 30 12:14:17 2020
Collection Status
-----------------
Connecting with backend: BackendWrapper
Archive dir: /root/.cache/duplicity/b2af509c9fab82d874aa492a933aaf70

Found 0 secondary backup chains.

Found primary backup chain with matching signature chain:
-------------------------
Chain start time: Thu Jul 30 12:14:17 2020
Chain end time: Thu Jul 30 12:14:17 2020
Number of contained backup sets: 1
Total number of contained volumes: 2
 Type of backup set:                            Time:      Num volumes:
                Full         Thu Jul 30 12:14:17 2020                 2
-------------------------
No orphaned or incomplete backup sets found.
Если вы хотите сделать полную резервную копию, выполните следующую команду:
PASSPHRASE="admin" duplicity full  --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 3 --force sftp://root@104.245.32.194//remotebackup/Duplicity/
Вы также можете очистить старые файлы резервных копий, используя опцию remove-all-but-n-full.
Например, если вы хотите удалить все ненужные старые файлы резервных копий и сохранить только 2 резервные копии и соответствующие инкрементные резервные копии, выполните следующую команду:
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A remove-all-but-n-full 2 --force  sftp://root@104.245.32.194//remotebackup/Duplicity/

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

Вы также можете легко восстановить файлы и каталоги с удаленного сервера резервного копирования.

Вы можете использовать опцию —file-to-restore для восстановления файлов и каталогов.

Перед выполнением процесса восстановления вы можете перечислить все доступные файлы и каталоги на сервере резервного копирования с помощью следующей команды:

duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A list-current-files  sftp://root@104.245.32.194//remotebackup/Duplicity/ | less
Вы должны увидеть следующий вывод:

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Jul 30 12:14:17 2020
Thu Jul 30 12:04:04 2020 .
Thu May 14 03:28:54 2020 bin
Thu May 14 03:35:45 2020 boot
Mon Apr 20 16:33:49 2020 boot/System.map-5.4.0-26-generic
Wed Apr 29 13:34:16 2020 boot/System.map-5.4.0-29-generic
Mon Apr 20 16:33:49 2020 boot/config-5.4.0-26-generic
Wed Apr 29 13:34:16 2020 boot/config-5.4.0-29-generic
Thu May 14 03:37:26 2020 boot/grub
Thu May 14 03:31:36 2020 boot/grub/fonts
Thu May 14 03:31:36 2020 boot/grub/fonts/unicode.pf2
Thu May 14 03:31:29 2020 boot/grub/gfxblacklist.txt
Thu May 14 03:37:26 2020 boot/grub/grub.cfg
Wed Jul 29 10:05:41 2020 boot/grub/grubenv
Thu May 14 03:31:37 2020 boot/grub/i386-pc
Thu May 14 03:31:36 2020 boot/grub/i386-pc/915resolution.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/acpi.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/adler32.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/affs.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/afs.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/ahci.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/all_video.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/aout.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/archelp.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/at_keyboard.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/ata.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/backtrace.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bfs.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/biosdisk.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bitmap.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bitmap_scale.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/blocklist.mod
Thu May 14 03:31:37 2020 boot/grub/i386-pc/boot.img
Thu May 14 03:31:36 2020 boot/grub/i386-pc/boot.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/bsd.mod
Thu May 14 03:31:35 2020 boot/grub/i386-pc/bswap_test.mod
Thu May 14 03:31:36 2020 boot/grub/i386-pc/btrfs.mod
Теперь восстановите каталог с именем «opt» с сервера резервного копирования в каталог /opt, выполнив следующую команду:
PASSPHRASE="admin" duplicity --encrypt-key 6683A9D4720C5895BF7A7AE9E8A334EB747BAD6A --file-to-restore opt sftp://root@104.245.32.194//remotebackup/Duplicity/ /opt
Если процесс восстановления был успешно завершен, вы должны увидеть следующий вывод:

Local and Remote metadata are synchronized, no sync needed.
Last full backup date: Thu Jul 30 12:14:17 2020

Заключение

В этом руководстве мы узнали, как выполнять резервное копирование и восстановление файлов и каталогов с помощью Duplicity на сервере Ubuntu 20.04.

Мы также узнали, как автоматически выполнять процесс резервного копирования, планируя процесс резервного копирования с помощью Cron.

Я надеюсь, что эта статья поможет вам сэкономить много времени.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *