Шифрование файлов backup с использованием gpg и открытого публичного ключа
Вариант с gpg:
Просомтр ключей
$ gpg --list-keys
gpg: создан каталог `/home/user/.gnupg'
gpg: создан новый файл настроек `/home/user/.gnupg/gpg.conf'
gpg: ВНИМАНИЕ: параметры в `/home/user/.gnupg/gpg.conf' при этом запуске еще не действуют
gpg: создана таблица ключей `/home/user/.gnupg/pubring.gpg'
gpg: /home/user/.gnupg/trustdb.gpg: создана таблица доверия
Импорт открытого ключа
$ gpg --import pubkey.txt
gpg: создана таблица ключей `/home/user/.gnupg/secring.gpg'
gpg: ключ 9BD0BCD3: импортирован открытый ключ "backup <mail@backup.com>"
gpg: Всего обработано: 1
gpg: импортировано: 1 (RSA: 1)
Импорт закрытого ключа(нужен на момент восстановления)
user@u1604:~$ gpg --allow-secret-key-import --import privkey.txt
gpg: ключ 9BD0BCD3: импортирован закрытый ключ
gpg: ключ 9BD0BCD3: "backup <mail@backup.com>" не изменен
gpg: Всего обработано: 1
gpg: неизмененных: 1
gpg: считано закрытых ключей: 1
gpg: импортировано закрытых ключей: 1
$ gpg --edit-key mail@backup.com
gpg (GnuPG) 1.4.20; Copyright (C) 2015 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.
Закрытый ключ доступен.
pub 4096R/9BD0BCD3 создан: 2019-02-17 годен до: никогда применимость: SC
доверие: неизвестной действительность: неизвестной
sub 4096R/4452E03E создан: 2019-02-17 годен до: никогда применимость: E
[неизвестно] (1). backup <mail@backup.com>
gpg> trust Enter;
pub 4096R/9BD0BCD3 создан: 2019-02-17 годен до: никогда применимость: SC
доверие: неизвестной действительность: неизвестной
sub 4096R/4452E03E создан: 2019-02-17 годен до: никогда применимость: E
[неизвестно] (1). backup <mail@backup.com>
Укажите, насколько Вы доверяете данному пользователю в вопросах проверки
достоверности ключей других пользователей (проверяет паспорт,
сверяет отпечатки ключей из разных источников и т.п.)
1 = Не знаю или не буду отвечать
2 = НЕ доверяю
3 = Доверяю ограниченно
4 = Полностью доверяю
5 = Абсолютно доверяю
m = вернуться в главное меню
Ваше решение? 5
Вы действительно хотите сделать этот ключ абсолютно доверенным? (y/N) y
pub 4096R/9BD0BCD3 создан: 2019-02-17 годен до: никогда применимость: SC
доверие: абсолютное действительность: неизвестной
sub 4096R/4452E03E создан: 2019-02-17 годен до: никогда применимость: E
[неизвестно] (1). backup <mail@backup.com>
Учтите, что показанная действительность ключа может быть неверной,
пока Вы не перезапустите программу.
gpg> q
$ sudo mkdir /backup
$ sudo chown -R postgres:postgres /backup
sudo nano /etc/postgresql/9.6/main/pg_hba.conf
Раскомментировать:
local replication postgres peer
host replication postgres 127.0.0.1/32 md5
Сохранить
$ sudo nano /etc/postgresql/9.6/main/postgresql.conf
Добавить:
max_replication_slots = 10
max_wal_senders = 10
wal_level = replica
Сохранить.
$ sudo systemctl restart postgresql
$ nano backup_ftp.sh
#!/bin/sh
set -e
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
DATA_FTP=`date +"%Y-%m-%d_%H-%M-%S"` # без роатации
# Если на ftp мало места включить ротацию:
#DATA_FTP=`date +"%d"` # для ротации по номеру дня месяца
#DATA_FTP=`date +"%u"` # для ротации по номеру дня недели
DIR_TMP='/backup'
DIR_BACKUP='/home/user/backup'
DIR_YANDEX='/home/user/backup/yandex'
echo "--------------------------------------------------------------------" > /home/user/backup/backup.log
# Записываем информацию в лог с секундами
echo "$DATA Начало backup"
echo "$DATA Начало backup" >> /home/user/backup/backup.log
sudo /bin/su postgres -c "rm -rf $DIR_TMP/*" \
&& sudo /bin/su postgres -c "/usr/bin/pg_basebackup -D $DIR_TMP -Ft -z -Xf -P" \
&& sudo mv $DIR_TMP/base.tar.gz $DIR_BACKUP/base-$DATA.tar.gz \
&& sudo /bin/su user -c \
"gpg -e -r mail@backup.com --cipher-algo AES256 -o $DIR_YANDEX/base-$DATA_FTP.tar.gz.gpg \
$DIR_BACKUP/base-$DATA.tar.gz" \
&& curl --upload-file $DIR_YANDEX/base-$DATA_FTP.tar.gz.gpg ftp://test:test@192.168.0.5 \
&& sudo /bin/su user -c "rm $DIR_YANDEX/base-$DATA_FTP.tar.gz.gpg"
#&& sudo /bin/su user -c "yandex-disk start"
#echo $?
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
echo "$DATA Ошибка завершения для backup"
echo "$DATA Ошибка завершения для backup" >> /home/user/backup/backup.log
exit
else
echo "$DATA Успешное завершение backup"
echo "$DATA Успешное завершение backup" >> /home/user/backup/backup.log
fi
echo "--------------------------------------------------------------------" >> /home/user/backup/backup.log
#делаем vacuumdb
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
# Записываем информацию в лог с секундами
echo "$DATA Начало vacuum full"
echo "$DATA Начало vacuum full" >> /home/user/backup/backup.log
sudo /bin/su postgres -c "/usr/bin/vacuumdb -zfa" >> /home/user/backup/backup.log
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
echo "$DATA Ошибка завершения для vacuum full"
echo "$DATA Ошибка завершения для vacuum full" >> /home/user/backup/backup.log
exit
else
echo "$DATA Успешное завершение vacuum full"
echo "$DATA Успешное завершение vacuum full" >> /home/user/backup/backup.log
fi
echo "--------------------------------------------------------------------" >> /home/user/backup/backup.log
# посылаем сообщение
sleep 2
#echo "backup" | mutt -s "backup" f2@vt.com -a $BACKUP_DIR/backup.log
Сохранить.
Запуск:
$ sudo sh backup_ftp.sh
Запуск по расписанию:
$ sudo -i
# crontab -e
Добавить в конец (сработает в 18:01):
# каждые день в 18.00
0 18 * * * sh /home/user/backup_ftp.sh Сохранить.
Смотреть задания:
# crontab -l
Проверка расшифровки:
d:\us01>gpg --allow-secret-key-import --import privkey.txt
gpg: ключ 521D03509BD0BCD3: "backup <mail@backup.com>" не изменен
gpg: ключ 521D03509BD0BCD3: импортирован секретный ключ
gpg: Всего обработано: 1
gpg: неизмененных: 1
gpg: прочитано секретных ключей: 1
gpg: импортировано секретных ключей: 1
d:\gpg>gpg -d -o gpg -d -r mail@backup.com -o base-7.tar.gz base-7.tar.gz.gpg
Короткий вариант:
$ nano pg_basebackup.sh
#!/bin/sh
set -e
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
DATA_FTP=`date +"%Y-%m-%d_%H-%M-%S"` # без роатации
# Если на ftp мало места включить ротацию:
#DATA_FTP=`date +"%d"` # для ротации по номеру дня месяца
#DATA_FTP=`date +"%u"` # для ротации по номеру дня недели
DIR_TMP='/backup'
DIR_BACKUP='/home/user/backup'
DIR_YANDEX='/home/user/backup/yandex'
echo "--------------------------------------------------------------------" > /home/user/backup/backup.log
# Записываем информацию в лог с секундами
echo "$DATA Начало backup"
echo "$DATA Начало backup" >> /home/user/backup/backup.log
sudo /bin/su postgres -c "rm -rf $DIR_TMP/*" \
&& sudo /bin/su postgres -c "/usr/bin/pg_basebackup -D $DIR_TMP -Ft -z -Xf -P" \
&& sudo mv $DIR_TMP/base.tar.gz $DIR_BACKUP/base-$DATA.tar.gz
#echo $?
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
echo "$DATA Ошибка завершения для backup"
echo "$DATA Ошибка завершения для backup" >> /home/user/backup/backup.log
exit
else
echo "$DATA Успешное завершение backup"
echo "$DATA Успешное завершение backup" >> /home/user/backup/backup.log
fi
echo "--------------------------------------------------------------------" >> /home/user/backup/backup.log
$ time sudo sh pg_basebackup.sh
Комментариев нет:
Отправить комментарий