问题描述
此问题仅在启用了安全启动的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开始,强制要求在启用安全启动的情况下不允许运行未签名的内核模块。如果您想要保持安全启动并运行这些模块,那么下一个逻辑步骤是签署这些模块。
所以让我们试试吧。
-
创建签名密钥
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
-
签署该模块
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /path/to/module
-
将密钥注册到安全启动
sudo mokutil --import MOK.der
提供密码以供重启后使用
-
Reboot
并按照说明注册MOK(机器所有者密钥)。这是一张带图片的sample。系统将再次重启。
如果您的模块在Ubuntu 16.04上以这种方式运行(我相信内核4.4.0-21),请告诉我。
资源:模块签名的详细网站article for Fedora和Ubuntu implementation。 (他们一直在努力);-)
关于安全(额外)意识的附加说明:;-)
由于您创建的私钥(在此示例中为MOK.priv
)可供任何可以访问它的人使用,因此最好保证其安全。您可以chmod
它,加密(gpg
)它,或者将它存储在其他地方安全(r)。或者,作为noted in this comment,删除步骤1中的选项-nodes
。这将使用密码加密密钥。
第三种解决方案
您可以使用以下步骤在BIOS中禁用安全引导(UEFI):
-
重新启动计算机并进入BIOS菜单(在我的情况下按F2键)
-
搜索安全启动并更改为旧版
在华硕主板:
-
进入高级模式(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