Secure Bootが有効なマシンのUbuntuで、VMware Playerを起動しようとすると、次のようなエラーが出てしまう
Could not open /dev/vmmon: No such file or directory. Please make sure that the kernel module `vmmon' is loaded.
これは、正しく署名されていないカーネル・モジュール vmmon.ko と vmnet.ko がロードされていないためだ。
モジュールがロードされていないことを確認する
lsmodでvmmonとvmnetが表示されていないことを確認
$ lsmod | grep vm kvm_intel 253952 0 kvm 659456 1 kvm_intel iwlmvm 385024 0 mac80211 856064 1 iwlmvm iwlwifi 339968 1 iwlmvm cfg80211 712704 3 iwlmvm,iwlwifi,mac80211 nvme 49152 3 nvme_core 106496 5 nvme
カーネル・モジュールのファイルが存在していることを念のため確認
$ modinfo -n vmmon /lib/modules/5.4.0-91-generic/misc/vmmon.ko $ ls /lib/modules/5.4.0-91-generic/misc/ vmmon.ko vmnet.ko
Machine-Owner Key(MOK)の署名をカーネル・モジュールに施す
ここからの作業は、次のWebページを参考にしている
・『"Cannot open /dev/vmmon: No such file or directory" error when powering on a VM (2146460)』
・『Ubuntu 20.04 に VMWare Player をインストールする』
まず、Machine-Owner Key(=MOK) として使う自己署名証明書(秘密鍵と公開鍵のペア)を作成する
$ openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VMware/" Generating a RSA private key .............+++++ .........................................................................................+++++ writing new private key to 'MOK.priv' -----
参考)作成された鍵の内容をテキスト表示するには
$ openssl x509 -inform der -in MOK.der -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 4d:9b:cd:13:28:10:11:d8:78:b1:7e:eb:f2:c5:0d:ca:38:b3:63:1e Signature Algorithm: sha256WithRSAEncryption Issuer: CN = VMware Validity 〜 以下省略
VMwareのvmnetとvmmonカーネル・モジュール ファイルに署名する
$ sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon) $ sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)
UbuntuのSHIMX64にMachine-Owner Key(=MOK) をインストールする
現在、MOKデータベースに追加リクエスト中のMOKが存在しないことを念のため確認
$ sudo mokutil --list-new MokNew is empty
MOKの公開鍵(MOK.der)を新規追加候補として登録する。パスワードを聞かれるが、これは次回のブートアップ時にUEFI BIOSから呼び出されるmmx64.efi(MokManager)のMOKインポート画面で入力するものなので、ここで新たに設定したパスワードはその時まで覚えておくこと。
$ sudo mokutil --import MOK.der input password: input password again:
MOKが新規インポート候補に登録されたことを確認
$ sudo mokutil --list-new [key 1] SHA1 Fingerprint: a8:60:2c:93:b5:13:95:e4:95:33:53:0a:ae:26:64:f5:eb:b3:74:b6 Certificate: Data: Version: 3 (0x2) Serial Number: 4d:9b:cd:13:28:10:11:d8:78:b1:7e:eb:f2:c5:0d:ca:38:b3:63:1e Signature Algorithm: sha256WithRSAEncryption Issuer: CN=VMware Validity Not Before: Dec 16 13:31:18 2021 GMT Not After : Nov 22 13:31:18 2121 GMT Subject: CN=VMware Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:cc:ea:1e:0c:41:c4:e1:b0:03:4a:76:96:c8:a7: 20:9c:ab:1a:14:69:27:84:e8:1d:2a:17:33:c3:97: a2:b1:1d:bb:52:04:01:4f:fc:42:27:fd:ab:4d:05: 03:57:04:17:c2:1e:f3:e3:81:22:77:35:f0:46:f6: 9a:58:0f:bd:de:71:42:a5:81:64:04:32:3c:ee:39: 53:23:d8:c8:70:e6:2a:10:b5:5c:4e:50:ff:9f:4b: 01:61:86:0b:ff:1e:a5:64:b7:92:04:55:fe:92:f8: 16:f1:b0:df:8c:9f:6d:ab:1e:1f:ff:c5:99:d9:f6: 25:82:d8:7d:52:bc:59:81:db:c0:c0:72:82:fa:65: 86:73:38:e8:17:57:5a:df:4d:98:88:2c:96:0e:98: ca:48:67:61:65:5a:a4:93:4c:f5:4e:d4:67:ca:b5: 8b:41:69:10:22:f5:8a:8d:07:e1:8e:8e:d3:c5:7d: 6c:88:6a:b9:2f:d4:87:44:7b:8e:59:1f:21:d1:68: 22:30:85:d7:94:aa:49:b9:07:bd:a1:62:3a:b4:a5: cb:43:d0:73:09:22:95:9a:ff:85:81:51:38:a6:0e: d3:5b:a2:ef:b6:69:15:74:f7:44:bd:bd:c2:37:61: 13:7c:29:8c:81:f2:c5:c6:a1:dc:09:03:65:1a:29: 97:fd Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 31:36:87:94:ED:7A:CA:55:5F:23:CB:D4:F7:CD:C4:E1:28:DE:B5:F6 X509v3 Authority Key Identifier: keyid:31:36:87:94:ED:7A:CA:55:5F:23:CB:D4:F7:CD:C4:E1:28:DE:B5:F6 X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha256WithRSAEncryption a2:96:88:05:25:5e:0e:6a:38:72:9c:b5:70:50:e7:69:c2:73: 96:3d:d1:44:5d:81:dd:13:6a:55:44:50:48:7a:0e:9c:47:18: c3:a2:52:97:64:16:72:3e:96:ca:38:3b:f6:80:10:72:17:4a: 17:5a:1f:f5:ca:3e:72:95:78:82:77:f0:8b:0b:99:b1:35:d4: e1:fb:0b:5e:c4:30:5b:40:49:09:ac:d7:33:a6:bc:14:ad:0f: f9:06:74:e0:d1:e1:fb:8c:53:2e:6b:1b:26:fe:88:53:45:fc: 29:24:f5:d4:5d:3a:5b:8a:dc:b4:47:d8:8b:c6:1c:28:12:36: a8:4a:7b:c0:37:e2:06:38:eb:16:99:7c:a7:be:1e:2c:06:bf: bb:22:a7:9e:3b:09:d7:3b:f7:2d:d6:43:92:8e:e1:57:2b:0c: a7:50:39:e5:81:31:2b:fc:7f:c6:0b:c3:c5:ef:96:00:e9:11: b6:e1:fb:40:9b:d6:b5:01:f2:47:3c:8f:4b:cb:e9:90:89:5e: a1:69:15:b3:49:6f:ae:90:0d:16:eb:45:6e:a3:20:27:97:23: ab:54:2a:0c:63:b4:c2:81:62:c0:6b:23:b6:82:a2:d7:9f:fd: 62:70:0d:33:22:ed:45:f4:bb:2e:eb:d2:16:8f:49:87:20:22: d7:19:94:07
ここで、マシンを再起動する。
セキュア・ブートの起動シーケンスは
1) UEFI BIOS
2) shimx64.efi --- UEFI BIOSに格納されているMicrosoftの署名があるのでUEFI BIOSから実行許可される
3) mmx64.efi --- MOKデータベースの追加認証を読み込む
4) grubx64.efi --- MOKデータベースに格納されているCanonicalの署名があるのでshimx64から実行許可される
5) カーネル・モジュール --- 今回問題としている自己署名がMOKデータベースにあれば読み込み可能となる
という順序で、今回のMOKインポートは 起動シーケンスの 3) で処理され、データベースに追加されることになる。
MokManagerが表示されたら、『 Enroll MOK 』メニューを選択して、新規インポート候補とされているMOKをインストールする。
MokManagerでのMOKインポート画面 → Enroll MOK を選択
いきなりインポートすることも出来るが、念のため内容を表示して、さきほど mokutil --list-new
で表示されたものであることを確認
MOKインストール時には、mokutil --installで設定したパスワードを聞かれる
参考資料
なお、MOKはマシン本体(UEFI BIOS)の鍵リストに格納されるのではなく、UbuntuのSHIMX64が扱うMOKデータベースに格納される。
念のため、マシン自体のキーを表示してみると...
マシン自体のキー領域には今回のMOKが格納されるわけではない(マシンのメーカーとMicrosoftのキーだけが格納されている)
この辺りの詳細は、『 Testing Secure Boot 』 が参考になる。
登録済みのMOKを削除する
登録した時のMOK.derファイルが手元になければ、システムからエクスポートして使う。エクスポートは次のように行う。2つエクスポートされるので、削除する方を選択すること。
$ mokutil --export
また、現在登録されているMOKをダンプするには
$ mokutil --list-enrolled [key 1] SHA1 Fingerprint: 76:a0:92:06:58:00:bf:37:69:01:c3:72:cd:55:a9:0e:1f:de:d2:e0 Certificate: Data: Version: 3 (0x2) Serial Number: b9:41:24:a0:18:2c:92:67 Signature Algorithm: sha256WithRSAEncryption Issuer: C=GB, ST=Isle of Man, L=Douglas, O=Canonical Ltd., CN=Canonical Ltd. Master Certificate Authority ... 以下省略
MOKを削除
$ mokutil --delete KEY.der
鍵データベースの一覧を表示する
鍵データベースは次のようにして得られる
$ sudo keyctl show %:.builtin_trusted_keys Keyring 593808705 ---lswrv 0 0 keyring: .builtin_trusted_keys 497843067 ---lswrv 0 0 \_ asymmetric: Build time autogenerated kernel key: 6df576664badec8d59c89a2936dfd283c277107b 697325536 ---lswrv 0 0 \_ asymmetric: Canonical Ltd. Kernel Module Signing: 88f752e560a1e0737e31163a466ad7b70a850c19 526565397 ---lswrv 0 0 \_ asymmetric: Canonical Ltd. Live Patch Signing: 14df34d1a87cf37625abec039ef2bf521249b969 $ sudo keyctl show %:.platform Keyring 176066445 ---lswrv 0 0 keyring: .platform 630299454 ---lswrv 0 0 \_ asymmetric: Lenovo UEFI CA 2014: 4b91a68732eaefdd2c8ffffc6b027ec3449e9c8f 114710310 ---lswrv 0 0 \_ asymmetric: VMware: 31368794ed7aca555f23cbd4f7cdc4e128deb5f6 2984028 ---lswrv 0 0 \_ asymmetric: Canonical Ltd. Master Certificate Authority: ad91990bc22ab1f517048c23b6655a268e345a63 938841673 ---lswrv 0 0 \_ asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53 257869908 ---lswrv 0 0 \_ asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4 261481554 ---lswrv 0 0 \_ asymmetric: Trust - Lenovo Certificate: bc19ccf68446c18b4a08dce9b1cb4deb
また、システム起動時にどの鍵が読み込まれたかは次のようにすれば表示できる
$ dmesg | grep 'X.509' [ 1.142212] Loading compiled-in X.509 certificates [ 1.142845] Loaded X.509 cert 'Build time autogenerated kernel key: 6df576664badec8d59c89a2936dfd283c277107b' [ 1.143351] Loaded X.509 cert 'Canonical Ltd. Live Patch Signing: 14df34d1a87cf37625abec039ef2bf521249b969' [ 1.143852] Loaded X.509 cert 'Canonical Ltd. Kernel Module Signing: 88f752e560a1e0737e31163a466ad7b70a850c19' [ 1.148951] integrity: Loading X.509 certificate: UEFI:db [ 1.148977] integrity: Loaded X.509 cert 'Lenovo UEFI CA 2014: 4b91a68732eaefdd2c8ffffc6b027ec3449e9c8f' [ 1.148978] integrity: Loading X.509 certificate: UEFI:db [ 1.149276] integrity: Loaded X.509 cert 'Trust - Lenovo Certificate: bc19ccf68446c18b4a08dce9b1cb4deb' [ 1.149277] integrity: Loading X.509 certificate: UEFI:db [ 1.149299] integrity: Loaded X.509 cert 'Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4' [ 1.149300] integrity: Loading X.509 certificate: UEFI:db [ 1.149320] integrity: Loaded X.509 cert 'Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53' [ 1.150005] integrity: Loading X.509 certificate: UEFI:MokListRT [ 1.150172] integrity: Loaded X.509 cert 'Canonical Ltd. Master Certificate Authority: ad91990bc22ab1f517048c23b6655a268e345a63' [ 1.150172] integrity: Loading X.509 certificate: UEFI:MokListRT [ 1.150330] integrity: Loaded X.509 cert 'VMware: 31368794ed7aca555f23cbd4f7cdc4e128deb5f6' [ 6.570590] cfg80211: Loading compiled-in X.509 certificates for regulatory database [ 6.570780] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'