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

No Comments.

Leave a Reply

(обязательно)

(обязательно)