20.11. 秘密鍵を使用したカーネルモジュールの署名
UEFI セキュアブートメカニズムが有効になっている場合は、署名済みカーネルモジュールをロードすることでシステムのセキュリティーを強化できます。
署名済みカーネルモジュールは、UEFI セキュアブートが無効になっているシステムまたは非 UEFI システムでもロードできます。そのため、カーネルモジュールの署名済みバージョンと未署名バージョンの両方を提供する必要はありません。
前提条件
- 公開鍵と秘密鍵のペアを生成し、公開鍵の有効期限を知っています。詳細については、公開鍵と秘密鍵のペアの生成 を参照してください。
- ターゲットシステムに公開鍵を登録しています。詳細については、公開鍵を MOK リストに追加して、ターゲットシステムに公開鍵を登録する を参照してください。
- ELF イメージ形式で署名できるカーネルモジュールがある。
手順
公開鍵を
sb_cert.cer
ファイルにエクスポートします。# certutil -d /etc/pki/pesign \ -n 'Custom Secure Boot key' \ -Lr \ > sb_cert.cer
NSS データベースからキーを PKCS #12 ファイルとして抽出します。
# pk12util -o sb_cert.p12 \ -n 'Custom Secure Boot key' \ -d /etc/pki/pesign
- 前のコマンドでプロンプトが表示されたら、秘密鍵を暗号化する新しいパスワードを入力します。
暗号化されていない秘密鍵をエクスポートします。
# openssl pkcs12 \ -in sb_cert.p12 \ -out sb_cert.priv \ -nocerts \ -noenc
重要暗号化されていない秘密鍵は慎重に取り扱ってください。
カーネルモジュールに署名します。次のコマンドは、カーネルモジュールファイル内の ELF イメージに署名を直接追加します。
# /usr/src/kernels/$(uname -r)/scripts/sign-file \ sha256 \ sb_cert.priv \ sb_cert.cer \ my_module.ko
これでカーネルモジュールの読み込み準備が完了しました。
Red Hat Enterprise Linux 9 では、キーペアの有効期限が重要です。キーの有効期限はありませんが、カーネルモジュールはその署名キーの有効期間内に署名する必要があります。sign-file
ユーティリティーでは、これに関する警告は表示されません。たとえば、2021 年にのみ有効な鍵を使用して、その鍵で 2021 年に署名されたカーネルモジュールを認証できます。ただし、ユーザーはこの鍵を使用して 2022 年にカーネルモジュールに署名することはできません。
検証
カーネルモジュールの署名に関する情報を表示します。
# modinfo my_module.ko | grep signer signer: Your Name Key
生成時に入力した名前が署名に記載されていることを確認します。
注記この追加された署名は ELF イメージセクションには含まれず、また ELF イメージの正式な一部ではありません。したがって、
readelf
などのユーティリティーは、カーネルモジュールの署名を表示できません。モジュールをロードします。
# insmod my_module.ko
モジュールを削除 (アンロード) します。
# modprobe -r my_module.ko
関連情報