セキュアブートを使用したSLES 15へのカスタムカーネルモジュールのインストール方法

Secure Boot が有効になっている SLES 15 にカスタム カーネル モジュールをロードするには、実行するカーネルに合わせてモジュールをビルドし、完成した.koファイルを信頼できる署名証明書で署名し、その証明書をマシン オーナー キー (MOK) として登録してから、モジュールをロードしますmodprobe。MOKは、SUSE の shim と Linux カーネルが Secure Boot モジュールの検証に信頼できるローカルで管理される証明書です。署名が拒否された場合の回避策として Secure Boot を無効にしないでください。以下の手順は、マシンを制御し、再起動時にキーの登録を承認できる管理者向けです。

このガイドは、SUSEのSLES 15 SP7管理ドキュメントおよびSUSEのカーネルモジュールパッケージングガイダンス(2026年10月6日確認済み)に基づいています。コマンドでは、acme_driverモジュール名の例として を使用していますが、必要に応じて接尾辞を除いた実際のモジュール名に置き換えてください.ko。これらはコマンド例であり、テスト済みのホストからの出力ではありません。

mokutil を使用してセキュアブートをチェックし、uname を使用して実行中の SLES カーネルを識別するターミナル コマンドの例
プリフライトコマンドの例:モジュールをビルドする前に、セキュアブートの状態を確認し、正確なカーネルリリースを記録します。

この方法が適切な場合

この方法は、実行中のカーネルとは別に提供されるカスタムのアウトオブツリーモジュールに対して、ターゲットのSLESカーネル用にビルドを再構築または取得でき、サーバーに証明書を登録できる場合に使用します。これは、SUSE Secure Bootおよびshimパス経由で起動するシステムに適用されます。ベンダーが公式のSLES 15ドライバパッケージを提供している場合は、まずそのサポートされているインストールおよび署名手順を使用してください。ベンダーのパッケージは、手動でコピーするよりもカーネルの互換性とアップデートを適切に処理できる場合があります。

セキュアブートはブートチェーンを検証し、カーネルは適用ポリシーに基づいてロード可能なモジュールの署名もチェックします。モジュールは署名されていても、異なるカーネルABIをターゲットにしている場合、不足しているシンボルに依存している場合、または間違ったアーキテクチャ向けにビルドされている場合は、ロードに失敗する可能性があります。逆に、カーネルと一致しているからといって、署名されていないモジュールが信頼できるとは限りません。署名は信頼性を確保するものであり、互換性を確立したり、コードの安全性を証明したりするものではありません。

始める前に

  • 管理者アカウントを使用し、メンテナンス期間が確保されていることを確認してください。MOKへの登録には再起動とMokManagerでの承認操作が必要で、通常はローカルまたはリモートコンソールを介して行われます。
  • uname -rとを使用して、実行中のカーネルとセキュアブートの状態を確認しますmokutil --sb-state。そのカーネルフレーバーに対応するカーネル開発ファイルとツールチェーンを使用してモジュールをビルドします。パッケージ名と必要なファイルは、SLES サービスパック、カーネルフレーバー、ビルド方法によって異なるため、ターゲットシステムで有効になっているリポジトリと照合して確認してください。
  • 秘密署名鍵の保存場所を決定します。運用環境の場合は、組織が管理する署名サービスまたは承認済みの鍵管理プロセスを使用します。ラボ環境や単一の管理対象ホストの場合は、ローカルで生成した鍵でも問題ありません。秘密鍵は保護してください。サーバーは登録に公開証明書を必要としますが、秘密鍵は必要ありません。
  • 復旧パス、モジュールのソースコードまたはベンダーパッケージ、および正常に動作することが確認されているカーネルを常に用意しておいてください。デバイスとカーネルの要件を理解するまでは、本番環境のハードウェアにドライバをロードしないでください。

1. 署名キーと公開証明書を作成する

保護された署名システム上で、秘密鍵とDERエンコードされたX.509証明書を作成します。SUSEのカーネルモジュールパッケージングに関するガイダンスでは、codeSigning現在のSLES 15サービスパックで拡張鍵の使用が推奨されています。この例では、OpenSSLと分かりやすい証明書名を使用します。

openssl req -new -x509 -newkey rsa:2048 -sha256 \
  -keyout module-signing.key \
  -out module-signing.der -outform DER -nodes \
  -days 4745 -addext "extendedKeyUsage=codeSigning" \
  -subj "/CN=Custom Module Signing/"
chmod 600 module-signing.key

この-nodesオプションでは秘密鍵が暗号化されないため、ファイル権限とストレージ管理が重要になります。秘密鍵を汎用サーバーにコピーしたり、パッケージに埋め込んだりしないでください。組織のポリシーで暗号化された鍵、ハードウェアによる署名、鍵のローテーション、または異なる証明書ライフサイクルが要求されている場合は、そのポリシーと署名ツールの要件に従ってください。module-signing.der公開鍵を登録するシステムにのみ転送してください。

OpenSSLコード署名証明書コマンドと秘密鍵に対する制限付きアクセス権限を示すターミナルの例
証明書の作成および鍵のアクセス許可に関するコマンドの例。秘密鍵はアクセスを制限して保管してください。

2. 対象カーネル用のモジュールをビルドし、署名する

モジュールは、 で示されるカーネルリリースと完全に一致するものに対してビルドしてください。ソースプロジェクトのビルド手順によって、必要なコンパイラ、ヘッダー、および構成が決まります。すべてのカスタムモジュールに適合する単一のビルドコマンドはありません。カーネルの不一致を診断する必要がある場合は、でuname -r結果を確認してください。vermagicmodinfo

コンパイルおよびパッケージングまたはストリッピング処理が完了した後、最終モジュールファイルに署名します。SUSE の署名ヘルパーについては、以下のドキュメントを参照してください/usr/lib/rpm/pesign/kernel-sign-file。次の例では、PKCS#7 フォーマットと SHA-256 ダイジェストを使用しています。

/usr/lib/rpm/pesign/kernel-sign-file -i pkcs7 sha256 \
  module-signing.key module-signing.der acme_driver.ko

ヘルパーは、システム上の SUSE 署名統合から利用可能である必要があります。ヘルパーが見つからない場合は、任意の署名コマンドを使用するのではなく、公式の SLES/KMP ドキュメントと有効化されたリポジトリでサポートされている署名設定を確認してください。モジュール署名がファイルに追加されます。署名後にモジュールを削除、編集、再圧縮、またはその他の方法で変更しないでください。このような変更は署名を無効にする可能性があります。最終的な署名手順を繰り返せるように、元のビルド成果物を保持してください。

SUSE kernel-sign-file コマンドで acme_driver.ko に PKCS7 SHA-256 署名を付与する例
SUSE署名ヘルパーは、保護された秘密鍵とそれに対応する公開証明書を使用して、完成したモジュールファイルに署名します。

3. 公的証明書をMOKとして登録する

SLESサーバー上で、module-signing.derrootユーザーが読み取れる場所に公開証明書を配置し、登録キューに追加します。

mokutil --root-pw --import module-signing.der
mokutil --list-new

SUSE のドキュメント--root-pwでは、root パスワードを使用して保留中の登録を承認する方法として説明されています。import コマンドは証明書をキューに追加しますが、すぐに登録するわけではありません。サーバーを再起動します。MokManager で、[ディスクからキーを登録]を選択し、証明書を選択して登録を確認し、要求された承認を完了します。メニューの文言は、shim/MokManager のバージョンによって若干異なる場合があります。登録画面にアクセスできない場合は、ブート パスを確認し、コンソールへのアクセスを手配してください。import コマンドが成功したからといって、証明書が登録されたと決めつけないでください。

サーバー起動後、登録済みリストにキーが表示されていることを確認してください。

mokutil --list-enrolled
mokutilを使用してDER証明書をインポートし、保留中のMOKエントリを一覧表示するターミナルシーケンスの例
インポート処理では、再起動時に証明書をレビューするためにキューに追加し、mokutil --list-new保留中の登録要求を表示します。
MokManagerの登録画面で、「ディスクからキーを登録」が選択され、確認プロンプトが表示されます。
再起動時に、MokManagerは鍵登録の選択肢と確認手順を表示し、権限のあるオペレーターが承認する必要があります。

4. インストール、モジュールの依存関係の更新、およびロード

署名済みのファイルを、実行中のカーネルの extra-modules ディレクトリにコピーし、依存関係マップを更新して、名前でモジュールを要求します。起動したカーネルが異なる場合は、実際のカーネルリリースに置き換えてください。

release=$(uname -r)
install -D -m 0644 acme_driver.ko \
  "/lib/modules/$release/extra/acme_driver.ko"
depmod -a "$release"
modprobe acme_driver

modprobeはモジュールの依存関係を解決するため、一般的に よりも推奨されますinsmod。ドライバが提供する実際のデバイスまたは機能をテストしてください。コマンドが成功しただけでは、ハードウェアが正しく動作していることを証明できません。モジュールを起動時にロードする場合は、 などのファイルにモジュール名を独自の行に追加します/etc/modules-load.d/acme_driver.conf。SLES は、これらの設定ファイルに systemd のモジュールロードメカニズムを使用します。

現在のカーネルのエクストラディレクトリに署名付きモジュールをインストールし、depmodを実行し、modprobeを呼び出すターミナルコマンドの例
署名済みモジュールを対応するカーネルリリースにインストールし、依存関係情報を再構築してから、でロードしますmodprobe。

5. 信頼パスを確認し、障害をトラブルシューティングする

役立つチェック項目は以下のとおりです。

mokutil --list-enrolled
modinfo -F signer /lib/modules/$(uname -r)/extra/acme_driver.ko
lsmod | grep acme_driver
journalctl -k -b | tail -n 80

modinfo -F signerモジュールに埋め込まれた署名者のメタデータを表示します。これだけでは、証明書が登録されていることや、実行中のカーネルが署名を受け入れたことを証明するものではありません。modprobeセキュアブートが有効になっている状態で正常に動作し、カーネルログの検査とデバイスの機能チェックが行われる方が、より有用な証拠となります。図に表示されているターミナル出力は、コマンドと出力例であり、この記事のために実行されたテストのレポートではありません。

症状チェックすべき事項
Key was rejected by serviceまたは署名関連の読み込みエラーこのモジュールに署名した証明書がに登録されていることを確認しますmokutil --list-enrolled。モジュールが最終変更後に署名されたことを確認しますjournalctl -k -b。
Invalid module formatモジュールをvermagicと比較しますuname -r。実行中のカーネルとそのフレーバーに合わせて再ビルドします。
Unknown symbolまたは未解決の依存関係適切なビルド環境と必要な関連モジュールを確認し、depmod -aインストール後に再度実行してください。
Module not foundファイル名、モジュール名、カーネル固有の宛先ディレクトリ、および依存関係マップを確認してください。に渡される名前はmodprobe通常、を省略します.ko。

SUSEはモジュールがサポートされているかどうかも追跡しており、サポートされていないモジュールをロードすると、カーネルのサポート状態や汚染状態に影響を与える可能性があります。このポリシーは署名検証とは別個のものです。サポートされていないモジュールの設定を変更しても、署名キーは登録されず、拒否された署名も修復されません。サポート対象の運用システムでこのポリシーを変更する前に、SUSEのサポートガイダンスを確認してください。

登録されたMOK、モジュール署名者のメタデータ、およびlsmodでのモジュール名を示すターミナルチェックの例
登録済みキーリスト、署名者メタデータ、ロード済みモジュールリスト、カーネルログをまとめて使用してください。単一のチェックでは、信頼性と互換性の連鎖全体を証明することはできません。

カーネルのアップデートと再展開の計画を立てる

あるカーネルリリース向けに構築されたモジュールは、次のカーネルリリースと自動的に互換性があるとは限りません。カーネルのアップデート後、対応するビルド環境をインストールし、新しいカーネルABI向けにモジュールを再ビルドし、最終ファイルに署名し、そのカーネルのモジュールツリーにインストールし、依存関係情報を更新してください。署名証明書が引き続き信頼されている場合は、通常、再度登録する必要はありません。代替またはローテーションされた証明書には、独自の登録と承認が必要です。無人起動時ロードに頼る前に、新しいカーネルとモジュールを一緒にテストしてください。

定期的なアップデートに耐えなければならないフリートやドライバーについては、ドライバーとサポートモデルに適合するSUSEのカーネルモジュールパッケージ(KMP)アプローチなど、再現性のあるパッケージングワークフローを使用してください。パッケージングによってカーネルごとのビルドと署名手順を整理できますが、適切なキー保護、モジュールの互換性、MOKの信頼性、およびアップデートテストの必要性がなくなるわけではありません。SLES 15のサービスパックと組織でサポートされているカーネルライフサイクルの詳細については、ドキュメントを参照してください。

モジュールロード設定の例(acme_driver一覧表示)とsystemdモジュールロードのターミナルステータスビュー
/etc/modules-load.dモジュールが再構築され、インストール済みのカーネル用に署名された後、1行のエントリで起動時のロードを要求できます。

公式資料

コメントを残す

SLES 15マシンをSUSE Managerオフラインに登録する方法

SLES 15マシンをSUSE Managerオフラインに登録する方法

同期チャネル、ブートストラップリポジトリ、アクティベーションキー、および検証済みのSaltブートストラップワークフローを使用して、インターネットアクセスなしでSLES 15をSUSE Managerに登録します。

Ubuntu 24.04でサスペンド後にWi-Fiが切断される問題を解決する方法

Ubuntu 24.04でサスペンド後にWi-Fiが切断される問題を解決する方法

Ubuntu 24.04 でサスペンド後に Wi-Fi が切断される問題のトラブルシューティング: アップデート、無線ブロックと NetworkManager の確認、省電力テスト、ログの検査、修正の検証。

ALSA設定の微調整でUbuntu 24.04の音の歪みを修正する

ALSA設定の微調整でUbuntu 24.04の音の歪みを修正する

ALSAデバイスを診断し、WirePlumberのバッファ、サンプルレート、および直接ALSA設定を安全に調整することで、Ubuntu 24.04におけるパチパチ音、ブーンというノイズ、および歪んだ音を修正します。

セキュアブートを使用したSLES 15へのカスタムカーネルモジュールのインストール方法

セキュアブートを使用したSLES 15へのカスタムカーネルモジュールのインストール方法

カスタムSLES 15カーネルモジュールに署名する方法、MOKに証明書を登録する方法、セキュアブートでモジュールをロードする方法、結果を検証する方法、およびカーネルのアップデートを処理する方法を学びます。

SLES 15 KVM仮想化設定およびVM自動起動ガイド

SLES 15 KVM仮想化設定およびVM自動起動ガイド

SLES 15 上に KVM をセットアップし、libvirt のネットワークとストレージを設定し、仮想マシンを作成し、自動起動を有効にし、ホストの再起動後に確実に起動することを確認します。

How to Configure a WireGuard Point-to-Site VPN Server on Debian 12

How to Configure a WireGuard Point-to-Site VPN Server on Debian 12

Configure a WireGuard point-to-site VPN on Debian 12 with wg-quick, IPv4 forwarding, nftables NAT, client profiles, systemd startup, and verification.

How to Harden SLES 15 for STIG Compliance: A Safe OpenSCAP Workflow

How to Harden SLES 15 for STIG Compliance: A Safe OpenSCAP Workflow

Audit SLES 15 against the current DISA STIG, review OpenSCAP findings, test remediations, and document exceptions before production rollout.

SUSE Linux Enterprise Server で SAP HANA のメモリ制限を設定する方法

SUSE Linux Enterprise Server で SAP HANA のメモリ制限を設定する方法

SUSE Linux Enterprise Server 上で SAP HANA のグローバルおよびステートメントメモリ制限を設定する方法、HANA の制限を SUSE MemoryLow と比較する方法、そして各変更を安全に検証する方法を学びましょう。

Gooroom OSのブラウザ分離設定を安全に設定する方法

Gooroom OSのブラウザ分離設定を安全に設定する方法

Gooroom OSのブラウザ分離の仕組みを学び、信頼できるURLとブロックされたURLのポリシーを準備し、GPMSの設定を調整し、構築したシステムの設定を確認します。

Harmonica OSのシステム要件と互換性ガイド(旧型ノートパソコン向け)

Harmonica OSのシステム要件と互換性ガイド(旧型ノートパソコン向け)

インストール前に、HamoniKR 8.0のシステム要件、Lite版とフルエディションの要件、および古い64ビットノートパソコンとの互換性に関する実用的チェックを確認してください。