カーネルモジュールに署名するために使用したキーペアの公開キーをsystem_keyringに追加します。ただし、問題があります。
cat /proc/keys | grep system_keyring
のコマンドで、system_keyringのエントリ(ID)を取得しました。ただし、次のコマンドで公開鍵を追加しようとすると、keyctl padd asymmetric "" 0xXXXXXXXX</test/signing_key.x509
の場合、「アクセスが拒否されました」エラーが発生します。
「module_signing.txt」で説明されている制限が原因であると思います https://01.org/linuxgraphics/gfx-docs/drm/admin-guide/module-signing.html :
ただし、カーネルは.system_keyringifにキーを追加することのみを許可することに注意してください。新しいキーのX.509ラッパーは、キーが追加された時点で、.system_keyringにすでに常駐しています。
ただし、.system_keyringにすでに存在するキーを使用して「X.509ラッパー」に署名する方法を説明するドキュメントは見つかりません。
また、その鍵リングの鍵は公開鍵だけだと思います。そのため、キーリングから公開鍵を抽出し、その公開鍵で「X.509ラッパー」に署名できたとしても、うまくいくとは思いません。
とにかく、ここで助けが必要です。または、カーネルモジュールをRedHatにサブミットして、RedHatによって署名され、カーネルを再構築せずにユーザーのインストールにインストールできるようにするためのヒントが何かある場合でも、
システムのキーリングは、次の5つのソースからコンテンツを取得します。
db
-ファームウェアによっては、これを変更できる場合とできない場合がありますdbx
-以前のものと同じですが、これはブラックリストであるため、とにかくここにキーを追加する必要はありません。shim.efi
に埋め込まれたキー-再コンパイルしないと変更できません。セキュアブートを制御していない限り、後でシムを再署名する必要がありますPK
=面倒すぎるMOK
(shim.efi
によって使用されます)-これが最善の方法です。キーをMOKにインポートするには、最初にshim.efi
が起動プロセスに含まれていることを確認する必要があります(efibootmgr -v
を参照)。
次に、モジュールがDER形式で署名されているキー/証明書を取得し、mokutil
コマンドを使用してインポートプロセスを開始します。
mokutil --import your_signing_key.pub.der
このコマンドでは、新しいインポートパスワードを設定する必要があります。このパスワードは次のステップで使用され、以前に存在したパスワードではありません。いつものように、新しいパスワードを設定するとき、mokutil
はこのパスワードを2回入力するように要求します。
次に、システムを再起動すると、shim.efi
は新しいMOKキーをインポートする準備ができていることを確認し、インポートパスワードを入力する必要があります前のステップで設定します。これを一度行った後、新しいキーは永続的にUEFI MOK変数に格納され、カーネルは自動的にそれをシステムキーリングに含めます。
UEFIを使用していない場合、カーネルを再コンパイルしないと、システムのキーリングに新しいキーを追加できません。しかし、その一方で、セキュアブートが有効になっていない場合、カーネルは署名のない、または検証不可能な署名のあるカーネルモジュールのロードを許可します-カーネルの汚染フラグの1つを設定して、非配布カーネルモジュールがロードされました。
出典: RHEL 7 Kernel Administration Guide、Chapter 2.8 "Signing Kernel Modules for Secure Boot"