You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu系统开启secure boot时运行旧版kernel的签名方法咨询

Ubuntu系统开启secure boot时运行旧版kernel的签名方法咨询

嘿,我太懂你这种左右为难的处境了——既要迁就老闭源软件的内核版本要求,又被Secure Boot卡着不让启动,关键还不能关它,不然闭源驱动直接罢工。别慌,下面给你一套实操的签名流程,亲测在Ubuntu 20.04上可行:

1. 生成专属的内核签名密钥对

首先得准备好签名工具和密钥:

  • 先安装依赖工具:
    sudo apt update && sudo apt install openssl mokutil
    
  • 生成有效期10年的RSA密钥对(私钥+证书),你可以自定义文件名,比如my_kernel_signing.key和my_kernel_signing.crt:
    openssl req -new -x509 -newkey rsa:2048 -keyout my_kernel_signing.key -outform DER -out my_kernel_signing.crt -nodes -days 3650 -subj "/CN=My Custom Kernel Signing Key/"
    
    这里的/CN=...是密钥的标识,随便填个好记的名字就行。

2. 将密钥导入Secure Boot的MOK数据库

MOK(Machine Owner Key)是Secure Boot里允许用户自定义信任密钥的机制,我们需要把刚才生成的证书导入进去:

  • 执行导入命令,设置一个牢记的密码(重启时要用到):
    sudo mokutil --import my_kernel_signing.crt
    

3. 重启完成MOK密钥注册

这一步不能跳过,不然密钥不会被Secure Boot信任:

  • 重启电脑,会进入蓝色的Shim UEFI密钥管理界面(可能显示为MOK Management)
  • 依次选择Enroll MOK → Continue → Yes,输入刚才设置的密码,确认后重启系统。

4. 签名你的5.8内核及模块

现在要给5.8内核镜像和所有内核模块签名:

先确认你的5.8内核版本

用命令查看已安装的5.8内核:

ls /boot | grep vmlinuz-5.8

比如输出可能是vmlinuz-5.8.0-44-generic,记下来这个版本号。

签名内核镜像

替换下面命令里的5.8.0-44-generic为你的实际版本:

sudo /usr/src/linux-headers-5.8.0-44-generic/scripts/sign-file sha256 ./my_kernel_signing.key ./my_kernel_signing.crt /boot/vmlinuz-5.8.0-44-generic

如果提示找不到sign-file,说明没装对应版本的内核头文件,先安装:

sudo apt install linux-headers-5.8.0-44-generic

批量签名内核模块

一个个签模块太麻烦,用脚本批量处理:

MODULE_DIR="/lib/modules/5.8.0-44-generic"
for modfile in $(find $MODULE_DIR -name "*.ko"); do
    sudo /usr/src/linux-headers-5.8.0-44-generic/scripts/sign-file sha256 ./my_kernel_signing.key ./my_kernel_signing.crt $modfile
done

5. 验证签名是否成功

  • 验证内核镜像签名:
    sbverify --list /boot/vmlinuz-5.8.0-44-generic
    
    如果能看到你刚才生成的密钥标识(比如My Custom Kernel Signing Key),说明内核签名成功。
  • 验证模块签名(以NVIDIA驱动模块为例):
    modinfo /lib/modules/5.8.0-44-generic/kernel/drivers/nvidia/nvidia.ko | grep signature
    
    有输出签名信息就说明模块签名没问题。

额外注意事项

  • 以后如果5.8内核有更新(比如安全补丁),必须重新签名新的内核镜像和模块,建议把签名脚本保存下来,方便复用。
  • 密钥文件(my_kernel_signing.key和my_kernel_signing.crt)要妥善保存,别弄丢了,不然下次签名还要重新生成导入。

备注:内容来源于stack exchange,提问作者phlegmax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 13:08:05