普段 rsyc を使ってよくバックアップを行うが、ふとバックアップサーバーのセキュリティが意外と甘かったりすることがある。
バックアップサーバーだからといっても、データベースのダンプやファイルなど、結構重要なものがあって、そのまま置いておくのはもちろん危険。
そこで duplicity と GnuPG を使って、バックアップファイルを暗号化しながら(比較的)安全にバックアップを取って保存することにしたので、その時のメモ。
duplicity は rsync と同様なお手軽にフルバックアップ、差分バックアップが行える上、リモート接続の選択肢も豊富(s3 などもサポート)で、バックアップファイルは gpg で暗号化されサインもされる。
かなりいい感じのツールだと思う。
今回の環境は、
今回はクライアントの環境が Mac なので、まずは GPGTools をインストールする。
マックに GnuPG をコンパイルしてインストールしようとしたが、 gen-key 実行時に
... gpg: problem with the agent: No pinentry ...
というエラーが出て解決できなかったため、やむなく GPGTools をインストール。
使用するコマンドは一緒なので、どちらでも良い。
以下のコマンドでまずはペア鍵を作成する。
$ gpg2 --gen-key gpg (GnuPG/MacGPG2) 2.0.18; Copyright (C) 2011 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. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) 2048 Requested keysize is 2048 bits Please specify how long the key should be valid. 0 = key does not expire= key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Key is valid for? (0) 0 Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: Enjoitech Backup Email address: test@enjoitech.com Comment: You selected this USER-ID: "Enjoitech Backup " Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key. 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: key DE16FB1B marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u gpg: next trustdb check due at 2015-08-18 pub 2048R/DE16FB1B 2012-11-13 Key fingerprint = 6963 35A4 7C0B 657D A509 5136 EC2D 8CE1 DE16 FB1B uid Enjoitech Backup sub 2048R/AB12FC48 2012-11-13
次に作成した鍵を、バックアップ元のサーバーにコピーする。
まずは以下のコマンドでエクスポートする。
$ gpg --export -a 'Enjoitech Backup' > backup.pub.gpg $ gpg --export-secret-key -a 'Enjoitech Backup' > backup.key.gpg'
そして scp コマンドなどでサーバーに転送
$ scp *.gpg test@enjoitech.com:~/
次にバックアップ元サーバーにログインして、ペア鍵をインポートする。
$ gpg --import backup.pub.gpg $ gpg --import backup.key.gpg
この後、インポートした鍵の信頼度を変更する。
$ gpg --edit-key 'Enjoitech Backup' gpg (GnuPG) 1.4.10; Copyright (C) 2008 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. Secret key is available. pub 2048R/ABCD1234 created: 2012-11-13 expires: never usage: SC trust: unknown validity: unknown sub 2048R/DEFG5678 created: 2012-11-13 expires: never usage: E [ unknown] (1). Enjoitech BackupCommand> trust pub 2048R/ABCD1234 created: 2012-11-13 expires: never usage: SC trust: unknown validity: unknown sub 2048R/DEFG5678 created: 2012-11-13 expires: never usage: E [ unknown] (1). Enjoitech Backup Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) 1 = I don't know or won't say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menu Your decision? 5 Do you really want to set this key to ultimate trust? (y/N) y pub 2048R/ABCD1234 created: 2012-11-13 expires: never usage: SC trust: ultimate validity: unknown sub 2048R/DEFG5678 created: 2012-11-13 expires: never usage: E [ unknown] (1). Enjoitech Backup Please note that the shown key validity is not necessarily correct unless you restart the program. Command> save Key not changed so no update needed.
この信頼度の変更を行わないと以下のようなエラーがバックアップ時に発生する事がある。
gpg: ABCD1234: There is no assurance this key belongs to the named user
実際に duplicity でバックアップを行う。まずはペア鍵の ID を gpg コマンドで取得する。
$ gpg --list-keys /home/test/.gnupg/pubring.gpg --------------------------- pub 2048R/ABCD1234 2012-11-13 uid Enjoitech Backupsub 2048R/EFGH5678 2012-11-13
この出力結果の ABCD1234 を利用する。
$ ASSPHRASE=your_key_passphrase duplicity --use-scp --sign-key 'ABCD1234' --encrypt-key 'ABCD1234' /path/to/backup/target ssh://backup-user@hostname//path/to/archive/directory
リストアも duplicity コマンドで行える。
$ ASSPHRASE=your_key_passphrase duplicity --use-scp --sign-key 'ABCD1234' --encrypt-key 'ABCD1234' ssh://backup-user@hostname//path/to/archive/directory /path/to/backup/target