我在Ubuntu16.04的4.4.0-57内核,我想安装一个自制的模块。BIOS是一个非UEFI BIOS (Kontron986LCD-M/mITX)。
我试图按照这个操作步骤对模块进行签名,但是步骤3 (sudo mokutil --import MOK.der)的结果是EFI variables are not supported on this system。
我试图跟踪这个食谱,但找不到公钥。
如何在非UEFI板上签署模块?
====================================================
更新1:只有运行UEFI Bios的模块才能使用16.04以下的签名模块,这似乎是一个童话故事:
I use as grub option: `GRUB_CMDLINE_LINUX=" acpi_enforce_resources=lax"`.
I get the error `module verification failed: signature and/or required key missing - tainting kernel` in dmesg if I try to load a module via modprobe.
`sudo mokutil --disable-validation` returns the error `EFI variables are not supported on this system`=================================================== ================更新1
我很抱歉,但这个说法是错误的:
您所引用的过程描述禁用安全启动验证,而不是签名模块。没有必要在非UEFI系统上签名内核模块,因为安全引导完全是UEFI特性。
内核应该以这种方式工作--它不是这样的。我体验过它,因为我总是得到在dmesg中得到的error module verification failed: signature and/or required key missing - tainting kernel错误消息,并且内核没有加载。
===================================================如何在非uefi主板上安装================:
# aptitude search shim
p grub-splashimages - a collection of great GRUB splashimages
p grub2-splashimages - a collection of great GRUB2 splashimages
p libjs-es5-shim - ECMAScript 5 compat. shims for old JavaScript engines (library
p libjs-es6-shim - ECMAScript 6 compat. shims for legacy JavaScript engines (libr
p node-es5-shim - ECMAScript 5 compat. shims for old JavaScript engines (Node.js
p node-es6-shim - ECMAScript 6 compat. shims for legacy JavaScript engines (Node
p olpc-kbdshim - Dienst zur OLPC-XO-Tastaturunterstützung
v olpc-kbdshim-common -
v olpc-kdbshim-hal -
p ruby-launchy-shim - helper class for launching a web browser
p shimmer-themes - Gtk+ themes from Shimmer Project
p shimmer-wallpapers - Wallpapers from Shimmer Project
p systemd-shim - shim für systemd
p yoshimi - Software-Synthesizer, basiert auf ZynAddSubFX
p yoshimi-data - Voreinstellungen für Yoshimisystemd-shim是对的吗?我相信它不会起作用,因为它是一个非uefi MB.
发布于 2017-01-12 20:27:43
在Ubuntu中,这是一个巨大的bug。只有当您拥有支持uefi的MB时,mokutil和MokManager才能对您自己的模块进行签名。Ubuntu16.04下的旧MB不支持uefi,不能用mokutil和MokManager对模块进行签名。您将始终得到类似于EFI variables are not supported on this system或类似的响应。
据称,uefi的内核刚刚启用了签名。对不起,这是不对的。例如,这些内核参数也显示了这一点:
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_UEFI=y
CONFIG_MODULE_SIG_SHA512=y
CONFIG_MODULE_SIG_HASH="sha512"
CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE=y
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_CHECK_SIGNATURE=y
CONFIG_SIGNATURE=y正如我所说的,这是一个非uefi的内核参数,这是没有意义的,特别是CONFIG_MODULE_SIG_UEFI=y。
您必须重新编译内核并关闭签名选项。grep -v ^# /boot/config-$(uname -r) | grep _SIG可以找到它们。特别是CONFIG_MODULE_SIG和CONFIG_MODULE_SIG_ALL应该设置为n。但是,这有一个明显的缺点,因为您必须暂停内核更新,并且必须重新编译每个新内核。这很令人沮丧。
发布于 2017-01-08 18:09:54
您所引用的过程描述禁用安全启动验证,而不是签名模块。没有必要在非UEFI系统上签名内核模块,因为安全引导完全是UEFI特性。
也就是说,如果您确实希望在非UEFI系统上对内核模块进行签名,那么您应该能够这样做。(我还没有试过,但是AFAIK所有的工具都是Linux用户空间工具,它们不依赖于安全引导可用或活动。)如果您想要构建一个带有签名模块的包,以便在其他系统上安装,您可以这样做。请注意,您需要在目标系统上安装自己的密钥,这可能很乏味;有关指针,请参阅下面。要对内核模块进行签名:
sign-file二进制文件。通常在安装Linux二进制文件的地方不安装这个二进制文件;相反,它附带了内核头。如果在您的系统上安装了find /usr/src/ -name sign-file命令,它就应该找到它。如果此命令不返回任何内容,则必须安装内核标头包。/path/to/sign-file sha256 /key/path/your.key /key/path/your.cer /path/to/module/module.ko的命令对二进制文件进行签名此时,二进制module.ko将使用您的密钥(your.key和your.cer)进行签名。要使用,您的密钥必须注册到目标系统,大概在MOK列表中。要做到这一点,您必须使用MokManager.efi安装它,详见我的安全启动页面。
不过,我想再次强调的是,除了在UEFI模式下以安全引导活动启动的系统之外,没有必要对内核模块进行签名--即使这样,也只需要第三方或本地编译的内核模块,例如商业视频驱动程序或VirtualBox内核模块。Ubuntu内核提供的大多数内核模块已经用用于签名GRUB和主Ubuntu内核文件的相同的规范密钥签名。
https://askubuntu.com/questions/869228
复制相似问题