8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

kvm:模块验证失败:缺少签名和/或所需密钥 - 污染内核

Nate 2月前

101 0

我正在使用 Ubuntu 14.04 LTS 和内核版本 3.13.11.4。我尝试加载修补的 KVM 模块 kvm 和 kvm-intel,但出现以下错误 kvm:模块验证失败:签名...

我正在使用 Ubuntu 14.04 LTS 内核版本 3.13.11.4 .
我正在尝试加载已修补的 KVM 模块 kvm kvm-intel 但收到以下错误

kvm: module verification failed: signature 和/or required key missing - tainting kernel
and kvm: module has bad taint, not creating trace events .

使用的源与创建我当前运行的图像的源相同。
我已经检查了符号并确保错误不是由于未包含 EXPORT_SYMBOL_GPL() 在我导出函数的修补文件中而导致的。

我也看到了一些关于不同内核版本导致此错误的内容,但我使用与创建修补的 kvm 模块相同的源来构建启动内核。
一切都编译成功,没有任何警告。任何帮助都非常感谢!

帖子版权声明 1、本帖标题:kvm:模块验证失败:缺少签名和/或所需密钥 - 污染内核
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Nate在本站《ubuntu》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 所以内核需要在这里重新编译?抱歉,这个问题可能有点无聊,但我是 Linux 新手,重新编译内核对我来说是个难题。只是想让以太网连接正常工作。看起来我需要额外的软件包,但我不需要这样做(而且我也不需要,因为 wifi 也不工作)

  • 一般来说,如果您正在构建自定义内核并使用 make oldconfig 。这会从 /boot 复制现有的 config-* 文件。如今,大多数内核模块都需要由 Linux 供应商签名。因此,在编译内核之前,请编辑 .config 并禁用 CONFIG_MODULE_SIG_ALL 和 CONFIG_MODULE_SIG。

    CONFIG_MODULE_SIG=n
    CONFIG_MODULE_SIG_ALL=n
    # CONFIG_MODULE_SIG_FORCE is not set 
    # CONFIG_MODULE_SIG_SHA1 is not set
    # CONFIG_MODULE_SIG_SHA224 is not set
    # CONFIG_MODULE_SIG_SHA256 is not set
    # CONFIG_MODULE_SIG_SHA384 is not set
    
  • 我刚刚安装了 centos9,在 /usr/src/kernel 中找不到 certs/signing_key.pem 和 ./certs/signing_key.x509

  • 转到内核源目录并执行(例如):

    ./scripts/sign-file sha512 ./signing_key.priv ./signing_key.x509 /lib/modules/3.10.1/kernel/drivers/char/my_module.ko
    

    对于内核 4.4.*,密钥位置应如下:

    ./scripts/sign-file sha512 ./certs/signing_key.pem ./certs/signing_key.x509 path/to/your/kernel/module.ko 
    

    并读取 .config 来检查内核正在使用的摘要算法 CONFIG_MODULE_SIG

    CONFIG_MODULE_SIG=y CONFIG_MODULE_SIG_ALL=y CONFIG_MODULE_SIG_SHA512=y CONFIG_MODULE_SIG_HASH="sha512"
    

    注意:如果你正在使用未构建的现有内核,请通过查看相应的配置文件(主要是 /proc/* 或 ) /boot/* 。对于 Ubuntu 来说,在 /boot/config-$(uname -r) .

  • @IlyaMatveychikov 我记得在 Ubuntu 14.04 上构建 Linux 设备驱动程序中的一些示例模块失败时尝试解决这个问题。我发现它对我来说很有效,而无需对 Ubuntu 默认内核进行任何更改。我想你知道一个更好的方法 - 你介意发布一个答案来解决这个问题吗?我猜其他人也遇到了这个问题(虽然它可能不适用于较新的内核 - 不确定)

  • 多么糟糕的答案!定义 CONFIG_MODULE_SIG=n 会导致在编译模块时对 module.h 进行不正确的解析。内核和模块的结构布局将出现分歧。为什么这里有这么多赞成票?

  • 对于我来说,这绝对适用于不同的模块:rtl8188 和 Ubuntu 15.1

  • 我同时使用 Suse(3.12) 和 RHEL 7(3.10.0),结果相同。我也在 kernelnewbies.org 上讨论过这个问题,但现在似乎没有令人满意的答案。你能帮忙检查一下这个邮件主题吗?非常感谢!

  • 你试过了吗?我发现添加 \'CONFIG_MODULE_SIG=n\' 仍然会打印 \'模块验证失败:缺少签名和/或所需密钥 - 污染内核\' 消息。

  • 无需重新配置内核, module verification failed 模块本身的 CONFIG_MODULE_SIG=n 顶部 Makefile 添加一行即可解决此错误()

    CONFIG_MODULE_SIG=n
    
    # If KERNELRELEASE is defined, we've been invoked from the
    # kernel build system and can use its language.
    ifneq ($(KERNELRELEASE),)
        obj-m := hello.o
    
    # Otherwise we were called directly from the command
    # line; invoke the kernel build system.
    else
        KERNELDIR ?= /lib/modules/$(shell uname -r)/build
        PWD := $(shell pwd)
    
    default:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    endif
    
  • 引用 12

    使用此页面签署我的模块 wiki.gentoo.org/wiki/Signed_kernel_module_support

  • 您的系统供应商似乎已在您的内核上启用了 内核模块签名验证, 这意味着它不会加载任何供应商未签名的模块。换句话说,您的修补模块未正确签名,内核将拒绝加载它。

    这样做的目的是为了防止恶意软件和 rootkit 加载恶意内核模块。

    我建议你联系你的供应商。你的平台上可能有一个选项可以禁用签名检查。否则,你的供应商可能能够为你签署模块。你甚至可能拥有密钥和签名验证算法的详细信息,并且可以自己签署。

    如果不知道您在什么平台上运行,就很难给出更具体的建议。

返回
作者最近主题: