这不是错误,而是功能。
正如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