暗号化USBドライブからDebian GNU/Linuxを起動させるセットアップ法
こうしたブータブルUSBドライブをセットアップする準備としては、起動用の光学ドライブを装備したコンピュータをインターネットに接続し、外付けUSBドライブを接続するUSB 2.0の空ポートを確保しておかなくてはならない。本稿ではLennyと呼ばれているテスト版Debianを用いて標準的なインストールができるようにするが、このシステムを真の意味で“ライブ化”するには若干の調整作業が必要である。
まず最新版Debian Lennyのネットワークインストール(netinst)用CDイメージをダウンロードしてそれをCDに焼き込み、そこからコンピュータを起動する。正常に進めばDebianのロゴサインが表示されるはずだ。次にブートプロンプトにてDebian-Installerに移行するが、その際にEnterキーを押すとテキストモードのインストーラが、installgui
と入力するとGUIモードのインストーラが起動される。
このインストーラからはパーティション方法が確認されるので、ここでのセットアップ用には“Guided – use entire disk and setup encrypted LVM”を選択する。その後しばらくするとパーティション対象のディスクを指定するよう求められる。通常なら内蔵(internal)ハードディスクを選択するところだが、ここのセットアップではこれを指定してはならない。ここで用いる外部ディスクはSCSIデバイスとして認識されているはずだが、これはリストの先頭に表示されないので注意が必要だ。
次に確認されるのはパーティショニングの方式であるが、ここでは“All files in one partition (recommended for new users)”を選択しておく。ここで指定したディスクについては、インストーラによるユーザへの再確認後にその内容が消去される。これは暗号化を施すために必要なプロセスだが、処理完了までにはかなりの長時間を要す(100GB当たり2時間程度)。この処理が終わるとインストーラにより暗号化パスワードの入力が求められた後、通常のインストール処理が開始される。
必要なすべてのパッケージがインターネット経由でダウンロードされてそのインストールが完了すると最終ステップに進むが、ここではGRUBブートローダをインストールするかの選択を行う。その際にインストーラからは、デュアルブート用の設定が必要であればGRUBを内蔵ディスクにインストールしておくようにという旨の説明が提示されるはずだ。しかしながらここでのセットアップでは、GRUBのインストール先を外部(external)ディスクにしておかなくてはならない。
これらが完了するとインストーラは新規のシステムによるリブートを試みるが、このステップは下記の設定変更が行われていない限り成功しないはずだ。
- コンピュータのBIOS設定にて、USBデバイスからの起動オプションを有効化する。具体的な手順はBIOSの種類ごとに異なるが、この操作そのものは難しいものではない
-
GRUBから見ると、USBディスクのブートパーティションは先頭ディスク上の第1パーティションであると認識される。ところが通常インストーラはインストール作業中に内部ディスクを先頭ディスクとして扱う。よってここでのセットアップとしては、grub/menu.lstを編集して
(hd1,0)
などとされているGRUBのroot指定を(hd0,0)
に変更しておく必要がある。この修正は# groot=
で始まる行および各メニュー区画のroot
行にて施す -
USBサブシステムが使用可能となる前に暗号化パーティションへのアクセスをカーネルが試みると、ブートプロセスは失敗する。その対策として、grub/menu.lstの
# kopt=
で始まる行および各メニュー区画のカーネルコマンド行にてrootdelay=10
を追加する
この修正を施したコンピュータはUSBディスクからの起動が可能となっているはずであり、実際のブート時には、暗号化パーティションのロック解除用パスワードの入力が求められることになる。
ブータブルUSBドライブの“ライブ化”
こうしてインストールされたシステムは、ブートプロセス中にハードウェアデバイスの検出と設定が自動実行されるという意味においては既に“ライブ化”が終了している。ただし、このUSBディスクを用いて他のコンピュータを起動させるには、もう少し設定変更を施さなくてはならない。
最初に取り組むべき問題は、ディスクドライブの識別である。USBディスクのデバイスパス(例えば最初のSCSIデバイスとして認識される場合は/dev/sda)はインストーラによって、イニシャルRAMファイルシステム(initrdイメージ)、スタティック暗号化ファイルシステムリストの/etc/crypttab、ファイルシステムテーブルの/etc/fstab内部の暗号化オプションとして書き込まれるようになっている。こうした状態は、インストール時にマッピングされたものと同じデバイスパスにUSBディスクがマッピングされている限り、特に問題は引き起こさないはずである。ところがコンピュータが異なればデバイスパスが同じである保証は無くなるし、同じコンピュータであっても別のUSBディスクを接続した時点で変更される場合も出てくる。
この問題を回避するには、Universally Unique Identifiers(UUID)を用いたパーティション参照を行うように修正すればよく、必要な情報は下記のコマンドにて取得できる。
# ls -l /dev/disk/by-uuid lrwxrwxrwx 1 root root 10 2008-01-15 22:34 0897f48a-462d-4ec5-9ef1-a60574fa1182 -> ../../sda5 lrwxrwxrwx 1 root root 10 2008-01-15 22:34 de018d5f-4dbc-4ed6-9724-4d5c793658aa -> ../../sda1
この出力例にある値をそのまま適用する場合、/etc/crypttabおよび/etc/fstabにおける/dev/sda1と/dev/sda5への参照を、それぞれUUID=de018d5f-4dbc-4ed6-9724-4d5c793658aa
およびUUID=0897f48a-462d-4ec5-9ef1-a60574fa1182
に変更すればいい。
なお/etc/crypttabの変更後は「update-initramfs -t -u
」を実行してinitrdイメージへの修正を行う必要がある。
次に解決するべき課題はXサーバ(つまりはウィンドウシステム)に関する問題である。このサーバ設定はインストール時に実施され、その設定内容は/etc/X11/xorg.confに保存されるようになっている。そしてここでのセットアップについては、関連ハードウェア(ディスプレイアダプタ、スクリーン、キーボード、ポインティングデバイスなど)が変更された場合に、root権限を取得した上で「dpkg-reconfigure xserver-xorg
」というコマンドを実行し、Xサーバの再設定を行わせる必要があるのだ。
もっとも複数のコンピュータ間を行き来する場合、こうした処理を伴うのはあまり歓迎される方式ではない。対策の1つは、予め/etc/X11/xorg.confを削除しておいて、Xサーバによる再設定処理を強制させることである。私の場合はこの方法で対処できない場合もあったので、/etc/init.d/bootmisc.shにあるdo_start
関数の末尾(閉じる側のカッコの直前)に次の処理を追加しておくことにした。
dpkg-reconfigure -fnoninteractive xserver-xorg
この方式が正常に機能するには、最後に行われたXサーバ再構成時のインタラクティブ設定として(インストールプロセスの実行時など)、ディスプレイアダプタとスクリーンの自動検出が選択されている必要がある。なおキーボードレイアウトに関するユーザのプレファレンス設定は、この方式でも保持される。
その他にはネットワーキング関連の問題などが生じるかもしれないが、それらを除けば大部分のマシンにてこのセットアップ方式が利用できるはずである。
まとめ
本稿で解説したのは、標準インストールを基に一部のファイルに若干の変更を施すだけで、暗号化の施された外部ドライブにてライブ起動可能なシステムをセットアップする方法である。もっともLinuxにしろDebianにしろ、あるいは暗号化規格にしろハードウェアにしろ、コンピュータに関する技術は日進月歩で進化を続けているので、ここで用いた設定法もやがては実状に合わなくなって来るであろうし、むしろ将来的にはブータブルUSBドライブの作成そのものが手間のかからない作業になる可能性が高いというのが私の予測である。
Avi Rozenは、マシンビジョン関連の製品開発を行うメーカにて研究開発担当のシニアエンジニアを務めている。