Ubuntu Linux 10.04を、暗号化されたLVMにインストールする。
はじめに
ハードディスクをcryptsetupで暗号化しつつ、LVMで分割し、ノートPCにUbuntuをインストールしたときの記録です。以下を対象にしています。
- Dell LATITUDE x300
- Ubuntu Linux 10.04 Desktop日本語Remix
ハートディスクの容量は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にあるのです。これは見られたくないと思って一度/も暗号化しようとしたのですが、暗号化されたパーティションを読むのに必要なファイルが/の中にあるというジレンマになり、諦めました。こういう場合は、ファイルの本体を暗号化されたパーティションに置いて、シンボリックリンクをはっておけばいいんでしょうか。
参考文献
- http://omake.accense.com/wiki/LinuxDiskVolumeCrypto
- http://japan.internet.com/linuxtutorial/20070720/4.html
- http://webos-goodies.jp/archives/50567953.html
- http://www.kunitake.org/xoops/modules/weblog/blog-258.html
- http://itpro.nikkeibp.co.jp/article/Watcher/20061106/252664/
- http://d.hatena.ne.jp/kinneko/20080107/p15