为什么在安装第三方模块时禁用“安全启动”策略


46

在安装16.04时,如果我要安装第三方模块/驱动程序,则要求我关闭“ 安全启动 ” 。

我没有遵守。

当我手动安装了我唯一使用的第三方驱动程序(bcmwl-kernel-source)时,再次要求我(在安装软件包期间)关闭“安全启动”。

15.10中使用Secure Boot可以完美地使用bcmwl-kernel-source。这似乎与我的错误无关。

因此,这看起来确实像Ubuntu拒绝再签名第三方驱动程序/模块以使其能够与“安全启动”一起使用(??)。或似乎认为第3方模块不安全并破坏了“安全启动”,因此强制禁用它以使其清晰可见?我对吗 ?


6
嗯,IMO,这是因为人们(错误地)认为安全引导在提供建议时会破坏第三方模块。有关安全启动的技术信息,请访问wiki.ubuntu.com/SecurityTeam/SecureBoot。我个人不同意删除安全启动的无处不在的建议,在启用了安全启动的情况下,在我的硬件上也可以正常工作。除非您有问题,否则IMO会启用安全启动,没有理由盲目禁用安全功能。
Panther

8
我没有对此进行深入研究,但据我了解,与使用的15.10和更早版本相比,16.04正在转向更严格的安全启动实施。具体来说,在15.10及更早版本中,Shim启动GRUB后,GRUB将启动任何 Linux内核;安全启动保护以GRUB结尾。我的理解是,通过16.04,安全启动策略实施扩展到了内核,因此Ubuntu的GRUB将不再启动未签名的内核。如果超出此范围,则未签名的内核模块也将受到影响。同样,我还没有对此进行深入研究。
罗德·史密斯


1
由于人们为了安装第三方模块而困扰于他们的系统,因此我想知道此功能是否弊大于利。
丹尼尔(Daniel)

无论如何,关闭它后是否可以重新启用它?
shaunakde

Answers:


38

这不是错误,而是功能。

正如Anthony Wong所说,当您安装DKMS软件包时,您是在自己编译该软件包,因此,Canonical无法为您签名该模块。

但是,您绝对可以使用安全启动,但是这正是安全启动试图保护您免受自身侵害的用例,因为它不知道您是否信任模块。

默认情况下,UEFI计算机上有一个平台密钥(PK),它是最终可信任的证书颁发机构,用于在处理器中加载代码。

GRUB或shim或其他启动机制可以由根CA(PK)信任的KEK 进行数字签名,因此您的计算机无需任何配置即可启动Ubuntu Live USB / DVD等启动软件。

在Ubuntu 16.04上,内核是使用CONFIG_MODULE_SIG_FORCE = 1构建的,这意味着内核将强制使用平台中的受信任密钥模块进行签名。请注意,默认情况下,UEFI平台包含您没有任何控制权的PK,因此您无法使用自己的计算机可以识别的密钥对二进制文件进行签名。

有人对此表示反对,但实际上(从安全的角度来看)没有比注册自己想要的新密钥的更好的方法了。

如果引导系统使用填充程序,则可以使用“机器所有者的密钥”数据库,并将密钥注册为 MOK(可以使用mokutil进行注册)。如果没有,您也可以将密钥注册为UEFI数据库中的签名密钥。

在注册密钥之后,可以使用MOK对DKMS构建的软件包进行签名(在处应该有一个perl脚本/usr/src/kernels/$(uname -r)/scripts/sign-file),并且在对其进行签名之后,可以将其加载到内核中

当然,有人应该对此进行更直观的说明,甚至可能制定一个向导或更好的DKMS标准以考虑密钥,但这是我们目前所拥有的。

您可以参考以下有关如何签名自己的内核模块的说明:https : //askubuntu.com/a/768310/12049


1
我禁用了它,现在我收到一个令人烦恼的“以不安全模式启动消息”是否有要撤消的方法?我什至无法在这里的论坛上解释这个问题。@ssice-我正在使用UBUNTU 14.04,所以我认为这与我无关。[
shaunakde

20

简而言之,这不是错误,而是16.04中引入的新更改。

因为您要安装的是dkms软件包。DKMS模块是在您自己的计算机上编译的,因此Canonical无法为您签名模块。如果Canonical无法签名,则无法进行数字验证。如果您打开了安全启动,那将意味着您的模块无法使用,而要使用它,则必须关闭安全启动,这就是为什么您会被问到这个问题。

对于为何仅在16.04中而不在以前的版本中发生的原因,Rod Smith给出了很好的答案。在Ubuntu 16.04中,Ubuntu开始将安全启动强制执行到内核级别。在16.04之前,即使您已启用安全启动,Ubuntu并没有真正要求您使用签名的内核和签名的内核模块。但是在16.04中不再是这种情况。

这是相关的错误:https : //bugs.launchpad.net/ubuntu/+source/grub2/+bug/1401532

这是相关的蓝图:https : //blueprints.launchpad.net/ubuntu/+spec/foundations-x-installing-unsigned-secureboot


我仍然可以用16.04 beta2和更新后的wl模块加载。但是现在有了该版本,我收到一个错误“ modprobe:错误:无法插入'wl':所需的密钥不可用”
solsTiCe

您可以尝试运行:sudo apt install mokutil; sudo mokutil --disable-validation
Anthony Wong


1

接受的答案非常完整,但是我想补充一下以下简单信息:

https://askubuntu.com/a/843678/664391

基本上安全的启动可能会阻止您加载某些已安装的驱动程序,这可能会令人沮丧。我本人已经经历过:驱动程序安装正确,一切似乎都很好,但是却无法正常工作。花了我一些时间才发现它是安全启动,阻止了操作系统加载它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.