私はLinuxで単純なhello worldカーネルモジュールを作成し、それをカーネルにロードしようとしました。ただし、ロードしようとするとこのエラーが発生するため不可能です。
module verification failed: signature and/or required key missing - tainting kernel
私は解決策を見つけようとしましたが、私が見つけたすべては、実際のシステムではなく仮想マシンに関するものでした。
セキュアブートが無効になっており、カーネル設定を変更して再構築したくありません。
また、opensslとMOKを使用してキーを生成して登録しようとしましたが、モジュールに署名したい最後のステップで停止しました。そのファイルやディレクトリはありません。間違い。/scripts/sign-file
見つかりません。/usr/lib/linux-headers-5.11.0-16-generic
私はこの質問に対する答えに従いました。 カーネルモジュールの署名
完全に混乱しています!誰が私を助けることができますか? ?
私のオペレーティングシステムはUbuntuで、カーネルバージョンは5.11.0-16です。
修正する:今私のモジュールはコマンドを通して署名されているように見え、modinfo hello.ko
その結果は次のようになります。
$ modinfo hello.ko
filename: /home/###/Documents/kernel/hello.ko
description: This is the module description.
author: ###
license: Dual BSD/GPL
depends:
retpoline: Y
name: hello
vermagic: 5.11.0-16-generic SMP mod_unload modversions
sig_id: PKCS#7
signer: ###
sig_key: 58:26:4E:F2:6A:5F:2F:DB:F0:21:E0:8C:79:60:E9:C8:78:38:01:3F
sig_hashalgo: sha256
signature: 67:F2:74:BF:6A:AB:D4:AD:6C:EA:BD:35:D6:7A:9A:94:0F:C7:0F:6B:
AD:10:18:26:D1:D9:8A:07:DD:89:36:03:D0:C9:AA:10:A1:52:71:A0:
CF:D0:7D:C6:2E:D7:E2:B1:AF:1D:45:A4:97:13:23:23:C8:B7:99:6D:
4A:F9:60:B7:64:D0:E4:3C:EE:74:9F:68:D2:C5:EC:C0:C9:F3:09:76:
EF:B5:C4:46:62:36:1B:95:EC:4A:D3:4D:B7:2F:87:71:E1:D2:D7:ED:
EE:F3:04:58:3F:F9:EA:16:4C:39:BD:B5:50:60:FC:A7:96:AF:03:74:
F0:03:76:98:95:91:A9:5A:1B:50:17:8A:71:A2:C0:D6:B4:DD:D3:50:
FE:2A:05:29:03:D6:E6:A0:69:F4:18:44:2B:EC:F6:41:6D:A3:E7:EF:
10:3D:98:A8:33:21:56:0E:D6:8E:67:88:18:7F:31:DB:2E:CA:70:F7:
7E:03:42:04:F5:99:64:BD:EE:0F:04:DA:56:50:B5:2E:7A:B7:AE:D0:
ED:07:6B:86:89:45:38:B4:7C:FE:B9:B3:F4:5D:17:1B:6F:04:33:52:
BE:0E:1F:D3:CA:F1:9D:17:AD:EC:A4:DC:84:25:47:73:ED:02:9E:74:
4C:AD:25:35:2B:E4:C0:BE:15:F2:FF:99:CE:89:82:E6
ただし、モジュールを挿入するとエラーが発生します。
$ sudo insmod hello.ko
insmod: ERROR: could not insert module hello.ko: Invalid module format
ベストアンサー1
module verification failed: signature and/or required key missing - tainting kernel
これは実際にいいえモジュールがロードされていないことを意味します。これは、すべてのカーネル oops/panic メッセージに、署名されていないモジュールがロードされたことを示す一部の情報が含まれていることを意味します。このメッセージはエラーではなく警告です。
(ただし、taintタグでoops / panicメッセージを含むカーネルのバグレポートを送信しようとすると、「最初に非標準のカーネルモジュールなしでバグを再現してみてください。またはソースを表示してください」という回答を受け取る可能性があります。関連する可能性があるため、カスタムモジュールのコードを使用すると、人々が実験的な作業をしているという事実に言及せずにバグレポートを送信することがあるため、カーネル開発者とディストリビューションメンテナンス担当者の時間を節約できます。
Debian はsign-file
ユーティリティをパッケージにまとめますlinux-kbuild-<kernel version>
。私はUbuntuも同じだと思います。したがって、パッケージがインストールされていることをlinux-kbuild-5.11
確認する必要があります。このユーティリティのパスはsign-file
です/usr/lib/linux-kbuild-5.11/scripts/sign-file
。
ただし、Secure Bootが無効になっていると、すべてのSecure Bootステップをバイパスし、実際の起動がshimx64.efi
直接ロードされます。grubx64.efi
MOKロードを含みます。MOKがロードされないと、カーネルはモジュールの署名が有効かどうかを認識しません。セキュアブートが無効になっていると、無効な署名付きの署名付きモジュールは拒否されますが、署名されていないモジュールは将来のすべてのエラー/パニックメッセージから警告と汚染の表示のみを受け取ります。
insmod: ERROR: could not insert module hello.ko: Invalid module format
カーネルモジュールのロードに失敗した後は、dmesg
出力を確認する必要があります。出力にはより具体的なエラーメッセージを含めることができます。この場合、モジュール署名が検証に失敗したことを示すことができます。