CentOS7 : システム全体を暗号化したOSの自動起動(LVM on LUKS)その1

[追記]実用的な自動起動環境の構築方法について、新しい記事を公開しました。
CentOS7 : システム全体を暗号化したOSの自動起動(LVM on LUKS)その2

 どれほど需要があるか不明ですが、boot パーティション以外のシステム全体を暗号化した CentOS7 をなんとか自動起動できないものかと試してみたので、公開します。
 自動起動を有効にするためには、何らかの方法でブートローダーが暗号化を解除する鍵に常時あるいは起動時にアクセスできる必要があります。
 通常は、起動の際にパスフレーズを入力して起動するのですが、これを常時アクセス可能な場所に保存するということです。

つまり、キャッシュカードに暗証番号を書くようなもので、決しておすすめしません。

 鍵の保存場所を USB などにしておけば、一応は意味があるかもしれませんね。

スポンサーリンク(広告)
スポンサーリンク(広告)

Step1: 環境の確認

 テスト環境は、CentOS7(CentOS-7-x86_64-Minimal-1708)を 暗号化構成(LVM)でインストールしたものを使用しました。
 暗号化構成でインストールする方法は、以下の私の記事を参考にしていただければ幸いです。
 3.4.1 パーティションの設定(CentOS 7 と Windows とのデュアルブート環境の構築 )

 その他、暗号化構成についてはこちらのページが詳しいです。
 dm-crypt/システム全体の暗号化

 ざっくりと各コマンドで環境を確認します。

Step2: 鍵の作成とキースロットの追加

 さて、cryptsetup luksDump /dev/sda2 で確認したところ、キースロット0だけ使っている状態です。
 これは、OS インストール時に作成したパスフレーズで、現在起動するために使った鍵です。
 これを使って自動起動の設定もできますが、折角なので鍵の強度を上げたいと思います。4096バイトの鍵を作成します。
 鍵の保存場所は、OS 起動時に暗号化されていない状態でアクセス可能な場所です。通常 /boot 以下は暗号化されていませんので、こちらに保存します。USB などを使うのであれば、そちらの方が良いでしょう。

 続いて作成した鍵をキースロットに登録します。

 正しくキーが追加されたか確認します。

 キースロット1に鍵が追加されています。

Step3: GRUB2 の設定

 追加した鍵をブートローダーが認識できるように、場所を指定します。
 指定するときのパラメータの書式は、以下の通りです。

 このうち、暗号化解除の対象を示すパラメータは、以下の通り省略しても大丈夫です。

 ということで、私が追加すべきパラメータは、以下の通りです。

 /boot は、OS がマウントするポイントですので取り除きます。

 /etc/default/grub の GRUB_CMDLINE_LINUX= のところにパラメータを追加します。

 と、昔はこの方法を使っていたのですが、RHEL8以降など最近は /boot/loader/entries 設定が /boot/grub2/grub.cfg に優先して適用されてしまうようで、grub2-mkconfig を実行してもスルーされてしまいます。
 ということで、以下のコマンドで設定します。

 ちなみに、これを実行すると、/etc/default/grub の設定も更新されますが、/boot/grub2/grub.cfg は更新されないようなので、次項の grub2-mkconfig も実行します(意味なさげですが)。

 GRUB2 設定を再生成します。

Step4: initrd の編集と作成

 Dracut を使って、initrd を編集します。
 追加するパラメータを /etc/dracut.conf.d/luks_key.conf に新規作成します。

 ついでに、LVM のスナップショット機能も使うのであれば、以下のパラメータも追加します。

 initrd を 再作成します。

Step5: 再起動して確認

 無事起動すれば、環境構築完了です。

 この状態で /boot/keyfile を削除すると、ちゃんとパスフレーズで起動できるようにフォールバックしてくれます。
 でも、initrd をいじっているせいか入力画面が若干違います。

 /boot/keyfile を削除したときパスフレーズの入力画面にフォールバックはするのですが、環境によってはアンロックできないことがあります。
 何らかのバージョン依存のバグのような気がしますが、とりあえず、そのようになったときの対処法です。
 いずれかの方法で起動できると思います。

(1)起動カーネルの選択画面でレスキューモードを選択できる場合(推奨)
Red Hat Graphical Boot を無効にします。

(2)とりあえず起動できればよい場合 その1
 起動カーネルの選択画面で起動したいカーネルにカーソルを合わせて e を押す。起動オプションが表示されるので “rhgb” を削除して、 Ctrl + x を押す。

(3)とりあえず起動できればよい場合 その2
 Red Hat Graphical Boot の画面(画面下の進捗バーが伸びていくヤツ)が表示されたら ESC を押してキャンセルする。

Step6: 環境の復元

 とりあえず、自動起動できるようになったのは分かったが、元に戻したいときは、逆に手順を進めれば元に戻せます。

 Dracut の設定削除と再作成。

 何気に dracut のオプションを変えてみましたが、特に意味はありません。

 /etc/default/grub から 先ほど追加したパラメータを削除。してもしなくても動作は変わらないかもしれないけど。して GRUB2 設定を再生成。

 事故防止のためエディター開いてやったほうが良いです。

 キースロットから鍵を削除します。

 ちなみに、パスフレーズの方を消そうとすると、ちゃんとエラーがでて暴挙を止めてくれます。

 最後に、作成した鍵を消します。

 再起動すると、見慣れたパスフレーズの入力画面が表示され、OS インストール時に設定したパスフレーズで OS 起動が可能です。

スポンサーリンク(広告)
スポンサーリンク(広告)