monoの開発ブログ

Dropboxで安全に自動バックアップを行う

Dropboxはバックアップ用として便利であることは以前紹介したのですが、ここのところDropboxはセキュリティ上の問題が目立っており、利用を躊躇せざるを得ない状況です。今回は、バックアップを暗号化しておくことで、Dropboxの運営や悪意のある第三者によってファイルの内容を読み取られることを防ぎ、比較的安心して利用できるようにする方法を紹介します。

なお、今回は以前の記事に沿ってDropboxのインストールを済ませていることを前提にしています。新たにDropboxを利用したバックアップ環境を構築される方はこちらの記事を先にご覧ください。

パスフレーズの生成

暗号化に利用するパスフレーズを生成しておきます。このパスフレーズを紛失するとバックアップを開くことができなくなってしまうので、必ずバックアップを取って安全な場所に保管しておいてください。

cd /path/to
touch secret
chmod 600 secret
openssl rand 1024 > secret

バックアップを行うスクリプト

以下はバックアップを行うシェルスクリプトに暗号化の処理を追加したものです。基本的な流れは前回と同じですが、バックアップ対象のファイルをopensslコマンドで暗号化してからDropboxの管理下にコピーするようにしています。

#!/bin/sh

secret_path=/path/to/secret

backup_dir=/home/mono/Dropbox/backup
backup_file=backup.tar.gz

cd /path/to/target
tar cfz - * | openssl enc -e -aes-256-cbc -out /tmp/$backup_file -kfile $secret_path
mv /tmp/$backup_file $backup_dir

前回の記事ではMySQLデータベースなどのバックアップも紹介していますが、それらのスクリプトも最後のmvコマンドの部分を上と同様に書き換えてあげることで対応できます。

バックアップを復号する

バックアップの復号は以下のようなコマンドで行います。-inオプションに暗号化されたファイルパス、-outオプションに復号された情報が保存されるファイルパスを指定します。

openssl enc -d -aes-256-cbc -in backup.tar.gz -out backup_decrypted.tar.gz -kfile /path/to/secret

いざとなったときにデータを複合できなくて焦ることがないように、必ず暗号化したデータが複合できることを確認しておきましょう。