更新后重新签名内核模块 - VMMON

更新后重新签名内核模块 - VMMON

我最近按照以下说明签署了一个内核模块来修复 VMware 的问题升级到 ubuntu 16.04 后 vmware 出现错误如何使用 sign-file 签署内核模块?

安装一些更新后,问题再次出现。我假设内核已经更新,并且签名的模块要么被卸载,要么签名以某种方式失效了。

我认为我创建的公钥/私钥对仍然有效(它们只是用来签名?)那么为什么我签名的模块不再有效?还是只是不再安装?

我尝试简单地重新运行 mokutil - 但被告知它已经注册:

mokutil --import MOK.der 
SKIP: MOK.der is already enrolled

但是在 VMware (workstation pro v12) 中运行虚拟机

Could not open /dev/vmmon: No such file or directory.
Please make sure that the kernel module `vmmon' is loaded.

那么 - 问题是 - 这里发生了什么 - 内核更新后需要重复模块签名和注册的哪些步骤?

另外 - 有什么办法可以避免将来再次这样做吗(即 - 每当我下次安装更新时)

免责声明 - 我对细节只有一个模糊的了解,我基本上只是遵循说明。

答案1

模块会根据特定内核进行编译。因此,如果内核已更新,则模块会重新编译或需要重新编译,并且新模块需要签名。

您的密钥仍然有效并可以重复使用。

您需要执行的唯一步骤是编译模块并对其进行签名。您的密钥仍在 MOK 中

签名命令取决于你如何签名(方法有几种)

但你的是

sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)

答案2

我发现上述答案在 2020 年 9 月仍然适用。主机 Ubuntu 18.04 内核的更新导致 VMware Workstation 15 无法启动之前正常运行的虚拟机。我重新运行了 vmmon 和 vmnet 的命令,我的虚拟机现在可以再次正常运行。

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)

这篇 VMware KB 文章最初也对我第一次签署模块有帮助:

https://kb.vmware.com/s/article/2146460

相关内容