やるきなし

2013/06/03 17:51 / dm-crypt 関連メモ

Debian GNU/Linux インストール時にブロックデバイスの暗号化を選択できるので,

という構成にしたら起動時に /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 ぐらいを頻繁に使う.

Related articles