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

Ubuntu16.04下内核模块验证失败(签名/密钥缺失)求助

解决Ubuntu 16.04 LTS内核模块加载时「Module verification failed」错误

我看到你在Ubuntu 16.04 LTS上编译加载自定义内核模块时,碰到了「Module verification failed: signature and/or required key missing - tainting kernel」的警告,而且修改Makefile里的CONFIG_MODULE_SIG参数后也没解决这个问题。先别着急,咱们一步步来分析:

首先从你的系统日志能看出来,这个警告其实不影响模块的正常功能——你的模块已经成功完成初始化和清理操作了,只是内核因为加载了未签名的模块,把自己标记为"tainted"(受污染)状态而已。

先把你提供的相关代码和信息整理一下:

你的内核模块代码

#include<linux/module.h>
int proc_init (void) {
    printk(KERN_INFO "helloModule: kernel module initialized\n");
    return 0;
}
void proc_cleanup(void) {
    printk(KERN_INFO "helloModule: performing cleanup of module\n");
}
MODULE_LICENSE("GPL");
module_init(proc_init);
module_exit(proc_cleanup);

你的原始Makefile

CONFIG_MODULE_SIG=n
obj-m += helloModule.o
all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

相关系统日志片段

[ 1092.186460] helloModule: module verification failed: signature and/or required key missing - tainting kernel
[ 1092.188510] helloModule: kernel module initialized
[ 2245.128462] helloModule: performing cleanup of module
[ 2250.667037] helloModule: kernel module initialized
[ 2305.815511] helloModule: performing cleanup of module
[ 2357.490185] helloModule: kernel module initialized
...(后续模块加载/卸载日志)

问题原因

你修改CONFIG_MODULE_SIG后没生效,是因为Ubuntu 16.04的内核构建系统优先级更高,你在自己Makefile开头定义的这个变量,会被内核自带的Makefile覆盖掉,所以根本没起到禁用签名验证的作用。

解决办法

这里给你几个不同场景的解决方案:

1. 编译时强制传递禁用签名参数(推荐用于开发测试)

修改你的Makefile,把CONFIG_MODULE_SIG=0直接传递给内核的make命令,这样就能确保参数被内核构建系统接收:

obj-m += helloModule.o
all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules CONFIG_MODULE_SIG=0
clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

重新编译模块后,再加载就不会出现这个警告了。

2. 临时禁用内核签名验证(单次生效)

如果只是临时测试,不想改Makefile,可以通过修改内核启动参数来关闭签名验证:

  • 重启系统,在GRUB启动菜单出现时按e进入编辑模式
  • 找到以linux开头的那一行,在末尾添加module.sig_unenforce
  • 按下Ctrl+X启动系统,这次启动内核就不会验证模块签名了

3. 永久禁用内核签名验证(不推荐,有安全风险)

如果你需要长期禁用这个功能(比如持续开发模块),可以修改GRUB配置:

  1. 编辑/etc/default/grub文件,找到GRUB_CMDLINE_LINUX_DEFAULT行,添加module.sig_unenforce,修改后类似:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash module.sig_unenforce"
  1. 更新GRUB配置:
sudo update-grub
  1. 重启系统后,内核就会永久关闭模块签名验证(注意:这会降低系统安全性,生产环境不要这么做)

最后补充

再次强调,这个警告本身不会影响模块的正常运行,如果你只是开发测试,用方案1或者临时禁用就足够了。如果是生产环境的模块,建议还是按照内核要求给模块签名,而不是禁用验证机制。

内容的提问来源于stack exchange,提问作者BitByte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:15:59