Linux で暗号化ファイルシステムを使う

2008/01/16 | ラベル: , | このエントリーを含むはてなブックマークを表示

Linux でファイルシステムを暗号化する必要があったので試してみたメモ。

Linux, 暗号化, ファイルシステムでググると debian の情報が多くヒットした。debian はインストール時に暗号化ファイルシステムを選べるようだ。ということで初めて debian を使ってみた。

debian のパーティション設定ツールが使いづらい

RHEL などの DiskDruid と比べて非常に使いづらく感じた。LVMとか暗号化ボリュームとか、内部に論理パーティションを作ると削除できないし。仕方なしに別のターミナルからコマンドで削除するはめに。。暗号化ボリュームのキーとして「乱数値」が選べるが、パッケージ不足とやらで作成できず。ネットワークインストールだったからかも。とりあえずキーはパスフレーズにしてなんとかインストール完了。

暗号化ボリュームのマウント

パーティションはこんな感じ。

- /boot (ext3)
- 暗号化ボリューム
  - LVM
    - swap
    - /home (ext3)
- LVM
  - / (ext3)

暗号化ボリューム内に LVM で swap と /home を作成した。ブート時(というか暗号化ボリュームのマウント時)にパスフレーズの入力を求められる。正しいパスフレーズを入力するとマウントされる。

パスフレーズの入力なしに暗号化ボリュームをマウントする

パスフレーズ以外に、キーファイルを読み込ませて認証(ん?認証という言い方でよいのか?)することもできる。

キーファイルの生成
# dd if=/dev/urandom of=/boot/keyfile bs=1 count=1024

乱数を使って 1024バイトのファイルを生成。これをキーファイルとして使う。 キーファイルは暗号化ボリュームでないところに置く。今回は /boot に置いた。

キーファイルの登録

作成したキーファイルをキーとして登録する。

# cryptsetup luksAddKey /dev/sda5 /boot/keyfile
Enter any LUKS passphrase:   ←最初のパスフレーズを入力
key slot 0 unlocked.   ←「slot 0」のパスフレーズで解除した
Command successful.

キーファイルが登録されたか確認。

# cryptsetup luksDump /dev/sda5
LUKS header information for /dev/sda5

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 2056
MK bits:        256
MK digest:      de e1 10 fe 4b d9 a0 b7 20 ff 7e cb aa 4d 36 a1 bf 85 92 8a
MK salt:        ee 56 07 6a 24 ca 83 f2 57 97 83 1d 74 c2 ce f6
         5c 35 ee 07 e8 02 05 7e 84 f0 ec 00 77 21 39 5d
MK iterations:  10
UUID:           62c33609-06cd-48d8-a5d7-214df4fa9057

Key Slot 0: ENABLED
 Iterations:             115017
 Salt:                   3f dc 4b cc 61 81 64 89 17 02 b5 bc c6 ae c8 93
                         e0 e9 f2 be 9a f9 74 24 3e 7f 1b be 6e 53 b1 6a
 Key material offset:    8
 AF stripes:             4000
Key Slot 1: ENABLED
 Iterations:             65900
 Salt:                   06 20 15 74 24 36 bd 71 8c a7 e2 66 9b e5 2a 8b
                         21 53 4a 89 36 e9 5d a2 c6 63 4c 1b 5d d1 9d c4
 Key material offset:    264
 AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

slot 1 にキーファイルが登録された。

登録したキーファイルでマウントできることを確認する

今はマウントしている状態なので、アンマウントする。 今回の構成では、 暗号化ボリューム → LVM → ファイルシステム という階層で構成されているので、逆順でアンマウントしていく。

# umount /home
# swapoff -a
# lvchange -a n /dev/VolGroup00/home
# lvchange -a n /dev/VolGroup00/swap
# cryptsetup luksClose /dev/mapper/sda5_crypt

登録したキーファイルで sda5_crypt をマウントする。

# cryptsetup luksOpen /dev/sda5 sda5_crypt --key-file /boot/keyfile
key slot 1 unlocked.
Command successful.

キーファイルでマウントできることが確認できた。swap と /home をマウントしておく。

# lvchange -a y /dev/VolGroup00/home
# lvchange -a y /dev/VolGroup00/swap
# mount /home
# swapon -a

暗号化ボリュームを自動でマウントする

OS起動時に自動でマウントできるように設定する。

/etc/default/cryptdisks を編集。

# Mountpoints to mount, before starting cryptsetup. This is useful for
# keyfiles on removable media. Seperate mountpoints by space.
CRYPTDISKS_MOUNT="/boot"

/etc/crypttab を編集。

sda5_crypt /dev/sda5 /boot/keyfile luks

自動マウントできるかテストする。まず暗号化ボリュームを再度アンマウントする。 次に、/etc/init.d/cryptdisks を実行する。

# /etc/init.d/cryptdisks start
Starting remaining crypto disks... sda5_crypt(starting)INSECURE MODE FOR /boot/keyfile, see /usr/share/doc/cryptsetup/README.Debian.
key slot 1 unlocked.
Command successful.
done.

INSECURE だ、と警告が出たが、マウントは問題なし。README.Debian に書いてあるようにキーファイルのパーミッションを 400 にすると、警告は出なくなった。

# chmod 0400 /boot/keyfile
# /etc/init.d/cryptdisks start
Starting remaining crypto disks... sda5_crypt(starting)key slot 1 unlocked.
Command successful.
done.

あとは OS 再起動で自動マウントされることを確認して終わり。

参考

0 コメント: