首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非UEFI板上的签署模块

非UEFI板上的签署模块
EN

Ask Ubuntu用户
提问于 2017-01-07 21:50:41
回答 2查看 2.3K关注 0票数 1

我在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以下的签名模块,这似乎是一个童话故事:

代码语言:javascript
复制
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主板上安装================:

代码语言:javascript
复制
# 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 Yoshimi

systemd-shim是对的吗?我相信它不会起作用,因为它是一个非uefi MB.

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2017-01-12 20:27:43

在Ubuntu中,这是一个巨大的bug。只有当您拥有支持uefi的MB时,mokutilMokManager才能对您自己的模块进行签名。Ubuntu16.04下的旧MB不支持uefi,不能用mokutilMokManager对模块进行签名。您将始终得到类似于EFI variables are not supported on this system或类似的响应。

据称,uefi的内核刚刚启用了签名。对不起,这是不对的。例如,这些内核参数也显示了这一点:

代码语言:javascript
复制
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_SIGCONFIG_MODULE_SIG_ALL应该设置为n。但是,这有一个明显的缺点,因为您必须暂停内核更新,并且必须重新编译每个新内核。这很令人沮丧。

票数 1
EN

Ask Ubuntu用户

发布于 2017-01-08 18:09:54

您所引用的过程描述禁用安全启动验证,而不是签名模块。没有必要在非UEFI系统上签名内核模块,因为安全引导完全是UEFI特性。

也就是说,如果您确实希望在非UEFI系统上对内核模块进行签名,那么您应该能够这样做。(我还没有试过,但是AFAIK所有的工具都是Linux用户空间工具,它们不依赖于安全引导可用或活动。)如果您想要构建一个带有签名模块的包,以便在其他系统上安装,您可以这样做。请注意,您需要在目标系统上安装自己的密钥,这可能很乏味;有关指针,请参阅下面。要对内核模块进行签名:

  1. 创建一组签名密钥。这是一项复杂的任务。有关创建签名密钥的信息,我建议您阅读我关于安全启动的页面
  2. 找到sign-file二进制文件。通常在安装Linux二进制文件的地方不安装这个二进制文件;相反,它附带了内核头。如果在您的系统上安装了find /usr/src/ -name sign-file命令,它就应该找到它。如果此命令不返回任何内容,则必须安装内核标头包。
  3. 使用类似于/path/to/sign-file sha256 /key/path/your.key /key/path/your.cer /path/to/module/module.ko的命令对二进制文件进行签名

此时,二进制module.ko将使用您的密钥(your.keyyour.cer)进行签名。要使用,您的密钥必须注册到目标系统,大概在MOK列表中。要做到这一点,您必须使用MokManager.efi安装它,详见我的安全启动页面。

不过,我想再次强调的是,除了在UEFI模式下以安全引导活动启动的系统之外,没有必要对内核模块进行签名--即使这样,也只需要第三方或本地编译的内核模块,例如商业视频驱动程序或VirtualBox内核模块。Ubuntu内核提供的大多数内核模块已经用用于签名GRUB和主Ubuntu内核文件的相同的规范密钥签名。

票数 -1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/869228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档