自宅で運用中のファイル サーバのハードディスク メディアは、リムーバブル ケースで自由に交換できるようにしていますが、そうなると怖いのがハードディスク メディアの盗難や紛失です。まぁ、大して重要な情報を保存しているわけでもなく、また、個人宅に侵入した空き巣がハードディスク メディアを狙って盗むかと云えばレアケースだと思いますが... Linux にはドライブやパーティションを暗号化ボリュームとして扱う機能があるということでやってみました。
カーネルで、Device Mapper を利用してファイル システムを暗号化する dm-crypt モジュールが有効になっている必要があります。また、設定用のコマンドライン インタフェースである cryptsetup パッケージをインストールします。その後、modprobe でカーネル モジュールをインストールするか、またはシステムを再起動します。
$ apt-get install cryptsetup ... $ reboot
既存のパーティションに保存されたデータをそのままに、パーティションを暗号化することはできないっぽい(未調査) その場合、既存のデータを別のパーティションにコピーしておき、暗号化パーティションを作成した後に、再びデータを書き戻す必要があるようです。要は空のパーティションから始めるということ。
暗号化するパーティションの全体に渡って、事前にランダムなデータを書き込んでおきます。これは必須の工程ではないものの、ドライブ セクタを直接読み込まれた場合などに、使用済みのセクタ領域と未使用のセクタ領域の判別を難しくすることで、データの抽出を困難にし、結果、暗号の強度を高めることができるらしい。非常に重要なデータを扱う場合など、不安に思うようであればやっておくとよいとのこと。
$ dd if=/dev/urandom of=/dev/sdx & $ kill -USR1 <PID>
dd コマンドは USR1 シグナルを受け取ると、現在の I/O 状況を標準出力に吐いて処理を継続します。大容量のドライブやパーティションを処理する場合、かなり時間がかかるので、バックグラウンドで走らせておいて、時々シグナルを送って進捗を確認してやるとイイ感じです。
Western Digital WD20EARX-00 2TB をシュレッダーにかけてみたところ、5.4 MB/s くらいの速度が出ました。逆算すると 2TB 全体をシュレッダーするのに 4日12時間かかる計算で途中で止めましたが(´・ω・`)
$ cryptsetup --verify-passphrase create hogehoge /dev/sdx
hogehoge の部分は任意で、デバイス マッパー上での識別名になります。これによって、以降、/dev/sdx への操作は /dev/mapper/hogehoge に対して同様に行えるようになります。
一発目に暗号化ボリュームを作成する際には、--verify-passphrase オプションを付けて、パスフレーズの確認入力を求めるようにしておく方が良いと思います。というのも、パスフレーズの typo に気付かずに先に進んでしまうと、保存したデータと永遠にサヨナラすることになりますので。
/dev/sdx に対して操作を行う替わりに、/dev/mapper/hogehoge に対して同様に操作するだけで、暗号化ボリュームであることを意識する必要はありません。
$ # ext3 ファイル システムを作成する $ mkfs.ext3 /dev/mapper/hogehoge ... $ # ファイル システムの調整 $ tune2fs -c 0 -i 0 /dev/mapper/hogehoge ... $ # ファイル システムをマウント $ mount -t ext3 /dev/mapper/hogehoge /mnt ...
$ # アンマウント $ umount /mnt ... $ # 暗号化デバイスを削除 $ cryptsetup remove hogehoge ...
暗号化デバイスの削除はお好みで。システムを再起動すると自動的に削除されますが、暗号化デバイスが残っている間は、自分以外のスーパーユーザが自由にマウントして中を見ることができてしまいます。
作成したパーティションが保護されているのか確かめてみます。
$ mount -t ext3 /dev/sdx /mnt →直接マウントしようとすると、ファイルシステムが不正でマウントできない。 $ cryptsetup create hogehoge /dev/sdx Enter passphrase: ← 間違ったパスフレーズを入力しても、ここではエラーにならない $ mount -t ext3 /dev/mapper/hogehoge /mnt →ファイルシステムが不正でマウントできない。
通常のパーティションと暗号化パーティションで、読み書きパフォーマンスに差が出るか調べてみました。メインボード上の SATA に接続された HGST の HDS722020ALA330 です。
■ 書き込み、通常ボリューム $ dd if=/dev/urandom of=/mnt/test.dat count=1024000 524288000 bytes (524 MB) copied, 82.0063 s, 6.4 MB/s 524288000 bytes (524 MB) copied, 82.9543 s, 6.3 MB/s 524288000 bytes (524 MB) copied, 83.8298 s, 6.3 MB/s ■ 書き込み、暗号化ボリューム $ dd if=/dev/urandom of=/mnt/test.dat count=1024000 524288000 bytes (524 MB) copied, 88.356 s, 5.9 MB/s 524288000 bytes (524 MB) copied, 88.2989 s, 5.9 MB/s 524288000 bytes (524 MB) copied, 88.3576 s, 5.9 MB/s 524288000 bytes (524 MB) copied, 88.5942 s, 5.9 MB/s 524288000 bytes (524 MB) copied, 88.5186 s, 5.9 MB/s ■ 読み込み、通常ボリューム $ dd if=/mnt/test.dat of=/dev/null 524288000 bytes (524 MB) copied, 4.00795 s, 131 MB/s 524288000 bytes (524 MB) copied, 4.00277 s, 131 MB/s 524288000 bytes (524 MB) copied, 3.95289 s, 133 MB/s ■ 読み込み、暗号化ボリューム $ dd if=/mnt/test.dat of=/dev/null 524288000 bytes (524 MB) copied, 5.75027 s, 91.2 MB/s 524288000 bytes (524 MB) copied, 5.71037 s, 91.8 MB/s 524288000 bytes (524 MB) copied, 5.88486 s, 89.1 MB/s 524288000 bytes (524 MB) copied, 5.71217 s, 91.8 MB/s 524288000 bytes (524 MB) copied, 5.70343 s, 91.9 MB/s
書き込みでおおよそ 10%、読み込みではおおよそ 40% ほど遅くなっています。ただ、途中の暗号/復号のレイヤを全く意識することなく透過的に使えて、劇的に遅いというわけでもなさそうです。
動作パフォーマンスを計測する際に、一度読み込んだファイル内容をメモリに保持してしまうディスク キャッシュが効いていると、読み込み速度が爆速な値を出すことがあります。この場合、動作パフォーマンスとしての値としては意味がないので、ディスク キャッシュをクリアしてから計測しなければなりません。
$ echo 3 > /proc/sys/vm/drop_caches または $ sysctl -w vm.drop_caches=3
cryptsetup のバージョンによって、暗号化方式のデフォルト値が異なるため、例えば、Debian 5.0 (lenny) で作成した暗号ボリュームを、Debian 6.0 (squeeze) で開こうとするとうまくいきません。
lenny 上の cryptsetup で暗号化方式を指定しない場合のデフォルト値として、暗号化には aes-cbc-plain が使われますが、squeeze の場合にはこれが aes-cbc-essiv:sha256 になっているためです。
■ lenny (cryptsetup 1.0.6) で作成した暗号ボリュームのステータス $ cryptsetup status /dev/mapper/hogehoge /dev/mapper/hogehoge is active: cipher: aes-cbc-plain keysize: 256 bits device: /dev/sdx offset: 0 sectors size: 3907029168 sectors mode: read/write ■ squeeze (cryptsetup 1.1.3) で作成した暗号ボリュームのステータス $ cryptsetup status /dev/mapper/hogehoge /dev/mapper/hogehoge is active: cipher: aes-cbc-essiv:sha256 keysize: 256 bits device: /dev/sdx offset: 0 sectors size: 3907029168 sectors mode: read/write
ですので、lenny で作成した暗号ボリュームを squeeze で開く場合、またはその逆の場合には、暗号化方式を明示する必要があります。
$ cryptsetup -c aes-cbc-plain create hogehoge /dev/sdx
寄せられたコメント (全 1 件中、最新 5 件まで表示しています)
・コメントを投稿するにはブラウザの JavaScript を有効にしてください
・入力された通りに改行位置で改行されます
・HTML タグは使用できませんが、文中の URL は自動的にリンクされます