backup с PGP шифрованием
В продолжение постов про GPG и о геме Backup собираю все в одну статью и дополняю настройкой для автоматического шифрования резервных копий.
утилита GPG
Установка, естественно, от пользователя с root-правами.
На RedHat’ах:
yum install pgp |
На Debian’ах:
apt-get install pgp |
Для создания ключей все та же команда, выполнять которую можно от рядового пользователя.
gpg --gen-key |
Далее понадобится экспорт ключей в текстовый файл. В командах ниже username@email
, разумеется, надо заменить на почту указанную при генерации.
Экспорт публичного ключа:
gpg --output public.pgp --armor --export username@email |
Экспорт закрытого (приватного) ключа:
gpg --output private.pgp --armor --export-secret-key username@email |
Если требуется, после экспорта ключей их можно удалить. Сначала удаляется закрытый ключ:
gpg --delete-secret-keys username@email |
Затем открытый:
gpg --delete-keys username@email |
Вывести список всех импортированных ключей:
gpg --list-keys |
gem backup и PGP-ключ
Установка гема:
gem install backup |
Cоздание модели (в данном примере модель называется ekzample
) для бекапа:
backup generate:model --trigger ekzample Generated model file: '~/Backup/models/ekzample.rb'. |
Далее, для настройки нужного бекапа, следует отредактировать ~/Backup/models/ekzample.rb
.
В примере ниже показан конфиг для резервного копирования базы MySQL с последующим сжатием в tar и шифрованием архива PGP-ключом, после чего зашифрованный файл отправляется по SFTP на бекап-сервер.
# encoding: utf-8 ## # Backup Generated: ekzample # Once configured, you can run the backup with the following command: # # $ backup perform -t ekzample [-c <path_to_configuration_file>] # # For more information about Backup's components, see the documentation at: # http://backup.github.io/backup # Model.new(:ekzample, 'Description for ekzample') do split_into_chunks_of 500 Encryptor::GPG.defaults do |encryption| encryption.keys = {} encryption.keys['username@email'] = <<-KEY -----BEGIN PGP PUBLIC KEY BLOCK----- ...it is place for PUBLIC KEY... -----END PGP PUBLIC KEY BLOCK---- KEY encryption.recipients = 'username@email' end database MySQL do |db| db.name = 'exampledb' db.username = 'exampleuser' db.password = 'examplepass' end compress_with Gzip encrypt_with GPG store_with SFTP do |server| server.username = 'backupuser' server.password = 'backuppass' server.ip = '111.111.111.111' server.port = 22 server.path = '~/' # Use a number or a Time object to specify how many backups to keep. server.keep = 150 # Additional options for the SSH connection. # server.ssh_options = {} end end |
Не стоит забывать вставить между <<-KEY
и KEY
созданный ранее ПУБЛИЧНЫЙ (открытый) ключ.
Для более тонкой настройки PGP-ключей, например, разные ключи для разных баз, следует воспользоваться официальной документацией.
Запускается создание бекапа командой:
backup perform -t ekzample |
извлечение бекапа
Если в системе нет ключей, используемых данным бекапом, следует их импортировать:
gpg --import private.pgp gpg --import public.gpg |
Далее чтобы расшифровать резервную копию понадобится команда:
gpg -o ekzample.tar -d ekzample.tar.gpg |
Для распаковки тарбола подойдет команда:
tar -xvf ekzample.tar |