Duplicity and backup
В статье мы настроим автоматическое резервное копирование с шифрованием на сторонний сервер. Помогать нам в этом будет программа Duplicity, которая есть практически во всех дистрибутивах. Хоть это и не желательно, но все действия будут производиться от имени root-а.
Ставим
yum -y install duplicity gpgme pygpgme
SSH
Для автоматического копирования резервной копии на удалённый сервер нам требуется ключ для ssh. Генерим
ssh-keygen -t rsa
И отправляем
ssh-copy-id user@remotehost
Для проверки можно залогиниться на удалённую машину ssh user@remotehost
GPG Keys
Генерим ключи для GPG, с помощью которых будут шифроваться резервные копии
gpg --gen-key
Будут задаваться вопросы по поводу типа ключей, длины этих ключей и сроке действия. Выбираем по вкусу (я сгенерил дефолтные RSA and RSA, с стандартной длиной 2048 и неограниченным сроком действия). Ну и смотрим что у нас получилось
gpg --list-keys
/root/.gnupg/pubring.gpg ------------------------ pub 2048R/098D1289 2018-09-24 uid your_name <1@1.com> sub 2048R/88D0F132 2018-09-24
Для параноиков, можно экспортировать закрытый ключ (а заодно и открытый) в файл и удалить его из gpg на сервере. Экспорт открытого ключа
gpg --armor --output pubkey.txt --export 098D1289
Экспорт закрытого ключа
gpg --armor --output privkey.txt --export-secret-keys 098D1289
Импорт открытого ключа
gpg --import pubkey.txt
Импорт закрытого ключа
gpg --allow-secret-key-import --import privkey.txt
Ну и - удалить ключ
gpg --delete-secret-keys 098D1289
Немного подробнее почитать про GPG можно тут
Duplicity
Проверяем
duplicity /from_folder scp://user@remotehost:2222/to_folder
После ввода пароля от GPG ключа стартует процесс резервного копирования. В домашней директории пользователя User в каталоге to_folder (а адресация относительная, для абсолютной требуется ставить два слэша cp://user@remotehost:2222//home/user/to_folder
)
ll to_folder
[user@remotehost] ~ ]$ ll -h to_folder/ total 84M -rw------- 1 user user 569 Sep 26 14:55 duplicity-full.20180924T125357Z.manifest.gpg -rw------- 1 user user 83M Sep 26 14:55 duplicity-full.20180924T125357Z.vol1.difftar.gpg -rw------- 1 user user 1.3M Sep 26 14:55 duplicity-full-signatures.20180924T125357Z.sigtar.gpg
Для того, чтобы duplicity постоянно не спрашивал пароль от ключа и как то можно было автоматизировать процесс - требуется определить переменную окружения PASSPHRASE в качестве значения которой задать наш пароль.
Автоматизируем
В домашнем каталоге рута создаём файл .passphrase в который записываем
PASSPHRASE="passphrase_for_GPG"
Назначаем права
chmod 600 /root/.passphrase
Создаём архив для cron
cat /root/backup.sh
#!/bin/sh test -x $(which duplicity) || exit 0 . /root/.passphrase export PASSPHRASE $(which duplicity) --encrypt-key 098D1289 --exclude /proc --exclude /sys --exclude /tmp --full-if-older-than 7d / scp://user@remotehost:2222/to_folder unset PASSPHRASE
Опция --full-if-older-than говорит, что надо делать полный бэкап каждые 7 дней Назначаем права
chmod 700 /root/backup.sh
И добавляем в cron
https://www.zetta.io/en/help/articles-tutorials/backup-linux-duply/
https://rtfm.co.ua/gpg-primery-ispolzovaniya-dlya-shifrovaniya/