Ubuntuでバックアップを安全に自動化するために、GPGを使用してDuplicityを使う方法
紹介
Duplicityは、さまざまな転送プロトコルや第三者のストレージソリューションを実装できる多機能なローカルおよびリモートバックアッププログラムです。
このガイドでは、Ubuntu 12.04 VPSにduplicityをインストールする方法について説明します。ソースからインストールし、GPG暗号化を利用するように設定します。
進行するには、バックアップされるUbuntu 12.04 VPSと、SSHでアクセス可能な任意の種類のLinuxマシンまたはVPSの2台のマシンにアクセスする必要があります。
UbuntuでソースからDuplicityをインストールする方法
このガイドでは、Ubuntu 12.04 の VPS を使用しています。デフォルトのリポジトリにある duplicity パッケージは古く、実際にはバックエンドの変更のためにリモートホストへの接続にいくつかの問題があります。
私たちはソースファイルを入手して手動でインストールすることで、これらの問題を回避します。
バックアップするUbuntu 12.04 VPSにrootとしてログインします。
前提パッケージをインストールする
私たちはソースから重複性をインストールしていますが、必要なパッケージはデフォルトのUbuntuリポジトリから取得します。
ソースデータベースを更新し、その後、これらの2つのコマンドで必要なパッケージをインストールしてください。
apt-get update
apt-get install ncftp python-paramiko python-pycryptopp lftp python-boto python-dev librsync-dev
これにより、データをリモートコンピュータに転送するためのさまざまなハンドラーがインストールされます。このガイドではほとんど使用しませんが、持っておくと良いオプションです。
ソースからDuplicityをダウンロードしてインストールする
重複ファイルはlaunchpad.netに保存されています。それらをルートユーザーのホームディレクトリにダウンロードします。
cd /root
wget http://code.launchpad.net/duplicity/0.6-series/0.6.22/+download/duplicity-0.6.22.tar.gz
ソースを解凍し、作成されたパッケージディレクトリに移動します。
tar xzvf duplicity*
cd duplicity*
次に、以下のコマンドで実際のインストールを完了させます:
python setup.py install
これはソースからインストールされたパッケージであるため、/usr/local/bin/ ディレクトリに配置されます。
SSHおよびGPGキーを作成する
私たちの重複構成は、利便性とセキュリティの良い交差点を実現するために、2種類の異なる鍵を使用します。
リモートシステムにパスワードを入力することなく、安全に認証するためにSSHキーを使用します。また、データをバックアップ先に transferする前にGPGを使用してデータを暗号化します。
SSHキーを作成する
バックアップをホストするマシンへのパスワードなしのログインを許可するために、ルートユーザー用にRSA暗号化されたSSHキーを生成します。
まだ実行していない場合は、データを転送するマシンにルートパスワードが設定されていることを確認してください。これは、マシンにrootとしてログイン(SSH経由またはVPSの場合はドロップレットページのコンソールアクセスボタンを通じて)し、次のコマンドを実行することで行えます:
passwd
二重性のあるドロップレットに戻り、次のコマンドでキーのペアを生成します:
ssh-keygen -t rsa
プロンプトでEnterを押して、デフォルト設定でパスワードなしのSSHキーを生成します。
このコマンドを使って、バックアップをホストするシステムに転送します:
ssh-copy-id root@backupHost
未確認のホストを受け入れるためにはいと答え、その後リモートシステムのルートパスワードを入力して公開鍵を転送してください。
複製のドロップレットからパスワードなしでログインできるかテストするには、次のコマンドを発行します:
ssh root@backupHost
追加の認証情報を提供することなくログインしているはずです。
SSHでログインしている間に、バックアップファイルを格納するためのディレクトリ構造を作成してください。
mkdir -p /remotebackup/duplicityDroplet
ディレクトリには好きな名前を付けることができますが、後で指定できるようにその値を覚えておいてください。
作業が終了したら、あなたの重複ドロップレットに戻って退出してください。
exit
GPG鍵を作成する
私たちは、追加のセキュリティと暗号化のためにGPGを使用します。コマンドは、私たちの鍵を隠しディレクトリ/root/.gnupg/に保存します:
gpg --gen-key
あなたは、キー ペアのパラメーターを設定する一連の質問をされます。
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?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y
デフォルトの「RSA および RSA」キーを受け入れるには、エンター を押してください。 デフォルトのキーサイズと有効期限なしを受け入れるには、再度エンターを2回押してください。
yを入力してパラメータを確認してください。
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
Real name: Your Name
Email address: your_email@example.com
Comment:
You selected this USER-ID:
"Your Name <your_email@example.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
このキーに関連付けられる名前、メールアドレス、およびオプションでコメントを入力してください。情報を確認するにはOを入力してください。
次に、GPGで使用するパスフレーズを設定します。SSHキーではデフォルトでパスフレーズを設定しなかったため、重複がバックグラウンドで動作できましたが、このステップではデータの安全な暗号化と復号化を許可するためにパスフレーズを入力してください。
Enter passphrase:
Repeat passphrase:
この段階では、エントロピーを生成するように求められます。エントロピーは基本的に、システム内の予測不可能性の程度を表す言葉です。あなたのVPSは、実際にランダムなキーを作成するためにエントロピーを必要とします。
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.
Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 280 more bytes)
エントロピーを生成するために助けが必要な場合は、ここにHavegedを使用してエントロピーを生成するためのガイドがあります。私の経験では、aptからいくつかのパッケージをインストールするだけで、必要なエントロピーが生成されます。これを行うには、新しいターミナルでSSH接続してください。
十分なランダムな情報が生成されたとき、あなたのキーが作成されます。
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 05AB3DF5 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: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 2048R/05AB3DF5 2013-09-19
Key fingerprint = AF21 2669 07F7 ADDE 4ECF 2A33 A57F 6998 05AB 3DF5
uid Your Name <your_email@example.com>
sub 2048R/32866E3B 2013-09-19
上記で強調表示された部分はあなたの公開鍵IDです。後で転送するデータを暗号化するために必要になります。
公開鍵IDを書き留めるのを忘れた場合は、gpgキーチェーンを照会することで再度取得できます:
gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/05AB3DF5 2013-09-19
uid Your Name <your_email@example.com>
sub 2048R/32866E3B 2013-09-19
私たちは今、duplicityを使用して安全にバックアップするために必要なすべてのコンポーネントを整えました。
重複を利用する方法
初期テストを実施する
重複システムの初期テストを、バックアップ用のダミーファイルのフォルダーを作成することで実施します。次のコマンドを実行してください:
cd ~
mkdir test
touch test/file{1..100}
これにより、ルートホームディレクトリに test という名前のディレクトリが作成されます。その後、1から100までの番号が付けられたファイルでディレクトリが埋められます。
私たちは、最初に生成したGPGキーなしでファイルをリモートサーバーに移動します。私たちは、ftpの機能を再現するSSHに含まれている安全なプロトコルである“sftp”を使用します。
duplicity /root/test sftp://root@backupHost//remotebackup/duplicityDroplet
リモートホストとファイルパスの間にある二重スラッシュに注目してください。これは、絶対パスを指定しているためです。デフォルトのディレクトリからの相対パスであれば、スラッシュは1つだけで済みます。
リモートホストを受け入れるように求められ、その後データを暗号化するために使用するキーを作成し確認するように求められます。ご覧の通り、特にそうしないように指示しない限り、GPGは引き続き使用されます。唯一の違いは、私たちが作成したキーを使用していないことであり、ここに任意のパスワードを入力することができます。
Import of duplicity.backends.dpbxbackend Failed: No module named dropbox
The authenticity of host '162.243.2.14' can't be established.
SSH-RSA key fingerprint is 1f:4b:ae:1c:43:91:aa:2b:04:5b:a4:8e:cd:ea:e6:60.
Are you sure you want to continue connecting (yes/no)? yes
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
GnuPG passphrase:
Retype passphrase to confirm:
バックアップが実行され、そのプロセスが完了すると、統計が表示されます。
No signatures found, switching to full backup.
--------------[ Backup Statistics ]--------------
StartTime 1379614581.49 (Thu Sep 19 18:16:21 2013)
EndTime 1379614581.60 (Thu Sep 19 18:16:21 2013)
ElapsedTime 0.11 (0.11 seconds)
SourceFiles 101
SourceFileSize 4096 (4.00 KB)
NewFiles 101
NewFileSize 4096 (4.00 KB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 101
RawDeltaSize 0 (0 bytes)
TotalDestinationSizeChange 1022 (1022 bytes)
Errors 0
-------------------------------------------------
リモートシステムにSSHで接続すると、バックアップが正常に完了したことが確認できます。
ssh root@backupHost
cd /remotebackup/duplicityDroplet
ls
duplicity-full.20130919T181705Z.manifest.gpg
duplicity-full.20130919T181705Z.vol1.difftar.gpg
duplicity-full-signatures.20130919T181705Z.sigtar.gpg
これらのファイルにはバックアップ情報が含まれています。これは単なるテストだったので、次のコマンドを実行して削除できます:
rm duplicity*
二重性の雫へ戻る:
exit
テストディレクトリとそのすべての内容を今すぐ削除できます:
rm -r /root/test
最初のバックアップを作成する
私たちは次の一般的な構文を使用して、初めての本格的なバックアップを作成します。
duplicity --encrypt-key key_from_GPG --exclude files_to_exclude --include files_to_include path_to_back_up sftp://root@backupHost//remotebackup/duplicityDroplet
私たちは、/proc、/sys、および/tmpを除く全てのルートディレクトリをバックアップします。私たちは作成したGPGキーを使用します。これはコマンド内でIDを指定し、パスフレーズを前置することで行います:
PASSPHRASE="passphrase_for_GPG" duplicity --encrypt-key 05AB3DF5 --exclude /proc --exclude /sys --exclude /tmp / sftp://root@backupHost//remotebackup/duplicityDroplet
上記のコマンドには少し時間がかかります。バックアップを初めて実行するため、Duplicityはフルバックアップを作成します。Duplicityは、ファイル転送を簡素化するためにデータのチャンクをボリュームに分割します。
--------------[ Backup Statistics ]--------------
StartTime 1379621305.09 (Thu Sep 19 20:08:25 2013)
EndTime 1379621490.47 (Thu Sep 19 20:11:30 2013)
ElapsedTime 185.38 (3 minutes 5.38 seconds)
SourceFiles 33123
SourceFileSize 813465245 (776 MB)
NewFiles 33123
NewFileSize 813464221 (776 MB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 33123
RawDeltaSize 802133584 (765 MB)
TotalDestinationSizeChange 369163424 (352 MB)
Errors 0
-------------------------------------------------
新しいドロップレットで、私の設定は15のボリュームを作成し、それがリモートシステムに転送されました。
リモートシステムに完全バックアップがあるため、次のバックアップは自動的に増分バックアップになります。これらは速く、データ転送も少なくて済みます。私の最初のバックアップは3分以上かかりましたが、増分バックアップは8秒未満で完了しました。
--------------[ Backup Statistics ]--------------
StartTime 1379621776.23 (Thu Sep 19 20:16:16 2013)
EndTime 1379621783.80 (Thu Sep 19 20:16:23 2013)
ElapsedTime 7.57 (7.57 seconds)
SourceFiles 33128
SourceFileSize 820560987 (783 MB)
NewFiles 11
NewFileSize 12217723 (11.7 MB)
DeletedFiles 3
ChangedFiles 1
ChangedFileSize 600 (600 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 15
RawDeltaSize 12197851 (11.6 MB)
TotalDestinationSizeChange 12201207 (11.6 MB)
Errors 0
-------------------------------------------------
別のフルバックアップを強制するには、オプションの前にduplicityコールに「full」コマンドを追加できます:
PASSPHRASE="passphrase_for_GPG" duplicity full --encrypt-key 05AB3DF5 --exclude /proc --exclude /sys --exclude /tmp / sftp://root@backupHost//remotebackup/duplicityDroplet
バックアップを復元する
複製により復元が簡単になります。リモートとローカルのパラメータを単純に逆転させることで、復元できます。
データを復号化するだけなので、暗号化キーオプションは必要ありません。また、バックアップにそもそも含まれていないため、除外パラメータも必要ありません。
たとえば、私たちがバックアップしたデータを完全に復元したい場合、このコマンドを使用できます:
PASSPHRASE="passphrase_for_GPG" duplicity sftp://root@backupHost//remotebackup/duplicityDroplet /
おそらくより安全な選択肢は、必要なファイルやディレクトリだけを復元することです。これを行うには、上記のコマンドにオプションを追加します:
PASSPHRASE="passphrase_for_GPG" duplicity --file-to-restore /path/to/file sftp://root@backupHost//remotebackup/duplicityDroplet /path/to/restore/file
困難な状況にいるときに問題が発生しないように、正しく復元する能力をテストすることを確認してください。
バックアップを自動化する
重複を自動化するために、いくつかのcronジョブを作成できます。詳細なcronの設定方法についてはここをクリックしてください。
パスフレーズファイルを作成する
私たちは、GPGパスフレーズを直接自動化スクリプトに入力しなくて済むように、保護されたファイルを作成します。
ルートユーザーのホームディレクトリに移動し、テキストエディタで新しい隠しファイルを作成してください:
cd /root
nano .passphrase
このファイルに必要なのは、あなたがこれまで重複命令の前に付けていたパスフレーズ仕様だけです。
PASSPHRASE="passphrase_for_GPG"
ファイルを保存して閉じてください。
ルートユーザーのみが読み取れるようにするには、次のコマンドを実行します:
chmod 700 /root/.passphrase
日次増分バックアップを設定する
私たちは、重複性を設定して毎日の増分バックアップを作成します。これにより、バックアップが最新の状態に保たれます。
/etc/cron.daily にリストされているスクリプトは一度に1回実行されるため、ここはバックアップスクリプトを作成するのに最適な場所です。
そのフォルダーに移動し、duplicity.incという名前のファイルを作成します:
cd /etc/cron.daily
nano duplicity.inc
次のbashスクリプトをファイルにコピーしてください。システムバックアップに使用したいコマンドでduplicityコマンドを置き換えてください。
#!/bin/sh
test -x $(which duplicity) || exit 0
. /root/.passphrase
export PASSPHRASE
$(which duplicity) --encrypt-key 05AB3DF5 --exclude /proc --exclude /sys --exclude /tmp / sftp://root@backupHost//remotebackup/duplicityDroplet
ファイルを保存して閉じてください。
次のコマンドを入力して実行可能にしてください:
chmod 755 duplicity.inc
それを呼び出してテストしてみてください:
./duplicity.inc
エラーなく完了するはずです。
毎週の完全バックアップを設定する
増分バックアップはフルバックアップを基に構築されます。これは、変更が蓄積されるにつれて、ますます扱いづらくなることを意味します。基盤をリフレッシュするために、週次のフルバックアップを設定します。
私たちは、/etc/cron.weeklyディレクトリ内に類似のスクリプトを作成することでこれを行います。
ディレクトリに移動して、新しいファイルを作成します:
cd /etc/cron.weekly
nano duplicity.full
次のbashスクリプトをファイルにコピーしてください。「full」コマンドを含めて、duplicitiyがフルバックアップを実行するように強制しています。
#!/bin/sh
test -x $(which duplicity) || exit 0
. /root/.passphrase
export PASSPHRASE
$(which duplicity) full --encrypt-key 05AB3DF5 --exclude /proc --exclude /sys --exclude /tmp / sftp://root@backupHost//remotebackup/duplicityDroplet
私たちは、古いバックアップファイルを掃除するために、最後に追加の重複コマンドを追加する予定です。私たちは、合計3つのフルバックアップとそれに関連する増分バックアップを保持します。
ファイルの最後にこれを追加してください
$(which duplicity) remove-all-but-n-full 3 --force sftp://root@backupHost//remotebackup/duplicityDroplet
ファイルを保存して閉じてください。
次のコマンドで実行可能にしてください:
chmod 755 duplicity.full
次のように呼び出してテストしてください:
./duplicity.full
完全なバックアップを行い、その後必要なファイルを削除する必要があります。
結論
今、完全に機能する自動バックアップソリューションが整っているはずです。誤った安心感に陥らないように、バックアップを定期的に検証することを忘れないでください。
他にも多くのバックアップツールがありますが、duplicityはユーザーの多くのニーズを満たす柔軟でシンプルなソリューションです。
