使用 dkms 和 virtualbox-dkms 注册 MOK 证书(启用了安全启动的 Virtualbox)

使用 dkms 和 virtualbox-dkms 注册 MOK 证书(启用了安全启动的 Virtualbox)

与许多其他人一样,我需要从 Virtualbox 运行 Windows 实例,不想禁用安全启动,因此在内核更新后无法使 Virtualbox 正常工作。

我已经完成了必要的步骤,但肯定出了什么问题。目前,如果我禁用安全启动,Virtualbox 可以运行,但当我尝试在启用安全启动的情况下运行虚拟机(目前处于中断状态)时,整个系统就会冻结。

我检查了以下内容:

  • 我已经生成了一个证书(使用-subj "/CN=MyName/")。AMOK.der在那里,我注册了它(mokutil --list-enrolled显示它与 Canonical 的另一个证书一起)。事实上,如果我尝试另一个mokutil -n import MOK.der,我会得到输出SKIP: MOK.der is already enrolled
  • 我可以通过以下脚本对 virtualbox 模块进行签名:

    <!-- language: bash -->
    #!/bin/bash
    for modfile in $(dirname $(modinfo -n vboxdrv))/vbox*.ko; do
      echo "Signing $modfile"
      /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 \
                            /root/module-signing/MOK.priv \
                            /root/module-signing/MOK.der "$modfile"
    done
    
  • ...我可以检查它们是否都已签名:

    $ grep "MyName" $(dirname $(modinfo -n vboxdrv))/vbox*.ko 
    Il file binario /lib/modules/4.13.0-37-generic/updates/dkms/vboxdrv.ko corrisponde
    Il file binario /lib/modules/4.13.0-37-generic/updates/dkms/vboxnetadp.ko corrisponde
    Il file binario /lib/modules/4.13.0-37-generic/updates/dkms/vboxnetflt.ko corrisponde
    Il file binario /lib/modules/4.13.0-37-generic/updates/dkms/vboxpci.ko corrisponde
    
  • 实际上,我可以从命令行加载模块,并且没有错误消息:$ for modfile in $(dirname $(modinfo -n vboxdrv))/vbox*.ko; do modprobe $(basename -s .ko $modfile); done

  • 尽管如此,我在 BIOS 级别已知的证书中找不到我的证书:mokutil --pkmokutil --kek、中都没有mokutil --db在输出中包含“MyName”(但其中一些包含“Canonical”)

所以,问题s:

  • 如果已注册的 MOK 不在 PK、DB 或 KEK 中,那么它存储在哪里?(实际上模块加载)。我应该在 BIOS 实用程序中搜索哪个名称?
  • 什么是垫片
  • 我已经dkms安装了软件包,最近也安装了virtualbox-dkms。这些软件包是否需要?我应该按照什么顺序安装它们?在上述步骤之前还是之后?或者他们应该完成全部工作,而不是让我自己完成手动
  • 我是否应该尝试卸载virtualbox、、dkmsvirtualbox-dkms等等?)并从头开始重新执行该过程?
  • 上述哪些内容适用于目录中的其余模块/lib/modules/4.13.0-37-generic/updates/dkms(即bbswitchnvidia*)?实际上,从系统设置菜单的系统/软件和更新下,我看到正在使用 Nvidia 384.111 专有驱动程序,但我既看不到它,也看不到lsmod | grep nvidiamodprobe

    $ modprobe nvidia_384
    modprobe: ERROR: could not insert 'nvidia_384': Required key not available
    

情况是否不一致?从哪里开始修复它?

谢谢

相关内容