FC2ブログ

PCで: ウチのPCの今(3) ディスク暗号化編

 ウチの変態PCの紹介シリーズも、第三回になりました、
  1. ハード編
  2. SystemRescueCdカスタマイズ編
  3. ディスク暗号化編(本エントリ)
  4. 基本システム編

 今回は、ディスクの暗号化についてです。

 そもそも、今こんなにおかしな状況になっているのは、これが原因なんですよね。つまり、折角新しい環境に移行するんだから、ちょっと変わったことを試そうと思ったんですが、その中に、データの暗号化があったわけです。
 で、LUKS(Linux Unified Key Setup)というのに手を出してみました。
 やってみて、そう難しくないなぁ、と思ったわけです。だから、折角やったんだから使おう、と。
 しかし、これまで使っていたディストリビューションでこれをやるのは結構厄介で、ディストリビューションの移行もなんか面倒だった。
 それで、こんな中途半端なところで足踏みをしているわけです。

 さて、SystemRescueCdで起動し、旧環境のディスクをFireWireで繋いで使っていたところに、例のCRIB35EU3がやってきて、ハード的にはそろったところでつい始めてしまったLUKS導入。
 まずは、一応普通のブートもできるようにパーティションを切りました。ブート用、スワップ用、その他。
 ブート用は、そのまま普通のファイルシステムを作りました。特に考えず、ext4にしました。慣れてるので。
 で、本体はLVMを使うことにして、LUKS……というところでふと気付きました。
 スワップもやらなきゃ。

 スワップ領域というのは要するに、メインメモリが足りなくなったとき、メモリ上のあまりアクセスのなさそうなデータをディスク上に退避して空きを作り、そこを使っちゃおう、というときに使うものです。つまり、そこには一体どんなものが吐き出されるかわからない。
 ん? もしや、今のシステムって、そこら辺大丈夫なようになってるとか? スワップがセキュリティ上問題、という指摘はあまり聞きませんね。ふーむ。
 まあいいや。やっちゃおう。
[追記]
 スワップについては、ランダムなキーによる暗号化ができるようですね。今調べました。例えば、こんな感じです。
# cryptsetup -d /dev/random create swap /dev/sdb2
# mkswap -f /dev/mapper/swap
# swapon /dev/mapper/swap

[追記:2011.9.29]
 /dev/randomを使うとたまに待たされるので、/dev/urandomの方が便利でしょうか。
[追記終り]
[追記終り]

 というわけで、その手順をUSBメモリを使って再現してみました。本体の方の再現ですが、スワップの方も別にそうややこしいことありません。
 USBメモリは、/dev/sdeになっています。

 作業には、cryptsetupを使います。
 まず、最初に一回だけやればいい作業ですが、LUKSパーティションの初期化です。以下、下線部分がキーボードから入力したもの。
# cryptsetup luksFormat --cipher aes-xts-plain -s 512 /dev/sde1

WARNING!
========
This will overwrite data on /dev/sde1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.
# lsblk -f
NAME FSTYPE LABEL MOUNTPOINT
(略)
sde
└─sde1 crypto_LUKS

 "YES" は、大文字でタイプせよと書いてあるので、大文字です。

 これでLUKSパーティションはできたので、さて、使えるようにしましょう。luksOpenのときに、後の操作で使うための適当な名前(ここでは"test")を付けます。
# cryptsetup luksOpen /dev/sde1 test
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.
# lsblk -f
NAME FSTYPE LABEL MOUNTPOINT
(略)
sde
└─sde1 crypto_LUKS
└─test (dm-10)
# ls -l /dev/dm-10
brw-rw---- 1 root disk 253, 10 9月23日 14:34 /dev/dm-10
# ls -l /dev/mapper/test
lrwxrwxrwx 1 root root 8 9月23日 14:34 /dev/mapper/test -> ../dm-10

 次に、PV、VG、LV、ファイルシステムを作成します。
# pvcreate /dev/mapper/test
Physical volume "/dev/mapper/test" successfully created
# vgcreate vg_test /dev/mapper/test
Volume group "vg_test" successfully created
# lvcreate -L 1G -n lv_test1 vg_test
Logical volume "lv_test1" created
# mkfs.ext4 -j -L test1 /dev/vg_test/lv_test1
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=test1
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
# tune2fs -c -1 -i 0 /dev/vg_test/lv_test1
tune2fs 1.41.14 (22-Dec-2010)
Setting maximal mount count to -1
Setting interval between checks to 0 seconds

 試しにマウントしてみます。どこでもいいので、適当なマウントポイントにマウント。
# mount /dev/vg_test/lv_test1 /mnt/data
# ls /mnt/data
./ ../ lost+found/
# umount /mnt/data

 で、普通は不要ですが、取り敢えずもう内容を見えないようにするには、こうします。
# vgchange -a n vg_test
0 logical volume(s) in volume group "vg_test" now active
# cryptsetup luksClose test

 こんな感じです。

 あと、LUKSパーティションの情報を出力するには、こうします。
# cryptsetup luksDump /dev/sde1
LUKS header information for /dev/sde1

Version: 1
Cipher name: aes
Cipher mode: xts-plain
Hash spec: sha1
(略)

 それから、Openしている間は、これで状態を調べられます。
# cryptsetup status test
/dev/mapper/test is active:
cipher: aes-xts-plain
keysize: 512 bits
device: /dev/sde1
(略)

 あと、今回は最初なので不要でしたが、この後は、luksOpenをしたあとに、VGをvgchangeでアクティブにしてあげないといけません。

 以上まとめると、こんな感じでしょうか。
○ LUKSパーティションの初期化
cryptsetup luksFormat device

○ LUKSパーティションを使う
cryptsetup luksOpen device name
LVMを使っている場合は、以下を実行。
 vgchange -a y vg名

○ LUKSパーティション使用終了(シャットダウン以外で)
LVMを使っている場合は、以下を実行。
 vgchange -a n vg名
cryptsetup luksClose name

○ LUKSパーティション破棄(試したことない)
(オープンした状態で)
cryptsetup remove name

 さて、こうやって暗号化されたLVが準備できたので、旧ディスクから新ディスクへデータを移行しました。
 要するに、パーティションとか気にしながらファイルシステムごとにコピーしたわけです。
 それぞれを、実行時と同じようにマウントして丸ごとやってもよかったのですが、一部のちょっと変な場所に置いてあったデータのパスを変えたりしたので、ちまちまやりました。

 最近はcpコマンドに-aオプションなんてのができて、大変便利です。
 しかし、なんかこう、下記のように昔よくやってた感じでfind, cpioでやった部分もありました。なんかこの方が速いように思えましたが、実際はどうでしょう。時間計ったりとかはしなかったのでわかりません。
# find . -depth -print0 | cpio -pdm0 /xxx


 ところで、今回の暗号化は、前にも話したように、RAIDでディスクをたまに玉突きローテートすることでバックアップを取る、ということで、大事なデータの入ったディスクがそこら辺に置いてあるという状況になるためにやったことでした。
 当然のことながらネット経由で侵入されたりとかした場合には全然役に立ちません(笑)。

コメント

非公開コメント

プロフィール

水響俊二

Author:水響俊二
水響 俊二 [MIZUKI Shunji]

暫定的に、18禁作品の感想などは裏サイトで書いています。
   

最新記事
最新コメント
カテゴリ
検索フォーム
リンク
RSSリンクの表示
月別アーカイブ
アクセス解析中