当前位置: 首页>>技术问答>>正文


安装第三方内核模块或内核升级后,为什么会出现“必需密钥不可用”?

, , , ,

问题描述

此问题仅在启用了安全启动的UEFI系统上发生。

当我尝试安装像VirtualBox,Nvidia或Broadcom驱动程序这样的DKMS模块时,它们没有安装,当我尝试使用modprobe时,我得到了Required key not available

VirtualBox抱怨未加载vboxdrv

Broadcom wl驱动程序在lspci -k中显示为内核模块,但未使用。 sudo modprobe wl引发Required key not available

当我从git源安装一些内核模块时,也可能发生此问题。

内核更新后禁用无线适配器,重启后黑屏等可能会出现此问题。

我该如何解决?

最佳解决方案

由于Ubuntu内核4.4.0-20已启用EFI_SECURE_BOOT_SIG_ENFORCE内核配置。如果启用了UEFI安全启动,则可以防止加载未签名的第三方模块。

解决此问题的最简单方法是在UEFI(BIOS)设置中禁用安全启动。

在大多数情况下,您可以使用grub菜单进入UEFI设置。在启动时按ESC按钮,进入grub菜单并选择System Setup。安全启动选项应位于UEFI的”Security”或”Boot”部分。

您可以直接进入UEFI,但这取决于您的硬件。阅读您的计算机手册,了解如何到达那里。它可能是Del,或F2在启动时,或其他。

另一种方法是使用mokutil禁用安全启动。

由于Ubuntu内核版本为4.4.0-21.37,因此可以通过运行来修复

sudo apt install mokutil
sudo mokutil --disable-validation

它需要创建一个密码。密码长度至少应为8个字符。重新启动后,UEFI将询问您是否要更改安全设置。选择”Yes”。

然后,系统会要求您输入先前创建的密码。一些UEFI固件要求不是完整密码,而是要输入一些字符,如1st,3rd等。小心。有些人不明白这一点。我也没有从第一次尝试中得到它;-)

更新:现在在所有受支持的Ubuntu内核中启用此内核配置。 Ubuntu 16.04,15.10和14.04受到影响。

次佳解决方案

作为用户@zwets的suggested,我在这里复制(带编辑)an answer

从内核版本4.4.0-20开始,强制要求在启用安全启动的情况下不允许运行未签名的内核模块。如果您想要保持安全启动并运行这些模块,那么下一个逻辑步骤是签署这些模块。

所以让我们试试吧。

  1. 创建签名密钥

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
    
  2. 签署该模块

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /path/to/module
    
  3. 将密钥注册到安全启动

    sudo mokutil --import MOK.der
    

    提供密码以供重启后使用

  4. Reboot并按照说明注册MOK(机器所有者密钥)。这是一张带图片的sample。系统将再次重启。

如果您的模块在Ubuntu 16.04上以这种方式运行(我相信内核4.4.0-21),请告诉我。

资源:模块签名的详细网站article for FedoraUbuntu implementation。 (他们一直在努力);-)

关于安全(额外)意识的附加说明:;-)

由于您创建的私钥(在此示例中为MOK.priv)可供任何可以访问它的人使用,因此最好保证其安全。您可以chmod它,加密(gpg)它,或者将它存储在其他地方安全(r)。或者,作为noted in this comment,删除步骤1中的选项-nodes。这将使用密码加密密钥。

第三种解决方案

您可以使用以下步骤在BIOS中禁用安全引导(UEFI):

  1. 重新启动计算机并进入BIOS菜单(在我的情况下按F2键)

  2. 搜索安全启动并更改为旧版

在华硕主板:

  • 进入高级模式(F7)

  • 进入Boot部分下的Secure Boot选项

  • 使用”Other OS”更改“Windows UEFI模式”

  • 保存并重新启动以应用设置(F10)

第四种方案

您还可以在运行sudo update-secureboot-policy的shim-signed中禁用安全启动。这个wiki page解释了这个方法:

  • Open a terminal (Ctrl + Alt + T), and execute sudo update-secureboot-policy and then select Yes.
  • Enter a temporary password between 8 to 16 digits. (For example, 12345678, we will use this password later
  • Enter the same password again to confirm.
  • Reboot the system and press any key when you see the blue screen (MOK management
  • Select Change Secure Boot state
  • Enter the password you had selected in Step 2 and press Enter.
  • Select Yes to disable Secure Boot in shim-signed.
  • Press Enter key to finish the whole procedure.

You can still enable Secure Boot in shim-signed again. Just execute

sudo update-secureboot-policy –enable and then follow the steps above

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1685.html,未经允许,请勿转载。