exc*_*491 10 virtualbox uefi secure-boot
我正在尝试在 Ubuntu 16.04 上安装 VirtualBox,同时保持安全启动。当我通过 Synaptic 安装它时,我被要求删除 SecureBoot,我说No。
我遵循以下说明: 升级到 Ubuntu 16.04 后无法加载“vboxdrv”(我想保持安全启动) 和 https://stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail/ 两者都是几乎相同(我将 MOK 文件保留在 /root 目录中,就像在第二个链接中一样)。一切似乎都正常,我重新启动,再次输入密码,重新启动。都好
但是当我尝试使用 VirtualBox 时,它仍然无法正常工作。如果我从终端运行它,我会得到:
WARNING: The character device /dev/vboxdrv does not exist.
Please install the virtualbox-dkms package and the appropriate
headers, most likely linux-headers-generic.
You will not be able to start VMs until this problem is fixed.
Run Code Online (Sandbox Code Playgroud)
但是这两个软件包已经安装并且是最新的。
另一篇文章的最佳答案中的评论说virtualbox-dkms在遵循这些说明之前重新安装。我试过了,结果一样。
我在这里尝试了答案:
VirtualBox 的安装问题
这再次提示我询问是否要禁用安全启动,我说No,然后回到第一个。
如果我跑modprobe我得到:
modprobe: ERROR: could not insert 'vboxdrv': Required key not available
关于如何让 VirtualBox 在启用 SecureBoot 的情况下工作的任何想法(请不要告诉我删除它......)?
谢谢
我没有尝试过这些程序中的任何一个。但是,我确实以不同的方式执行此操作 - 但这是一种非常乏味的方法。这个描述看起来比那更容易,因为我参考了我写的一个大页面,它涵盖了最乏味的部分。我的程序是:
modprobe每个模块(vboxdrv,vboxnetflt,vboxpci和vboxnetadp)。为方便起见,我编写了一个脚本来在一个命令中执行步骤 #2 和 #3。我称之为sign-vbox。这里是:
#!/bin/bash
# sign-vbox script, copyright (c) 2017 by Rod Smith
# Distributed under the terms of the GPLv3
if [ "$#" -ne 1 ] && [ "$#" -ne 0 ]; then
echo "Usage: $0 [ {kernel-version} ]"
exit 1
fi
if [ "$#" == 0 ]; then
kernel_version=$(uname -r)
else
kernel_version="$1"
fi
sign_file=$(find /usr/src/ -name sign-file | tail -n 1)
if [ -z $sign_file ]; then
echo "Can't find the sign-file binary! Exiting!"
exit 1
else
path_to_modules="/lib/modules/$kernel_version/updates/dkms"
if [ ! -f $path_to_modules/vboxdrv.ko ]; then
echo "Could not find $path_to_modules/vboxdrv.ko!"
echo "Is the kernel version correct?"
exit 1
fi
echo "Signing modules for $kernel_version"
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxdrv.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxnetadp.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxnetflt.ko
$sign_file sha256 /etc/refind.d/keys/refind_local.key /etc/refind.d/keys/refind_local.cer $path_to_modules/vboxpci.ko
modprobe vboxdrv
modprobe vboxnetflt
modprobe vboxpci
modprobe vboxnetadp
echo "Loaded vbox modules:"
lsmod | grep vbox
fi
Run Code Online (Sandbox Code Playgroud)
要使用此脚本,只需键入其名称。它对与当前运行的内核相关联的 VirtualBox 模块进行签名。如果您向它传递内核版本号,它应该签署与该内核版本相关联的内核,但在指定内核版本号时没有错误的余地。(它期望在uname -r内核运行时返回的相同格式。)
请注意,脚本期望找到私人(refind_local.key)和大众(refind_local.cer)的按键/etc/refind.d/keys/。您必须为自己的系统更改该位置,除非您使用 rEFInd 并为其使用本地密钥。私钥文件应该尽可能安全,例如具有 0400 ( -r--------) 权限。限制对目录本身的访问也可能有帮助。更好的是,将它放在 USB 闪存驱动器上,只有在运行此命令时才插入该驱动器。
另外,我写了这个脚本供我个人使用。它可能有错误,特别是如果以我不期望的方式使用。如果没有安装必要的内核源文件,它肯定会失败得很厉害。
可以想象,如果您将脚本指向您生成的密钥文件(您加载到 MOK 中的公共文件),那么该脚本将适用于您尝试使用的基于 MOK 的方法。不过,我不能保证这一点,当然,您的问题可能是由于未正确签名的内核模块或 Shim/MOK 端的问题造成的。仅当您的内核模块未正确签名时,使用此脚本才有帮助。
| 归档时间: |
|
| 查看次数: |
26600 次 |
| 最近记录: |