如何使用sign-file对内核模块进行签名?
我刚安装了安全启动的Ubuntu 16.04,遇到了与此处描述的相同的vmware错误 :
modprobe: ERROR: could not insert 'vmnet': Required key not available
。
解决此问题的一种方法是禁用安全启动,但我不想这样做。 另一种方法是按照这个非常详细的线程 自己签署内核模块。 有关如何在RHEL和fedora中执行此操作的教程,但所有这些解决方案都依赖于我似乎无法找到的某些脚本:
sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)
我在哪里可以在Ubuntu中找到这个sign-file
脚本?
相关: https : //github.com/bergwolf/rhel6/blob/master/Documentation/module-signing.txt并在内核编译后签署一个模块 。
在Ubuntu上,这将是/usr/src/linux-headers-$(uname -r)/scripts/sign-file
。
我是怎么想出来的? 我搜索了sign-file
:
dpkg -S sign-file
它告诉我哪个软件包提供了这个文件(目前是linux-headers-4.4.0-22-generic
)以及安装它的地方,即在/usr/src/linux-headers-4.4.0-22-generic/scripts/
。
uname -r
部分只是为了保持命令独立于当前安装的headers-generic包。
从VMware的站点,您的问题的原因可能是:
在启用了安全模式的Linux主机上,不允许加载任何未签名的驱动程序。 因此,无法加载VMware驱动程序(如vmmon和vmnet),从而阻止虚拟机启动。
要在不关闭安全启动的情况下解决此问题,您可以在终端中执行以下操作:
-
使用openssl生成密钥对以对vmmon和vmnet模块进行签名:
〜$ openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj“/ CN = VMware /”
(将MOK替换为密钥所需文件的名称。)
-
通过运行以下命令使用生成的密钥对模块进行签名:
〜$ 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) -
通过运行以下命令将公钥导入系统的MOK列表:
〜$ sudo mokutil –import MOK.der
-
确认此MOK注册请求的密码。
- 重新启动计算机。 按照说明从UEFI控制台完成注册。
引自此VMWare文章: https : //kb.vmware.com/kb/2146460