結局開発終了騒ぎのあった TrueCryptはフォークされた のであるが、 このタイミングでLUKS(Linux Unified Key Setup)に触っておこうというお話し。

LUKSは実ドライブのボリューム暗号化で使われることが多いようだが、 今回は TrueCrypt でありがちな運用方法である 仮想ドライブ(ファイル)を使ったものである。

結論は単にループデバイスを介して普通にLUKSの設定をするだけであったが、 メモとして残しておく。

作成

仮想ドライブファイルの作成

まず仮想ドライブファイルとなるファイルを作る。 仮に 1G byte で作るのならば…

$ dd if=/dev/zero of=/path/to/foobar.img bs=1k count=1M

ファイルを置く場所が ext4 などならば fallocate(1) を使って作ってもよい。

$ fallocate -l 1G /path/to/foobar.img

なお本手法ではディスクイメージをそのまま扱う都合上、 可変ドライブに対応しない(対応できない)。 どうしてもというのならば、スパースファイルでも使えばよいと思う。

$ touch /path/to/foobar.img
$ truncate -s 1G /path/to/foobar.img
暗号化仮想ドライブの構築

仮想ドライブファイルをループデバイスに割り当てる。

# losetup /dev/loop0 /path/to/foobar.img

ここでは /dev/loop0 を使っているが また、 /dev/loop* が起動時に生成されない環境の場合は、 mknod(1) を使って予めループデバイスを作成しておくこと。

次に、ループデバイスに対して cryptsetup(1) を実行して LUKS の暗号化の設定をする。 下の例ではデフォルト設定で行っている。

# cryptsetup luksFormat /dev/loop0
WARNING!
========
This will overwrite data on /dev/loop0 irrevocably.

Are you sure? (Type uppercase yes): <kbd>YES</kbd>
Enter passphrase: 
Verify passphrase: 
# 

次に /dev/mapper/foobar にデバイスマッピングしてから、 ファイルシステムを構築する。 この例ではファイルシステムとして ext4 を使っている。

# cryptsetup luksOpen /dev/loop0 foobar
Enter passphrase for /path/to/foobar.img:
# mkfs.ext4 /dev/mapper/foobar
暗号化仮想ドライブのマウント/アンマウント

あとは /dev/mapper/foobar を普通にマウント(mount(1))すればすぐに使える。 使い終わったら普通にアンマウント(umount(1))する。

なおパーミッションなどをこの段階で設定をしておくといいかもしれない。

# mkdir /mnt/foobar
# mount /dev/mapper/foobar /mnt/foobar
# chown 500:500 /mnt/foobar
# umount /mnt/foobar
# rmdir /mnt/foobar
暗号化仮想ドライブの開放

LUKSの開放、ループデバイスの割り当て解除の順番で行う:

# cryptsetup luksClose foobar
# losetup -d /dev/loop0

日常使い

ループデバイスへの割り当てはコマンドラインで行う必要がある:

# losetup /dev/loop0 /path/to/foobar.img

こうした時点で各種 gtk アプリ (厳密には GIO サブシステム) からはドライブと 認識されているので、 USB メモリのような操作感でマウントして使える。 すなわちNautilusといったファイラーやファイルダイアログ(!)から (rootパスワードと暗号化仮想ドライブのパスフレーズの入力を除いて) マウス操作でマウントアンマウントできる。

なおコマンドラインでマウントするには下記のとおりとなる。

# losetup /dev/loop0 /path/to/foobar.img
# cryptsetup luksOpen /dev/loop0 foobar
# mkdir /mnt/foobar
# mount /dev/mapper/foobar /mnt/foobar

アンマウントは下記のとおりとなる。

# umount /mnt/foobar
# rmdir /mnt/foobar
# cryptsetup luksClose foobar
# losetup -d /dev/loop0

ドライブ拡張

ファイルシステムがリサイズに拡張しているならば、 簡単に拡張することができる。 よって、仮想ドライブファイルの容量が足りなくなった場合に そのときに増やすことが可能である。

以下は2G byteに増量する例。

$ truncate -s 2G /path/to/foobar.img
$ su
# losetup /dev/loop0 /path/to/foobar.img
# cryptsetup luksOpen /dev/loop0 foobar
# resize2fs /dev/mapper/foobar

参考文献