主に IT 技術を整理するためにメモ的に書き溜めています。少しだけフリーソフトもあるよ。コメントを残すには、 facebook を使ってください。

duplicity と GnuPG でセキュアなバックアップを行うには

最終更新日 2012-11-14 01:16:04 (1年以上前の記事です)


普段 rsyc を使ってよくバックアップを行うが、ふとバックアップサーバーのセキュリティが意外と甘かったりすることがある。
バックアップサーバーだからといっても、データベースのダンプやファイルなど、結構重要なものがあって、そのまま置いておくのはもちろん危険。
そこで duplicityGnuPG を使って、バックアップファイルを暗号化しながら(比較的)安全にバックアップを取って保存することにしたので、その時のメモ。

duplicity は rsync と同様なお手軽にフルバックアップ、差分バックアップが行える上、リモート接続の選択肢も豊富(s3 などもサポート)で、バックアップファイルは gpg で暗号化されサインもされる。
かなりいい感じのツールだと思う。

今回の環境は、

  • duplicity-0.6.08b
  • GnuPG-1.4.10
  • Ubuntu 10.04 LTS
  • GPGTools for Mac OSX(クライアントでの作業)

GPGTools のインストール


今回はクライアントの環境が Mac なので、まずは GPGTools をインストールする。
マックに GnuPG をコンパイルしてインストールしようとしたが、 gen-key 実行時に

...
gpg: problem with the agent: No pinentry
...

というエラーが出て解決できなかったため、やむなく GPGTools をインストール。
使用するコマンドは一緒なので、どちらでも良い。

gpg で鍵を作成

以下のコマンドでまずはペア鍵を作成する。

$ 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 Backup 

Command> 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 Backup 
sub   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
最終更新日 2012-11-14 01:16:04

コメント このエントリーをはてなブックマークに追加

フリーソフトウエア
EnjoiFLV
EnjoiPacket
EnjoiCrypto
ランキング
rank2, rank3, rank7, rank10, rank11
todo メモ
facebook 対応
ページ処理
RSS feed
検索機能
認証いる?
更新日表示
実はカテゴリ機能
多言語
実はユーザ機能
ソースその内公開
動作環境メモ
php-5.1.6 with PDO
SQLite-3.3
IE6
FireFox-1.5
RSS
非認証

検索
Google