LUKSを(TrueCryptみたいに)仮想ドライブファイルで運用するには
結局開発終了騒ぎのあった TrueCryptはフォークされた のであるが、 このタイミングでLUKS(Linux Unified Key Setup)に触っておこうというお話し。
LUKSは実ドライブのボリューム暗号化で使われることが多いようだが、 今回は TrueCrypt でありがちな運用方法である 仮想ドライブ(ファイル)を使ったものである。
結論は単にループデバイスを介して普通にLUKSの設定をするだけであったが、 メモとして残しておく。
作成
仮想ドライブファイルの作成
まず仮想ドライブファイルとなるファイルを作る。 仮に 1G byte で作るのならば…
ファイルを置く場所が ext4 などならば fallocate(1) を使って作ってもよい。
なお本手法ではディスクイメージをそのまま扱う都合上、 可変ドライブに対応しない(対応できない)。 どうしてもというのならば、スパースファイルでも使えばよいと思う。
暗号化仮想ドライブの構築
仮想ドライブファイルをループデバイスに割り当てる。
ここでは /dev/loop0 を使っているが また、 /dev/loop* が起動時に生成されない環境の場合は、 mknod(1) を使って予めループデバイスを作成しておくこと。
次に、ループデバイスに対して cryptsetup(1) を実行して LUKS の暗号化の設定をする。 下の例ではデフォルト設定で行っている。
次に /dev/mapper/foobar にデバイスマッピングしてから、 ファイルシステムを構築する。 この例ではファイルシステムとして ext4 を使っている。
暗号化仮想ドライブのマウント/アンマウント
あとは /dev/mapper/foobar を普通にマウント(mount(1))すればすぐに使える。 使い終わったら普通にアンマウント(umount(1))する。
なおパーミッションなどをこの段階で設定をしておくといいかもしれない。
暗号化仮想ドライブの開放
LUKSの開放、ループデバイスの割り当て解除の順番で行う:
日常使い
ループデバイスへの割り当てはコマンドラインで行う必要がある:
こうした時点で各種 gtk アプリ (厳密には GIO サブシステム) からはドライブと 認識されているので、 USB メモリのような操作感でマウントして使える。 すなわちNautilusといったファイラーやファイルダイアログ(!)から (rootパスワードと暗号化仮想ドライブのパスフレーズの入力を除いて) マウス操作でマウントアンマウントできる。
なおコマンドラインでマウントするには下記のとおりとなる。
アンマウントは下記のとおりとなる。
ドライブ拡張
ファイルシステムがリサイズに拡張しているならば、 簡単に拡張することができる。 よって、仮想ドライブファイルの容量が足りなくなった場合に そのときに増やすことが可能である。
以下は2G byteに増量する例。
参考文献
- How to create a portable encrypted file system on a loop file
- EncryptedFilesystemsOnRemovableStorage, Ubuntsu Community Help Wiki
- Linux で疎なファイル(sparse file)を使う
- Linuxファイルシステムのサイズ変更とデフラグ, SourceForge.JP Magazine (2003-10-13)