Debian GNU/Linux インストール時にブロックデバイスの暗号化を選択できるので,
- /boot: ext4
- LVM
- /: btrfs
- /home: crypt+btrfs
- swap: crypt+swap
という構成にしたら起動時に /home と swap で2回 passphrase を入力しなければならなくなった (本当は / は LVM の中に入れず別 partition にして,LVMの手前で暗号化をかけるべきだった→これだと少なくとも1回で済む).ということで改善をはかる.
swap
まず swap.これは https://wiki.archlinux.org/index.php/Dm-crypt_with_LUKS#Without_suspend-to-disk_support を参考に毎回異なるランダム鍵で暗号化することにする.元の状態は以下.
[/etc/crypttab] hoge-home_crypt UUID=(略) none luks hoge-swap_crypt UUID=(略) none luks [/etc/fstab] /dev/mapper/hoge-home_crypt /home btrfs defaults 0 2 /dev/mapper/hoge-swap_crypt none swap sw 0 0
まず
% sudo swapoff -a % sudo cryptdisks_stop hoge-swap_crypt
でswapを解除して,hoge-swap_crypt を luksClose する.cryptdisks_stop の行は
% sudo cryptsetup luksClose hoge-swap_crypt
と同じ意味.cryptdisks_start/cryptdisks_stop は /etc/crypttab を参照してくれるのでmountのように使える.
https://wiki.archlinux.org/index.php/Dm-crypt_with_LUKS#Without_suspend-to-disk_support に従い
[/etc/crypttab] hoge-home_crypt UUID=(略) none luks hoge-swap_crypt /dev/mapper/hoge-swap /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
とし,LUKSのヘッダ情報を削除(wipe)する.
% sudo sh -c 'head -c 1052672 /dev/zero > /dev/mapper/hoge-swap; sync'
ちなみにヘッダ情報は
% sudo cryptsetup luksDump /dev/mapper/hoge-home % sudo cryptsetup luksDump /dev/mapper/hoge-swap
とかで参照可能.ヘッダがなくなると UUID でのアクセスができなくなるので,/etc/crypttab の hoge-swap_crypt の行では UUID は使えない.あと/dev/urandomではなく/dev/randomとすると乱数を得るのに時間がかかるので注意.
あとは,initrd 中に
[conf/conf.d/cryptroot] target=hoge-swap_crypt,source=UUID=(略),key=none
という感じで,luksOpen を指示するような記述があるので,
% sudo update-initramfs -u -k all update-initramfs: Generating /boot/initrd.img-3.8-2-amd64 cryptsetup: WARNING: target hoge-swap_crypt has a random key, skipped
で initrd を再生成しておく.
キーファイルを用いて passpharese 入力を省略
http://jehupc.exblog.jp/19078309/を参考に設定.このページでは /boot/luks_key に鍵を置いているが,私の環境では /boot の mount が /home よりも後のようなので,暗号化されていない / に置くことにした(そうしないとうまく起動できなかった).
% sudo dd if=/dev/urandom of=/etc/luks_key bs=1 count=1024 % sudo chmod 600 /etc/luks_key % sudo cryptsetup luksAddKey /dev/mapper/hoge-home /etc/luks_key % sudo cryptsetup luksDump /dev/mapper/hoge-home (→Key Slot 1が追加されたことを確認)
あとは,
[/etc/crypttab] hoge-home_crypt UUID=(略) /etc/luks_key luks hoge-swap_crypt /dev/mapper/hoge-swap /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
としておく.
コマンドメモ
device mapper の状態確認.
% sudo dmsetup ls --tree % sudo dmsetup info % sudo dmsetup status
cryptsetup に関しては luksOpen luksClose luksDump luksFormat luksAddkey ぐらいを頻繁に使う.