概要
最近の Debian GNU/Linux では、インストール時に暗号化パーティションの作成を選択できるようになっているようです。しかし、インストール後に暗号化パーティションを作成する方法については、適切なドキュメントが見つからなかったので、少し試行錯誤してみました。
暗号化の単位
今回、調査してみたところ、暗号化する単位がいくつか存在することが分かりました。
- ディレクトリ単位で暗号化
- 例えば、あるユーザのホームディレクトリのみを暗号化します。ユーザはログイン時にパスフレーズを入力し、そのユーザのホームディレクトリのみを復号化してマウントします。
- 物理ボリューム単位で暗号化
- 物理ボリューム(例えば、
/dev/sdb1
)単位で暗号化します。システムには複数の物理ボリュームが存在する場合は、LVM の初期化時に複数回のパスフレーズの入力が必要になります。
- 物理ボリューム(例えば、
- 論理ボリューム単位で暗号化
今回の私の用途では、システムが起動している間は常にマウントした状態である必要があること、起動時にパスフレーズの問合せを受ける回数を最小限にしたかった、という2点から論理ボリューム単位で暗号化することにしました。
手順
暗号化論理ボリュームを用意してマウントする
最初に、論理ボリュームを用意するため、ボリュームグループ名を確認します。
# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 2 1 0 wz--n- 3.29t 1.29t
この例では、vg1
というボリュームグループに空き領域があるので、このボリュームグループに新たな論理ボリューム(容量100GB)を作成することにします。
# lvcreate -L 100G -n lv1 vg1
これで /dev/vg1/lv1
という論理ボリュームができているはずです。結果は、lvs
コマンドで確認できます。
次に、論理ボリューム全体を暗号化します。cryptsetup
パッケージのインストールが必要です。
# apt-get update
# apt-get install cryptsetup
# cryptsetup luksFormat /dev/vg1/lv1
ここで暗号化のパスフレーズが聞かれるので、慎重に決定・入力してください。パスフレーズを忘れたら、この暗号化論理ボリューム上に格納されているデータは全て失われます。
暗号化した論理ボリュームを、システムに接続します。
# cryptsetup luksOpen /dev/vg1/lv1 secure
うまく接続できていれば、/dev/mapper/secure
というデバイスができているはずです。後は、このデバイスを対象として、通常通りにファイルシステムの作成とマウントを行います。
# mkfs -t ext4 /dev/mapper/secure
# mkdir /secure
# mount /dev/mapper/secure /secure
起動時に自動的に暗号化論理ボリュームがマウントされるようにする
以下のように、/etc/crypttab と /etc/fstab を編集してください。
# <target name> <source device> <key file> <options>
secure /dev/vg1/lv1 none luks
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/secure /secure ext4 defaults 0 0
起動時にパスフレーズが聞かれるので、正しく入力すると /secure
にマウントされます。
未解決の問題
lvextend
コマンドを使って論理ボリュームを拡張した場合に何が起きるのかは確かめていません。