Ubuntu加载非签名模块的完整指南,解决模块签名验证失败问题

XMSDN

在现代 Ubuntu 系统中,尤其是基于 UEFI 的安装版本,出于安全考虑,内核默认要求所有加载的内核模块必须经过数字签名,这通常被称为“模块签名验证”。

如果你尝试加载一个未经签名的第三方驱动程序、自己编译的内核模块,或者某些特定的硬件驱动,系统通常会报错,提示类似于“module verification failed: signature and/or required key missing - bad module [模块名]”。

本文将详细讲解 Ubuntu 加载非签名模块的几种方法,以及相关的安全注意事项。

Ubuntu加载非签名模块的完整指南,解决模块签名验证失败问题

为什么会出现这个问题?

Ubuntu 默认开启了 Secure Boot(安全启动)功能,并且内核配置中启用了 CONFIG_MODULE_SIG,这意味着,在内核加载任何 .ko 文件之前,它会先验证该文件的数字签名,如果签名无效、缺失或与预期的密钥不匹配,内核将拒绝加载该模块,从而导致设备不可用或服务启动失败。

解决方案

根据你的需求(是临时测试、开发调试,还是为了保留系统安全),有以下几种解决方案:

临时禁用 Secure Boot(最简单、最彻底)

这是最直接的方法,它绕过了整个签名验证机制。

  1. 进入 BIOS/UEFI 设置: 重启电脑,在开机启动时按下 F2DelEsc(具体按键取决于你的主板厂商)进入 BIOS 设置界面。
  2. 关闭 Secure Boot: 找到 "Security" 或 "Boot" 选项卡,将 "Secure Boot" 设置为 Disabled(禁用)。
  3. 重启系统: 保存设置并重启 Ubuntu。
  4. 加载模块: 现在你可以尝试加载之前无法加载的非签名模块,系统将不再进行签名验证。
  5. (可选)恢复安全启动: 如果你完成工作后希望恢复系统的安全性,可以再次进入 BIOS 将 Secure Boot 重新开启。

注意: 关闭 Secure Boot 会降低系统的整体安全性,虽然对于个人桌面用户风险有限,但应谨慎操作。

手动给模块签名(保留安全启动)

如果你希望保留 Secure Boot 开启,同时又能加载自定义的非签名模块,你需要手动对模块进行签名。

  1. 安装签名工具: 首先需要安装 sbsigntool(如果尚未安装)。

    sudo apt update
    sudo apt install sbsigntool
  2. 找到模块文件: 通常模块位于 /lib/modules/$(uname -r)/extra//usr/lib/modules/$(uname -r)/extra/ 目录下,假设你的模块文件名为 my_module.ko

  3. 创建密钥对(仅首次需要): 你需要一个私钥来签名模块,可以使用 OpenSSL 生成一个自签名密钥。

    # 生成私钥
    openssl genrsa -out my_private_key.priv 2048
    # 生成证书
    openssl req -new -x509 -key my_private_key.priv -out my_cert.cer -subj "/CN=My Module Signer"
  4. 签名模块: 使用 sbsigntool 对模块进行签名。

    sudo sbsigntool --sign my_cert.cer --key my_private_key.priv my_module.ko

    签名成功后,会生成一个带签名的副本(通常原文件会被覆盖或重命名)。

  5. 加载模块: 现在你可以正常加载该模块,Secure Boot 会验证通过。

修改内核启动参数(仅验证失败时有效)

这种方法比较少见,通常用于需要加载特定的非标准驱动,但有时也可以通过内核参数来临时禁用模块验证。

  1. 编辑 GRUB 配置文件:

    sudo nano /etc/default/grub
  2. GRUB_CMDLINE_LINUX_DEFAULT 这一行中添加 modprobe.blacklist=<模块名> 或者尝试添加 force_module_signature=0(注意:并非所有内核版本都支持此参数,且可能导致系统不稳定)。

  3. 更新 GRUB 并重启:

    sudo update-grub
    sudo reboot

在 Ubuntu 中处理“加载非签名模块”的问题,核心在于理解 Secure Boot内核模块签名 机制。

  • 如果你只是想快速解决驱动问题进行测试,方法一(关闭 Secure Boot) 是最快的选择。
  • 如果你是在进行开发或必须保证系统安全,方法二(手动签名) 是最标准的做法。

请务必在操作前备份重要数据,并在修改系统安全设置时保持警惕。

💡 温馨提示

📌 阅读须知 Rules & Notice

本站坚持免费分享,致力于为大家提供实用、优质的内容与资源。

🔗欢迎大家收藏与转发,转载请保留本站链接,请勿私自去除版权信息。

📚所有外部整理资源,仅作学习交流使用,请勿用于各类商业用途。

🤝网络相聚本是缘分,希望大家文明交流,理性浏览。

🛠️若发现内容有误或涉及侵权,我们将第一时间处理整改。

💖 感谢每一位朋友的陪伴与支持

✨ 用心分享,一路同行 ✨

目录[+]