linux内核模块签名,如何签名内核模块Ubuntu 18.04

2023-05-16

问题描述

我是使用Ubuntu的新手。我正在尝试安装Genymotion,以便可以访问Android模拟器。为了使用Genymotion,需要我有VirtualBox。我已经安装了VirtualBox,但是好像我需要签署一个内核模块……我真的不确定如何去做。这是我在运行/sbin/vboxconfig后收到的错误消息:

vboxdrv.sh: Stopping VirtualBox services.

vboxdrv.sh: Starting VirtualBox services.

vboxdrv.sh: Building VirtualBox kernel modules.

vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox. To re-start the set-up process, run

/sbin/vboxconfig

as root. If your system is using EFI Secure Boot you may need to sign the

kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load

them. Please see your Linux system's documentation for more information.

我曾尝试使用谷歌搜索,但似乎无法通过顺序步骤找到一个清晰简洁的答案。再说一次,我对linux还是很陌生,所以欢迎任何帮助。在此先感谢所有答复者。

最佳办法

为了在不简单禁用UEFI安全启动的情况下使VirtualBox正常工作,您需要执行以下操作:

创建一个个人公用/专用RSA密钥对,以对内核模块进行签名。按照下面的链接中的建议,我选择将密钥/对存储在/root /module-signing /目录中。

sudo -i

mkdir /root/module-signing

cd /root/module-signing

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=YOUR_NAME/"

chmod 600 MOK.priv

使用mokutil(一种用于导入或删除计算机所有者密钥(MOK)的工具)来导入公共密钥,然后在重新引导计算机时对其进行注册。此步骤中的密码是临时使用密码,您只需记住几分钟即可。

mokutil --import /root/module-signing/MOK.der

input password:

input password again:

重新启动机器。引导加载程序启动时,您会看到一个屏幕,要求您按一个按钮以进入MOK管理器EFI实用程序。请注意,此步骤将无法使用任何外部外接键盘。在第一个菜单中选择“注册MOK”,然后继续,然后选择“是”以注册密钥,并选择re-enter在步骤2中建立的密码。然后选择“确定”以继续系统引导。

将来的内核更新将要求再次对更新的内核进行签名,因此将签名命令放在脚本中是有意义的,该脚本可以根据需要在以后运行。下面给出了示例脚本/root /module-signing /sign-vbox-modules。

#!/bin/bash

for modfile in $(dirname $(modinfo -n vboxdrv))/*.ko; do

echo "Signing $modfile"

/usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \

/root/module-signing/MOK.priv \

/root/module-signing/MOK.der "$modfile"

done

添加执行权限,然后以/root /module-signing /目录的root用户身份运行上述脚本。

sudo -i

cd /root/module-signing

chmod 700 /root/module-signing/sign-vbox-modules

./sign-vbox-modules

加载vboxdrv模块并启动VirtualBox。

modprobe vboxdrv

次佳办法

第三种办法

我知道这个问题很旧,但是因为没有公认的答案,而且这些答案都没有为我解决问题,所以我正在写今天如何解决这个问题:

运行此命令时,出现以下错误:

$ sudo modprobe vboxdrv

modprobe: ERROR: could not insert 'vboxdrv': Required key not available

问题在于该模块未签名,因此未加载内核。如果您的计算机启用了SecureBoot模式(在现代设备中很常见),则会发生这种情况。

这就是为什么我会在打开虚拟盒子中的任何计算机时收到此错误的原因

Kernel driver not installed (rc=-1908)

执行以下步骤来对驱动程序进行签名,并在Ubuntu系统以及Debian 9上将其作为内核模块加载:

安装mkutil软件包以进行签名。

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install mokutil

生成签名文件:

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VirtualBox/"

然后将其添加到内核:

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

将其注册为安全启动。

重要!这将要求您输入密码,输入您想要的密码,在下次重新启动时只需使用一次即可。

sudo mokutil --import MOK.der

最后,重新启动计算机。键盘等待时,将出现一个蓝屏,按要求您中断启动的键。

8f1abc941c298572c298417e6c369008.png

在蓝屏内部时,选择

Enroll MOK -> Continue -> and it will ask you for the password

您先前输入的内容将被输入,并且将通知您该操作已成功完成。

现在您的操作系统将启动,并且您现在可以使用VirtualBox了,没有问题:)

希望这对某人有帮助。

参考资料

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux内核模块签名,如何签名内核模块Ubuntu 18.04 的相关文章

随机推荐