Ubuntu Linux 10.04を、暗号化されたLVMにインストールする。

はじめに

ハードディスクをcryptsetupで暗号化しつつ、LVMで分割し、ノートPCにUbuntuをインストールしたときの記録です。以下を対象にしています。

ハートディスクの容量は80Gbyteです。

方針

ハードディスクを、以下のように分割します。

デバイス 容量[byte] マウントポイント 暗号化
/dev/sda1 500M /boot しない(できない)
/dev/sda2 11G / しない
/dev/sda3 残りすべて   する

/dev/sda3は、LVMで以下のように分割します。

デバイス 容量[byte] マウントポイント
/dev/mapper/vg0-swap 1G swap
/dev/mapper/vg0-tmp 500M /tmp
/dev/mapper/vg0-var 4G /var
/dev/mapper/vg0-home 残りすべて /home

手順

fdisk

CDで起動したのち、fdiskで/dev/sdaをsda1, sda2, sda3に分割します。

$ sudo fdisk /dev/sda

fdiskを終えたら、

警告: パーティションテーブルの再読込みがエラー16で失敗しました: Device or resource busy. カーネルはまだ古いテーブルを使っています。次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に使えるようになるでしょう。

と出ました。partprobeをしても同じ警告がでいたので、rebootしました。

ハードディスクにランダムなデータを書き込む
$ sudo dd if=/dev/urandom of=/dev/sda3 bs=`sudo blockdef --getss /dev/sda3` count=`sudo blockdev --getsize /dev/sda3`

76Gバイトを処理するのに、60866.7sec(17時間くらい!)かかりました (1.2MB/sec) 。

暗号化

cryptsetupで、/dev/sda3を暗号化します。

$ sudo cryptsetup --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sda3

これで暗号化でき、

$ sudo cryptsetup luksOpen /dev/sda3 crypt-sda3

すると、/dev/mapper/crypt-sda3によって/dev/sda3にアクセスできます。

LVM

CDで起動した環境に、lvm2パッケージをインストールします。

$ sudo aptitude -y install lvm2

これでLVMの設定ができます。

$ sudo pvcreate /dev/mapper/crypt-sda3
$ sudo vgcreate vg0 /dev/mapper/crypt-sda3
$ sudo lvcreate --size 1G --name swap vg0
$ sudo lvcreate --size 500M --name tmp vg0
$ sudo lvcreate --size 4G --name var vg0
$ sudo lvcreate --extents 100%FREE --name home vg0

終わったら、/dev/vg0/homeなどができています。

フォーマットとインストール

この時点でインストールできてもよさそうですが、インストーラがLVMをうまく認識してくれないようなので、手作業でフォーマットします。

$ sudo mkfs.ext4 /dev/sda1
$ sudo mkfs.ext4 /dev/sda2
$ sudo mkfs.ext4 /dev/mapper/vg0-swap
$ sudo mkfs.ext4 /dev/mapper/vg0-tmp
$ sudo mkfs.ext4 /dev/mapper/vg0-var
$ sudo mkfs.ext4 /dev/mapper/vg0-home

swapはmkswapできてもよさそうですが、これもインストーラがうまく認識しなかったので、いったんext4でフォーマットします(その上で、インストーラでswapに変更します)。

こののち、インストーラを起動して、インストールしました。

足りないパッケージのインストール

インストールされた環境には、lvm2パッケージとcryptsetupパッケージが含まれていないので、これをインストールします(cryptsetupパッケージは、CDで起動した環境には入っているのですが)。

$ sudo mount /dev/sda2 /target
$ sudo mount /dev/sda1 /target/boot
$ sudo mount /dev/mapper/vg0-home /target/home
$ sudo mount /dev/mapper/vg0-tmp /target/tmp
$ sudo mount /dev/mapper/vg0/var /target/var
$ sudo chroot /target
# aptitude -y install lvm2
# aptitude -y install cryptsetup
/etc/fstab

/etc/fstabを確認して、/dev/mapper以下のディレクトリが記載されているか確認します。

/dev/mapper/vg0-home /home           ext4    defaults        0       2
/dev/mapper/vg0-tmp /tmp            ext4    defaults        0       2
/dev/mapper/vg0-var /var            ext4    defaults        0       2
/dev/mapper/vg0-swap none            swap    sw              0       0
/etc/crypttab

/etc/crypttabに以下を記述して、起動時に暗号化されたパーティションが分かるようにします。

crypt-sda3 /dev/sda3 none luks
完了

ここで再起動すれば、インストールしたUbuntuが起動する、はずです。

所要時間

まる2日かかった。

雑感

本当は、/(正確には/etc)も暗号化したかったです。私はローカルのPostfixからSMTPサーバにアクセスしてメールを送信しているのですが、そのときに必要なパスワードがかかれたファイルが/etc/postfixにあるのです。これは見られたくないと思って一度/も暗号化しようとしたのですが、暗号化されたパーティションを読むのに必要なファイルが/の中にあるというジレンマになり、諦めました。こういう場合は、ファイルの本体を暗号化されたパーティションに置いて、シンボリックリンクをはっておけばいいんでしょうか。