3 セキュア・ブートで使用するためのカーネル・イメージおよびカーネル・モジュールの署名
この章では、セキュア・ブート用のカーネル・モジュールに署名する手順について説明します。
注意:
Oracleでは、Oracleの公式リリース・メカニズムの外部でソースから直接構築されるモジュールは一切サポートされていません。これらのモジュールのサポートについては、ハードウェア・ベンダーに連絡する必要があります。
セキュア・ブート・モードでのシステムは、オラクル社により署名されたブート・ローダーおよびカーネルのみをロードします。ただし、配備されたシステムで特定のハードウェアを有効にするために、サードパーティ製のモジュールを構築してインストールする必要がある場合があります。引き続きUEFI Secure Bootが必要な場合は、ブート時にモジュールが認識されるように、UEFI Secure Bootキー・データベース内またはShim MokManagerキー・データベース内の証明書に対して検証できるキーでモジュールに署名する必要があります。
UEK R6、UEK R6U1またはUEK R6U2を実行している場合は、モジュールの署名に使用されるキーをカーネルにコンパイルしてから、カーネルに再度署名する必要があることに注意してください。また、UEFIまたはMOKデータベースのいずれかに、カーネル署名キーを追加する必要があることにも注意してください。UEK R6U3以降では、署名キーがすでにMOKデータベースに登録されている場合、セキュア・ブートにおいて外部モジュールをロードできます。
重要:
サーバーでのMOKユーティリティの使用は、サーバー・ファームウェアの実装および構成に依存する場合があります。UEFI Secure Bootに使用する署名キーを手動で更新する前に、サーバーでこれがサポートされていることを確認してください。不明な場合は、ここに記載されている手順を実行しないでください。
MOKユーティリティを使用してMOKデータベースに証明書を追加するには、ShimがUEFIによってロードされた後に登録リクエストを完了できるよう、システムに物理的にアクセスできる必要があります。システムに物理的にアクセスできない場合は、このドキュメントの指示に従わないでください。
カーネル・リリースの差異により、モジュールへの署名方法に関する手順は、システム上のカーネル・バージョンによって異なります。特に、モジュール署名内のキー署名タイプがX.509からPKCS#7に変更されました。したがって、カーネル提供のsign-file
ユーティリティを使用してモジュールに署名するプロセスは引き続き使用されますが、モジュールが署名される特定のカーネルに適したユーティリティを使用することが必要な場合があります。
さらに重要なことは、UEK R6U3より前のUEK R6カーネルでは、UEFIまたはShim MokManagerキー・データベースで使用可能なキーに対して、同じレベルの信頼を提供していなかった点です。したがって、UEK R6、UEK R6U1またはUEK R6U2を実行しているシステムでは、セキュア・ブートで使用するカーネル・イメージおよびカーネル・モジュールに署名するための別の一連の手順が存在します。UEK R6に対するカーネル・モジュール証明書の信頼の設定を参照してください。
カーネル・イメージおよびカーネル・モジュールに署名するための要件
モジュールに署名するには、モジュールがロードされているカーネルのカーネル・ソースを含む、いくつかの必須パッケージをインストールする必要があります。また、この目的のために作成したキー・ペアの署名証明書も必要です。
カーネル・イメージおよびカーネル・モジュールに署名するには、次の要件があります。
必須パッケージのインストール
この手順には、最新のOracle Linux 7、Oracle Linux 8またはOracle Linux 9更新リリースの標準最小インストールで十分です。このステップでは、システムが運用環境としてUEKを使用していることを前提としています。
ノート:
システムでOracle Linux 7が実行されている場合は、ステップのdnf
コマンドを適切なyum
コマンド構文に置き換えます。
-
システムのカーネル・ソースを含むパッケージを取得します。
sudo dnf install kernel-uek-devel
RHCKを使用する場合、カーネル・ソースはkernel-develパッケージにあります。
-
システムを更新して、最新のカーネルおよび関連パッケージがあることを確認します。
sudo dnf update
-
システムをリブートします。
このステップは、カーネルがシステム更新に含まれている場合に実用的です。再起動により、操作中のカーネル・バージョンと、カーネル署名操作の開始時にシステムで実行されているカーネルが混乱しないようにします。
-
Oracle Linux 7システムのみ: yum構成で
optional_latest
リポジトリを有効にします。sudo yum-config-manager --enable ol7_optional_latest
-
モジュール署名操作を実行するために必要なユーティリティをインストールします。
sudo dnf install openssl keyutils mokutil pesign
-
モジュール・ソースを構築する必要がある場合は、ビルド・ツールが使用可能であることを確認するために、たとえば次のように、
Development Tools
グループをインストールする場合があります。sudo dnf group install "Development Tools"
署名証明書の生成
-
OpenSSLで証明書の生成時にデフォルト値を取得するために使用できる構成ファイルを作成します。
ベスト・プラクティスとして、残りのOpenSSL構成を使用して
/etc/ssl/x509.conf
にファイルを作成します。このファイルは次の例のようになります。[ req ] default_bits = 4096 distinguished_name = req_distinguished_name prompt = no string_mask = utf8only x509_extensions = extensions [ req_distinguished_name ] O = Module Signing Example CN = Module Signing Example Key emailAddress = first.last@example.com [ extensions ] basicConstraints=critical,CA:TRUE keyUsage=digitalSignature extendedKeyUsage = codeSigning subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always
-
この構成ファイルを使用して、新しいキー・ペアを生成します。
sudo openssl req -x509 -new -nodes -utf8 -sha512 -days 3650 -batch -config /etc/ssl/x509.conf -outform DER -out /etc/ssl/certs/pubkey.der -keyout /etc/ssl/certs/priv.key
このサンプル・コマンドは、10年間(3,650日)有効な署名証明書を作成します。キーが適切に保護されていることを確認します。
-
PEM形式で証明書をエクスポートします。
sudo openssl x509 -inform DER -in /etc/ssl/certs/pubkey.der -out /etc/ssl/certs/pubkey.pem
セキュア・ブートのためのカーネルの署名
UEFI Secure Bootでは、攻撃者が不正なOSをインストールして実行できないように、カーネルが信頼できる証明書で署名されている必要があります。
オラクル社では、公式のソフトウェア・チャネルを介して提供されるカーネル・リリースに署名して、その起点と整合性を検証します。カスタム・カーネルがboot
またはkexec
操作を実行するには、作成した署名証明書を使用し、その証明書で署名されたカーネル・イメージが信頼できることを確認して、カーネル・イメージに署名する必要があります。
セキュア・ブート用のカーネルの署名には、次のタスクを使用します。
NSSデータベースの構成
NSSデータベースには、カーネル署名用のツールがカーネル署名キーを取得するためのキーの完全なセットが格納されています。
-
NSSデータベースを構成します。
sudo certutil -d . -N
-
プロンプトに従ってデータベースのパスワードを作成します。
-
PKCS#2バージョンのカーネル署名キーをエクスポートします。
NSSユーティリティでは、PKCS#12形式のキー・ファイルのみを操作できます。したがって、カーネル・イメージに署名できるように、このステップを実行する必要があります。
sudo openssl pkcs12 -export -inkey /etc/ssl/certs/priv.key -in /etc/ssl/certs/pubkey.pem -name cert -out /etc/ssl/certs/cert.p12
-
要求されたら、エクスポートのパスワードを入力します。
このパスワードは、PKCS#12アーカイブのパスワードを参照します。実際には、このパスワードをNSSデータベースのパスワードと一致させます。
-
新しいデータベースに、PKCS#12バージョンのカーネル署名キーを追加またはインポートします。
sudo pk12util -d . -i cert.p12
-
プロンプトに従って、パスワードを入力します。
最初にNSSデータベース、次にPKCS#12アーカイブの2つのパスワードのプロンプトが表示されます。
Enter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: pk12util: PKCS12 IMPORT SUCCESSFUL
カーネル・イメージの署名
このタスクでは、pesign
ユーティリティを使用して、NSSデータベースの署名キーを使用してカーネルを新しい署名で再署名します。
-
既存のPE署名を削除します。
sudo pesign -u 0 -i /boot/vmlinuz-$(uname -r) --remove-signature -o vmlinuz.unsigned
-
NSSデータベース内のカーネル署名キーに基づいて新しい署名を割り当てます。
sudo pesign -n . -c cert -i vmlinuz.unsigned -o vmlinuz.signed -s
-
プロンプトに従って、パスワードを入力します。
NSS証明書データベースのパスワードは、NSSデータベースの構成で作成したパスワードです。
-
署名されたカーネルを
/boot
にコピーします。sudo cp -bf vmlinuz.signed /boot/vmlinuz-$(uname -r)
コマンドの
-b
オプションは、元のカーネル・イメージのバックアップを作成します。
MOKデータベースの更新
作成したキーは、UEFI Secure Bootキー・データベースに含まれていないため、このキーをShimのMOKデータベースに登録する必要があります。
-
次のコマンドを使用してキーをインポートします。
sudo mokutil --import /etc/ssl/certs/pubkey.der
このコマンドでは、システムのリブート後にMOK管理サービスでキーが登録されるときに使用する、1回のみ使用できるパスワードの入力を求められます。
-
システムをリブートします。
UEFI Shimにより、ブート時に
Shim UEFI key manager
が自動的に起動されます。作成したMOKキーを登録するためにブート・プロセスを中断するために、10秒以内にキーを入力したことを確認します。 -
任意のキーを押して、MOK管理を実行します。
-
メニューから
「Enroll MOK」
を選択します。 -
メニューから
「View key 0」
を選択して、キーの詳細を表示します。 -
表示される値がモジュールの署名に使用したキーおよびカーネル・イメージに挿入したキーと一致することを確認し、任意のキーを押して
「Enroll MOK」
メニューに戻ります。 -
メニューから
「Continue」
を選択します。「Enroll the key(s)?」
画面が表示されます。 -
キーを登録するには、
「Yes」
を選択します。 -
パスワードのプロンプトで、この手順の最初にキーをインポートしたときに使用したパスワードを入力します。
キーは、UEFI Secure Bootキー・データベース内に登録されます。
-
「Perform MOK management」
画面が表示されたら、メニューから「Reboot」
を選択します。
セキュア・ブートのためのカーネル・モジュールの署名
ノート:
UEK R6、UEK R6U1またはUEK R6U2を実行している場合は、かわりにR6に対するカーネル・モジュール証明書の信頼の設定に進みます。このセクションには、これらのUEK R6カーネルのセキュア・ブート設定を完了するための追加タスクが記載されています。
UEFI Secure Bootでは、攻撃者が不正なOSおよび悪意のあるドライバをインストールして実行できないように、カーネル・モジュールが信頼できる証明書で署名されている必要があります。
オラクル社では、公式のソフトウェア・チャネルを介して提供されるカーネル・リリースに署名して、その起点と整合性を検証します。ただし、他のドライバをインストールするには、それらの署名証明書を作成し、関連するカーネル・モジュールに署名し、その証明書で署名されたカーネル・モジュールを信頼していることを確認する必要があります。
UEK R6U3のセキュア・ブート実装は、UEFIおよびMOKデータベースで使用可能なプラットフォーム証明書を使用して署名されたモジュールを信頼するように更新されます。したがって、UEK R6U3からは、モジュール自体に署名するためのキーがデータベースに登録されます。
UEK R6、UEK R6U1およびUEK R6U2以外のUEKバージョンの場合、カーネル・モジュールへの署名には次のタスクが含まれます。
カーネル・モジュールの署名
sign-file
ユーティリティでは、モジュールがカーネルに対して正しく署名されていることを確認します。このユーティリティは、カーネル・ソース内で提供されます。
注意:
ここに示す手順では、現在実行中のカーネルのモジュールに署名することを前提としています。別のカーネルのモジュールに署名する場合は、正しいカーネル・バージョン・ソース内のsign-file
ユーティリティへのパスを指定する必要があります。そうしないと、そのカーネルのモジュールの署名タイプが、必要な署名タイプと正しく一致しない可能性があります。
-
モジュールがすでに
/lib/modules/
にインストールされていることを確認します。 -
現在実行中のカーネルに対して
sign-file
ユーティリティを実行します。sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /etc/ssl/certs/priv.key /etc/ssl/certs/pubkey.der /lib/modules/$(uname -r)/path/to/module.ko
-
(オプション)モジュールの署名情報を確認します。
modinfo module
たとえば、
hello
という名前のモジュールに次の出力が表示される場合があります。filename: /lib/modules/5.4.17-2036.103.3.1.el8uek.x86_64/extra/hello.ko description: Hello World Linux Kernel Module author: A.Developer license: GPL srcversion: D51FB4CF0B86314953EE797 depends: retpoline: Y name: hello vermagic: 5.4.17-2036.103.3.1.el8uek.x86_64 SMP mod_unload modversions sig_id: PKCS#7 signer: Module Signing Example Key sig_key: AB:2C:E3:AB:87:D9:9C:6A:31:B8:80:20:D4:92:25:F3:9A:26:DC sig_hashalgo: sha512 signature: 9F:B0:25:CB:14:C1:C7:10:7F:60:1E:E6:66:82:64:58:91:1F:01:A5: D9:03:1B:9C:2D:42:00:45:78:2B:FA:70:F8:C7:3B:1A:A2:42:00:09: 33:E0:81:1D:C6:E6:46:A5:FE:8B:9F:8C:3D:4E:A1:3A:05:52:ED:F6: 25:F9:88:98:D3:70:78:1D:7E:63:F3:73:C8:C8:14:C2:3A:52:B4:8F: 4C:8D:80:D9:0D:24:F8:C9:B1:28:82:B6:A9:27:56:C6:86:80:25:A5: 75:C8:78:A9:30:BD:01:4C:DD:43:7F:FD:41:98:2C:59:21:7D:39:17: EC:2C:C1:65:1D:95:F0:09:C7:F6:45:10:83:15:78:A2:EE:D4:73:79: B2:F0:57:C1:96:B3:4C:43:B8:D1:87:94:50:61:D6:EC:50:2B:6A:6C: 5C:C1:3E:8C:CB:6F:19:DC:EF:6C:12:07:03:99:B7:B3:22:0B:F6:AC: CB:40:C6:34:15:EA:1F:88:D4:4E:1C:87:2D:5A:92:F7:12:A6:E7:91: B3:80:AA:80:8F:49:B7:F0:F0:97:05:09:7A:65:30:4A:AE:10:BE:9F: 6A:E4:B2:24:BE:1A:21:D0:F6:15:05:DA:2C:64:EA:B2:8E:AC:6F:18: 40:65:21:F6:AA:17:31:AE:3F:3A:43:DB:A8:BC:71:79:EF:11:18:DE: 86:EE:74:2A:E0:44:FC:B3:FF:CB:CB:F0:CA:BD:7B:A1:57:84:D8:A6: 91:E5:B8:EF:1B:8A:63:16:43:03:AF:C4:C7:BF:52:9A:A9:23:75:C6: 42:54:69:4E:3D:51:56:5A:9D:9B:C7:11:5E:9A:30:87:5F:F3:5E:C3: AE:2C:1D:6F:C9:4D:15:E5:CF:EC:46:0E:EF:D9:BB:2F:DF:DF:54:EA: F3:B6:9C:A3:6F:80:19:B9:DF:FA:2A:30:4E:2E:70:74:11:F9:5C:F6: EE:1A:DF:86:C4:2B:36:7E:B4:A4:D4:7E:30:19:1A:D1:92:D3:A7:FB: 53:BF:67:C3:65:9E:4B:92:F0:6C:D4:6C:05:9B:0F:BF:D1:5B:CB:86: AE:68:00:AE:43:53:8B:7D:7E:18:20:CD:65:68:6C:4A:0D:93:A4:54: 09:39:9C:D3:BD:CD:17:B6:8A:D3:62:0C:CA:A8:FD:1A:52:CE:29:A0: 93:BF:AD:D2:58:3F:EA:4E:4B:50:31:6F:F6:B2:1E:87:C4:0A:9D:E4: 43:E9:C7:CA:E9:CB:EF:A6:61:5B:DA:01:33:37:66:DB:16:8D:7C:D7: 30:39:57:D4:0C:1A:54:AE:91:7B:FE:35:10:CC:34:03:99:EA:5A:57: E0:95:61:02:42:95:A2:F5:2E:72:30:95
カーネル・モジュール証明書によるMOKデータベースの更新
作成したキーは、UEFI Secure Bootキー・データベースに含まれていないため、このキーをShimのMOKデータベースに登録する必要があります。
-
次のコマンドを実行します。
sudo mokutil --import /etc/ssl/certs/pubkey.der
このコマンドでは、システムのリブート後にMOK管理サービスでキーが登録されるときに使用する、1回のみ使用できるパスワードの入力を求められます。
-
システムをリブートします。
UEFI Shimにより、ブート時に
Shim UEFI key manager
が自動的に起動されます。作成したMOKキーを登録するためにブート・プロセスを中断するために、10秒以内にキーを入力したことを確認します。 -
任意のキーを押して、MOK管理を実行します。
-
メニューから
「Enroll MOK」
を選択します。 -
メニューから
「View key 0」
を選択して、キーの詳細を表示します。 -
表示される値がモジュールの署名に使用したキーおよびカーネル・イメージに挿入したキーと一致することを確認し、任意のキーを押して
「Enroll MOK」
メニューに戻ります。 -
メニューから
「Continue」
を選択します。「Enroll the key(s)?」
画面が表示されます。 -
キーを登録するには、
「Yes」
を選択します。 -
パスワードのプロンプトで、この手順の最初にキーをインポートしたときに使用したパスワードを入力します。
キーは、UEFI Secure Bootキー・データベース内に登録されます。
-
「Perform MOK management」
画面が表示されたら、メニューから「Reboot」
を選択します。
UEK R6に対するカーネル・モジュール証明書の信頼の設定
このセクションの情報は、UEK R6U3より前のUEK R6カーネルを持つカーネル・モジュールに適用されます。つまり:
-
UEK R6
-
UEK R6U1
-
UEK R6U2
これらのUEK R6カーネルでは、モジュールの署名後、モジュールに署名するために使用されたキーをコンパイル済カーネル・イメージに挿入する必要があります。UEK R6は、カーネル組込みの信頼できるキーリングに一覧表示されているキーで署名されたモジュールのみを信頼します。そのため、更新されたカーネル・イメージは再度署名する必要があります。さらに、カーネルの署名に使用される顧客所有の証明書をUEFIまたはMOKデータベースに追加する必要があります。この方法で、カーネル・イメージは信頼されるようになり、セキュア・ブート・モードでブートできます。
リストされたカーネルにカーネル・モジュール証明書の信頼を設定するには、次のタスクを実行します。
-
カーネル・モジュールの署名
このタスクは、セキュア・ブートのためのカーネル・モジュールの署名に示されている最初のタスクと同じです。
-
MOKデータベースの更新
このタスクは、セキュア・ブートのためのカーネル・モジュールの署名に示されている2番目のタスクと同じです。
カーネル・モジュールの署名
sign-file
ユーティリティでは、モジュールがカーネルに対して正しく署名されていることを確認します。このユーティリティは、カーネル・ソース内で提供されます。
注意:
ここに示す手順では、現在実行中のカーネルのモジュールに署名することを前提としています。別のカーネルのモジュールに署名する場合は、正しいカーネル・バージョン・ソース内のsign-file
ユーティリティへのパスを指定する必要があります。そうしないと、そのカーネルのモジュールの署名タイプが、必要な署名タイプと正しく一致しない可能性があります。
-
モジュールがすでに
/lib/modules/
にインストールされていることを確認します。 -
現在実行中のカーネルに対して
sign-file
ユーティリティを実行します。sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /etc/ssl/certs/priv.key /etc/ssl/certs/pubkey.der /lib/modules/$(uname -r)/path/to/module.ko
-
(オプション)モジュールの署名情報を確認します。
modinfo module
たとえば、
hello
という名前のモジュールに次の出力が表示される場合があります。filename: /lib/modules/5.4.17-2036.103.3.1.el8uek.x86_64/extra/hello.ko description: Hello World Linux Kernel Module author: A.Developer license: GPL srcversion: D51FB4CF0B86314953EE797 depends: retpoline: Y name: hello vermagic: 5.4.17-2036.103.3.1.el8uek.x86_64 SMP mod_unload modversions sig_id: PKCS#7 signer: Module Signing Example Key sig_key: AB:2C:E3:AB:87:D9:9C:6A:31:B8:80:20:D4:92:25:F3:9A:26:DC sig_hashalgo: sha512 signature: 9F:B0:25:CB:14:C1:C7:10:7F:60:1E:E6:66:82:64:58:91:1F:01:A5: D9:03:1B:9C:2D:42:00:45:78:2B:FA:70:F8:C7:3B:1A:A2:42:00:09: 33:E0:81:1D:C6:E6:46:A5:FE:8B:9F:8C:3D:4E:A1:3A:05:52:ED:F6: 25:F9:88:98:D3:70:78:1D:7E:63:F3:73:C8:C8:14:C2:3A:52:B4:8F: 4C:8D:80:D9:0D:24:F8:C9:B1:28:82:B6:A9:27:56:C6:86:80:25:A5: 75:C8:78:A9:30:BD:01:4C:DD:43:7F:FD:41:98:2C:59:21:7D:39:17: EC:2C:C1:65:1D:95:F0:09:C7:F6:45:10:83:15:78:A2:EE:D4:73:79: B2:F0:57:C1:96:B3:4C:43:B8:D1:87:94:50:61:D6:EC:50:2B:6A:6C: 5C:C1:3E:8C:CB:6F:19:DC:EF:6C:12:07:03:99:B7:B3:22:0B:F6:AC: CB:40:C6:34:15:EA:1F:88:D4:4E:1C:87:2D:5A:92:F7:12:A6:E7:91: B3:80:AA:80:8F:49:B7:F0:F0:97:05:09:7A:65:30:4A:AE:10:BE:9F: 6A:E4:B2:24:BE:1A:21:D0:F6:15:05:DA:2C:64:EA:B2:8E:AC:6F:18: 40:65:21:F6:AA:17:31:AE:3F:3A:43:DB:A8:BC:71:79:EF:11:18:DE: 86:EE:74:2A:E0:44:FC:B3:FF:CB:CB:F0:CA:BD:7B:A1:57:84:D8:A6: 91:E5:B8:EF:1B:8A:63:16:43:03:AF:C4:C7:BF:52:9A:A9:23:75:C6: 42:54:69:4E:3D:51:56:5A:9D:9B:C7:11:5E:9A:30:87:5F:F3:5E:C3: AE:2C:1D:6F:C9:4D:15:E5:CF:EC:46:0E:EF:D9:BB:2F:DF:DF:54:EA: F3:B6:9C:A3:6F:80:19:B9:DF:FA:2A:30:4E:2E:70:74:11:F9:5C:F6: EE:1A:DF:86:C4:2B:36:7E:B4:A4:D4:7E:30:19:1A:D1:92:D3:A7:FB: 53:BF:67:C3:65:9E:4B:92:F0:6C:D4:6C:05:9B:0F:BF:D1:5B:CB:86: AE:68:00:AE:43:53:8B:7D:7E:18:20:CD:65:68:6C:4A:0D:93:A4:54: 09:39:9C:D3:BD:CD:17:B6:8A:D3:62:0C:CA:A8:FD:1A:52:CE:29:A0: 93:BF:AD:D2:58:3F:EA:4E:4B:50:31:6F:F6:B2:1E:87:C4:0A:9D:E4: 43:E9:C7:CA:E9:CB:EF:A6:61:5B:DA:01:33:37:66:DB:16:8D:7C:D7: 30:39:57:D4:0C:1A:54:AE:91:7B:FE:35:10:CC:34:03:99:EA:5A:57: E0:95:61:02:42:95:A2:F5:2E:72:30:95
カーネル・イメージへのモジュール証明書の挿入
-
証明書が格納されているディレクトリに移動します。
cd /etc/ssl/cert
-
モジュールの署名に使用された未加工のDER証明書を、圧縮されたカーネル・ブート・イメージに挿入します。
sudo /usr/src/kernels/$(uname -r)/scripts/insert-sys-cert -s /boot/System.map-$(uname -r) -z /boot/vmlinuz-$(uname -r) -c pubkey.der
INFO: Executing: gunzip <vmlinux-8ig4vO >vmlinux-QyW44r WARNING: Could not find the symbol table. INFO: sym: system_extra_cert INFO: addr: 0xffffffff82891616 INFO: size: 8194 INFO: offset: 0x1c91616 INFO: sym: system_extra_cert_used INFO: addr: 0xffffffff82893618 INFO: size: 0 INFO: offset: 0x1c93618 INFO: sym: system_certificate_list_size INFO: addr: 0xffffffff82893620 INFO: size: 0 INFO: offset: 0x1c93620 INFO: Inserted the contents of pubkey.der into ffffffff82891616. INFO: Used 1481 bytes out of 8194 bytes reserved. INFO: Executing: gzip -n -f -9 <vmlinux-QyW44r >vmlinux-M5uNR6
重要:
カーネルのブート・イメージの圧縮サイズを増加することはできないため、カーネルに追加可能なカスタム証明書は1つのみです。カーネル・ブート・イメージに複数の証明書を追加しないでください。
カーネル・イメージの署名
このタスクでは、pesign
ユーティリティを使用して、NSSデータベースの署名キーを使用してカーネルを新しい署名で再署名します。
-
既存のPE署名を削除します。
sudo pesign -u 0 -i /boot/vmlinuz-$(uname -r) --remove-signature -o vmlinuz.unsigned
-
NSSデータベース内のカーネル署名キーに基づいて新しい署名を割り当てます。
sudo pesign -n . -c cert -i vmlinuz.unsigned -o vmlinuz.signed -s
-
プロンプトに従って、パスワードを入力します。
NSS証明書データベースのパスワードは、NSSデータベースの構成で作成したパスワードです。
-
署名されたカーネルを
/boot
にコピーします。sudo cp -bf vmlinuz.signed /boot/vmlinuz-$(uname -r)
コマンドの
-b
オプションは、元のカーネル・イメージのバックアップを作成します。
MOKデータベースの更新
作成したキーは、UEFI Secure Bootキー・データベースに含まれていないため、このキーをShimのMOKデータベースに登録する必要があります。
-
次のコマンドを使用してキーをインポートします。
sudo mokutil --import /etc/ssl/certs/pubkey.der
このコマンドでは、システムのリブート後にMOK管理サービスでキーが登録されるときに使用する、1回のみ使用できるパスワードの入力を求められます。
-
システムをリブートします。
UEFI Shimにより、ブート時に
Shim UEFI key manager
が自動的に起動されます。作成したMOKキーを登録するためにブート・プロセスを中断するために、10秒以内にキーを入力したことを確認します。 -
任意のキーを押して、MOK管理を実行します。
-
メニューから
「Enroll MOK」
を選択します。 -
メニューから
「View key 0」
を選択して、キーの詳細を表示します。 -
表示される値がモジュールの署名に使用したキーおよびカーネル・イメージに挿入したキーと一致することを確認し、任意のキーを押して
「Enroll MOK」
メニューに戻ります。 -
メニューから
「Continue」
を選択します。「Enroll the key(s)?」
画面が表示されます。 -
キーを登録するには、
「Yes」
を選択します。 -
パスワードのプロンプトで、この手順の最初にキーをインポートしたときに使用したパスワードを入力します。
キーは、UEFI Secure Bootキー・データベース内に登録されます。
-
「Perform MOK management」
画面が表示されたら、メニューから「Reboot」
を選択します。
キーを信頼できることの検証
システムのブート後、キーが適切なカーネル・キーリングに含まれているかどうかを検証できます。検証は、実行中のカーネルのバージョンによって異なります。また、カーネル・バージョン間で実装が変更されたため、確認する必要があるキーリング名は一様ではありません。
カスタム・モジュールに署名するために生成されたキーが正しいキーリング内にリストされている場合は、セキュア・ブート・モードで、このキーで署名されたモジュールをロードできます。
UEK R7リリース
UEK R7では、.machine
キーリングが導入されています。.machine
キーリング内のキーは、Oracle Linuxカーネル内で使用できるよう信頼されています。すべてのMOKキーが、ブート時にこのキーリングにロードされます。
.builtin_trusted_keys
キーリングと同様に、新しい.machine
キーリングは.secondary_trusted_keys
キーリングにリンクされます。このリンクが設定されている場合、次の例に示すように、カーネルが.secondary_trusted_keys
キーリングを使用して署名付きカーネル・モジュールを検証するときに.machine
キーリングが参照されます。
sudo keyctl show %:.secondary_trusted_keys
Keyring
772746105 ---lswrv 0 0 keyring: .secondary_trusted_keys
252396885 ---lswrv 0 0 \_ keyring: .builtin_trusted_keys
660166481 ---lswrv 0 0 | \_ asymmetric: Oracle CA Server: 702a35b0d12005e5010c0614f7b8abf7c5bd5f73
86702374 ---lswrv 0 0 | \_ asymmetric: Oracle IMA signing CA: a2f28976a05984028f7d1a4904ae14e8e468e551
247354640 ---lswrv 0 0 | \_ asymmetric: Oracle America, Inc.: Ksplice Kernel Module Signing Key: 09010ebef5545fa7c54b626ef518e077b5b1ee4c
264616160 ---lswrv 0 0 | \_ asymmetric: Oracle Linux Kernel Module Signing Key: 2bb352412969a3653f0eb6021763408ebb9bb5ab
772320403 ---lswrv 0 0 \_ keyring: .machine
450491670 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 7c552922286d66bcb33c53d7ee0f1cd716ecdc63
100307441 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 39bff3f0f578f26e527321cafda2a9cdbd71143c
688922247 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 4ff35c3e09ce586fa776d56468d86b022af272f1
UEK R6U3以降のUEK R6更新(Oracle Linux 8およびOracle Linux 9上のRHCKを含む)
builtin_trusted_keys
キーリングとplatform
キーリングの両方内のキーは、モジュール署名とkexec
ツールの両方に関して信頼されています。標準手順に従ってモジュールに署名し、それをMOKデータベースに追加して、キーがplatform
キーリングに表示されるようにできます。これにより、キーリングは自動的に信頼されます。
キーをbuiltin_trusted_keys
キーリングにロードできる可能性があるため、たとえば次のように、モジュール署名キーの両方のキーリングを確認してください。
sudo keyctl show %:.builtin_trusted_keys
Keyring
441234704 ---lswrv 0 0 keyring: .builtin_trusted_keys
798307349 ---lswrv 0 0 \_ asymmetric: Oracle CA Server: 32a7ceb6c56614c69b4729b455254bfaf09569a4
277992501 ---lswrv 0 0 \_ asymmetric: Oracle Linux RHCK Module Signing Key: dd995b155c19b3a7c3ef7707b969e25f9639666e
1000618915 ---lswrv 0 0 \_ asymmetric: Red Hat Enterprise Linux kpatch signing key: 4d38fd864ebe18c5f0b72e3852e2014c3a676fc8
199403819 ---lswrv 0 0 \_ asymmetric: Red Hat Enterprise Linux Driver Update Program (key 3): bf57f3e87362bc7229d9f465321773dfd1f77a80
sudo keyctl show %:.platform
Keyring
705628740 ---lswrv 0 0 keyring: .platform
89698906 ---lswrv 0 0 \_ asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4
497244381 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: d6ee3a06a222bf4244b8986a531046e59c14eeef
710039804 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: c65d1d746ae4cb127762e1dbd7ade48215703c5c
730271863 ---lswrv 0 0 \_ asymmetric: Oracle America Inc.: 2e7c1720d1c5df5254cc93d6decaa75e49620cf8
535985802 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 795c5945e7cb2b6773b7797571413e3695062514
607819007 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: f9aec43f7480c408d681db3d6f19f54d6e396ff4
99739320 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: 430c85cb8b531c3d7b8c44adfafc2e5d49bb89d4
231916335 ---lswrv 0 0 \_ asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53
866576656 ---lswrv 0 0 \_ asymmetric: Oracle Linux Test Certificate: d30dffa37bec20ecfb1d3caee53cd746282e8cad
230958440 ---lswrv 0 0 \_ asymmetric: Module Signing Example Key: a43b4e638874b0656db2bc26216f56c0ac39f72b
UEK R6U3より前のUEK R6リリース
UEK R6U3より前のUEK R6リリースでは、カーネルのbuiltin_trusted_keys
キーリングにリストされたキーのみがモジュール署名に対して信頼されます。このため、モジュール署名キーは、モジュールの署名プロセスの一環としてカーネル・イメージに追加されます。
このキーリングをチェックして、作成したモジュール署名キーがリストされているかどうかを確認するには、次を入力します。
sudo keyctl show %:.builtin_trusted_keys
Keyring
892034081 ---lswrv 0 0 keyring: .builtin_trusted_keys
367808024 ---lswrv 0 0 \_ asymmetric: Oracle CA Server: fbcd3d4d950c6b2b0e01f0a146c5a4e3855ae704
230958440 ---lswrv 0 0 \_ asymmetric: Module Signing Example Key: a43b4e638874b0656db2bc26216f56c0ac39f72b
408597579 ---lswrv 0 0 \_ asymmetric: Oracle America, Inc.: Ksplice Kernel Module Signing Key: 09010ebef5545fa7c54b626ef518e077b5b1ee4c
839574974 ---lswrv 0 0 \_ asymmetric: Oracle Linux Kernel Module Signing Key: 2bb352412969a3653f0eb6021763408ebb9bb5ab
UEK R5
UEK R5の場合、組込みカーネル・キー、UEFI Secure Bootデータベース・キーおよびMOKデータベース・キーは、すべてカーネル・キーリング(secondary_trusted_keys
)に含まれています。このキーリングのキーは、モジュール署名で信頼され、kexec
ツールに対しても信頼されます。
このキーリングをチェックして、作成したモジュール署名キーがリストされているかどうかを確認するには、次を入力します。
sudo keyctl show %:.secondary_trusted_keys
Keyring
847333689 --alswrv 0 0 keyring: .secondary_trusted_keys
304199016 --alswrv 0 0 \_ keyring: .builtin_trusted_keys
1008872915 --alswrv 0 0 | \_ asymmetric: Oracle CA Server: 911ccad43f8dcc5e169cf7d89af9d28edd7e68aa
252474061 --alswrv 0 0 | \_ asymmetric: Oracle America, Inc.: Ksplice Kernel Module Signing Key: 09010ebef5545fa7c54b626ef518e077b5b1ee4c
164249372 --alswrv 0 0 | \_ asymmetric: Oracle Linux Kernel Module Signing Key: 2bb352412969a3653f0eb6021763408ebb9bb5ab
567204509 --alswrv 0 0 \_ asymmetric: Oracle America Inc.: 7b13dad59daa6adeacfff53c9a3b7e4f61fe068a
202164133 --alswrv 0 0 \_ asymmetric: Oracle America Inc.: 9c68fc11b0f85979388df4c8cc2c9c098928eda9
600928065 --alswrv 0 0 \_ asymmetric: Oracle America Inc.: fe1ea0d2db0446565aec7d637e2509c9900398c1
1023599957 --alswrv 0 0 \_ asymmetric: Oracle America Inc.: bc5971954c749d3d309852ef0f3c236fa498e8f6
837499579 --alswrv 0 0 \_ asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4
230958440 ---lswrv 0 0 \_ asymmetric: Module Signing Example Key: a43b4e638874b0656db2bc26216f56c0ac39f72b
260150072 --alswrv 0 0 \_ asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53
Oracle Linux 7でのUEK R4およびRHCK
Oracle Linux 7でのUEK R4およびRHCK (3.10.0)の場合、組込みカーネル・キー、UEFI Secure Bootデータベース・キーおよびMOKデータベース・キーは、すべてカーネル・キーリング(system_keyring
)に含まれています。このキーリングのキーは、モジュール署名で信頼され、kexec
ツールに対しても信頼されます。
このキーリングをチェックして、作成したモジュール署名キーがリストされているかどうかを確認するには、次を入力します。
sudo keyctl show %:.system_keyring
Keyring
490420691 --alswrv 0 0 keyring: .system_keyring
985562533 --alswrv 0 0 \_ asymmetric: Oracle America, Inc.: Ksplice Kernel Module Signing Key: 09010ebef5545fa7c54b626ef518e077b5b1ee4c
117527109 --alswrv 0 0 \_ asymmetric: Oracle America Inc.: 7b13dad59daa6adeacfff53c9a3b7e4f61fe068a
752001237 --alswrv 0 0 \_ asymmetric: Oracle America Inc.: 9c68fc11b0f85979388df4c8cc2c9c098928eda9
405618281 --alswrv 0 0 \_ asymmetric: Oracle America Inc.: fe1ea0d2db0446565aec7d637e2509c9900398c1
1018396318 --alswrv 0 0 \_ asymmetric: Oracle America Inc.: bc5971954c749d3d309852ef0f3c236fa498e8f6
264415311 --alswrv 0 0 \_ asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4
811847839 --alswrv 0 0 \_ asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53
38542369 --alswrv 0 0 \_ asymmetric: Oracle CA Server: 7efd70c89ee321c6be7098cd17fe7f4eded76a9e
230958440 ---lswrv 0 0 \_ asymmetric: Module Signing Example Key: a43b4e638874b0656db2bc26216f56c0ac39f72b
285314597 --alswrv 0 0 \_ asymmetric: Oracle Linux Kernel Module Signing Key: 2bb352412969a3653f0eb6021763408ebb9bb5ab