ubuntu 16.10 virtualbox 未签名

Syb*_*bie 5 virtualbox uefi 16.10

我在启用 uefi 安全启动的情况下让 virtualbox5.1 在 ubuntu 16.10 上工作时遇到问题,这要从我对 vagrant 的自学开始,并进一步:)。 \n所以我希望,有人可以帮助我查明问题或指导我正确的方式。

\n\n

我在网上研究了很多,并来到了这个过程,但它对我不起作用,当我执行“sudo modinfo vboxdrv”时,我丢失了签名信息。

\n\n

我将显示我认为相关的输出。如果您需要更多信息,请随时告诉我:

\n\n
uname -r\n4.8.0-26-generic\n\ndpkg -S sign-file\nlinux-headers-4.8.0-22-generic: /usr/src/linux-headers-4.8.0-22-generic/scripts/.sign-file.cmd\nlinux-headers-4.8.0-26-generic: /usr/src/linux-headers-4.8.0-26-generic/scripts/.sign-file.cmd\nlinux-headers-4.8.0-26: /usr/src/linux-headers-4.8.0-26/scripts/sign-file.c\nlinux-headers-4.8.0-22-generic: /usr/src/linux-headers-4.8.0-22-generic/scripts/sign-file\nlinux-headers-4.8.0-26-generic: /usr/src/linux-headers-4.8.0-26-generic/scripts/sign-file\nlinux-headers-4.8.0-22: /usr/src/linux-headers-4.8.0-22/scripts/sign-file.c\nlinux-headers-4.8.0-22-generic: /usr/src/linux-headers-4.8.0-22-generic/scripts/sign-file.c\nlinux-headers-4.8.0-26-generic: /usr/src/linux-headers-4.8.0-26-generic/scripts/sign-file.c\n\ncd .ssh\n\nopenssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -days 36500 -subj "/CN=computername.module.signing@gmail.com"\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x9center 我的密码两次 \xe2\x80\x9d,因为我省略了 -nodes(额外的安全性;])

\n\n
chmod 600 MOK.priv\n\nexport KBUILD_SIGN_PIN=\xe2\x80\x9dp4$$w<>rD\xe2\x80\x9d (not the real password off-course:])\n\n-rw-------  1 username username 1834 Okt 21 14:44 MOK.priv\n-rw-r--r--  1 username username  837 Okt 21 14:44 MOK.der\n-rwx------  1 username username 1113 Okt 21 15:20 signscript\n\nfor f in $(dirname $(modinfo -n vboxdrv))/*.ko; do echo "Signing $f"; sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $f; done\n\nSigning /lib/modules/4.8.0-26-generic/misc/vboxdrv.ko\nAt main.c:161:\n- SSL error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read: pem_pkey.c:117\nsign-file: ./MOK.priv: Success\nSigning /lib/modules/4.8.0-26-generic/misc/vboxnetadp.ko\nAt main.c:161:\n- SSL error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read: pem_pkey.c:117\nsign-file: ./MOK.priv: Success\nSigning /lib/modules/4.8.0-26-generic/misc/vboxnetflt.ko\nAt main.c:161:\n- SSL error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read: pem_pkey.c:117\nsign-file: ./MOK.priv: Success\nSigning /lib/modules/4.8.0-26-generic/misc/vboxpci.ko\nAt main.c:161:\n- SSL error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read: pem_pkey.c:117\nsign-file: ./MOK.priv: Success\n\nsudo mokutil --import MOK.der\n
Run Code Online (Sandbox Code Playgroud)\n\n

我重新启动计算机并成功注册证书。\n当我验证 vboxdrv 是否已签名时:

\n\n
sudo modinfo vboxdrv\n    filename:       /lib/modules/4.8.0-26-generic/misc/vboxdrv.ko\n    version:        5.1.8 r111374 (0x00280000)\n    license:        GPL\n    description:    Oracle VM VirtualBox Support Driver\n    author:         Oracle Corporation\n    srcversion:     0194E56703167BB8828186F\n    depends:         jjjjjjjjjjjjjjjjj\n    vermagic:       4.8.0-26-generic SMP mod_unload modversions \n    parm:           force_async_tsc:force the asynchronous TSC mode (int)\n
Run Code Online (Sandbox Code Playgroud)\n\n

该模块未签名,因为我在此输出中缺少信息:

\n\n
signer: something\nsig_key: 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11\nsig_hashalgo: sha256\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了确保我没有犯错误,我使用了这个脚本:\n https://github.com/Majal/maj-scripts/blob/master/vboxsign

\n\n
#!/bin/bash\n# Sign and load VirtualBox modules\n# Run as root\n[ "`whoami`" = root ] || exec sudo "$0" "$@"\n# Set working directory\ndir=/home/username/.ssh\ncd $dir\n# (Optional) Setting env KBUILD_SIGN_PIN for encrypted keys\nprintf "Please enter key passphrase (leave blank if not needed): "; read -s\nexport KBUILD_SIGN_PIN="$REPLY"\n# (Optional) Decrypt private key. To initially encrypt, run `gpg -c MOK.priv` then shred MOK.priv\n#gpg -d --batch --passphrase-file /owned/by/root/.pass MOK.priv.gpg > MOK.priv\necho\n# Sign and load modules\nfor module in vboxdrv vboxnetflt vboxnetadp vboxpci; do\n [ "`hexdump -e \'"%_p"\' $(modinfo -n $module) | tail | grep signature`" ] && echo -e "\\e[93mModule $module is already signed. Skipping.\\e[0m" || /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n $module)\n printf "$module: "\n echo `hexdump -e \'"%_p"\' $(modinfo -n $module) | tail | grep signature`\n modprobe $module && echo -e "\\e[92m$module successfully loaded\\e[0m" || echo -e "\\e[91mFailed to load $module\\e[0m"\n done\n# (Optional) Shred private key\necho\n#shred -vfuz MOK.priv\n
Run Code Online (Sandbox Code Playgroud)\n\n

不幸的是没有成功,我什至收到 SSL 错误,但签名文件脚本告诉我它已成功签名“sign-file:./MOK.priv:成功”

\n\n
At main.c:161:\n- SSL error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt: evp_enc.c:529\n- SSL error:23077074:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 cipherfinal error: p12_decr.c:108\n- SSL error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error: p12_decr.c:139\n- SSL error:0907B00D:PEM routines:PEM_READ_BIO_PRIVATEKEY:ASN1 lib: pem_pkey.c:141\nsign-file: ./MOK.priv: Success\nvboxpci: \nmodprobe: ERROR: could not insert \'vboxpci\': Required key not available\nFailed to load vboxpci\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我做:

\n\n
sudo /sbin/vboxconfig\n\nCreated symlink /etc/systemd/system/multi-user.target.wants/vboxdrv.service \xe2\x86\x92 /lib/systemd/system/vboxdrv.service.\nCreated symlink /etc/systemd/system/multi-user.target.wants/vboxballoonctrl-service.service \xe2\x86\x92 /lib/systemd/system/vboxballoonctrl-service.service.\nCreated symlink /etc/systemd/system/multi-user.target.wants/vboxautostart-service.service \xe2\x86\x92 /lib/systemd/system/vboxautostart-service.service.\nCreated symlink /etc/systemd/system/multi-user.target.wants/vboxweb-service.service \xe2\x86\x92 /lib/systemd/system/vboxweb-service.service.\nvboxdrv.sh: Building VirtualBox kernel modules.\nvboxdrv.sh: Starting VirtualBox services.\nvboxdrv.sh: Building VirtualBox kernel modules.\nvboxdrv.sh: failed: modprobe vboxdrv failed. Please use \'dmesg\' to find out why.\n\nThere were problems setting up VirtualBox.  To re-start the set-up process, run\n  /sbin/vboxconfig\nas root.\n
Run Code Online (Sandbox Code Playgroud)\n\n

不过,“sudo dmesg | grep vbox”是空的

\n\n

我知道这是很多信息,但我希望有人可以帮助我,或者为我指明正确的方向。

\n\n

这是一个干净的安装,所以如果需要的话我可以玩一下:)

\n

jow*_*owo 4

您提供的输出在每个模块的签名过程中显示密码错误:

\n\n
Signing /lib/modules/4.8.0-26-generic/misc/vboxdrv.ko\nAt main.c:161:\n- SSL error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read: pem_pkey.c:117\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题是密码永远不会到达 OpenSSL。\n您使用当前用户的环境变量指定密码:

\n\n
export KBUILD_SIGN_PIN=\xe2\x80\x9dp4$$w<>rD\xe2\x80\x9d\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当您运行几行签名脚本时,您将使用 sudo 在根环境而不是用户环境中运行它:

\n\n
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $f\n
Run Code Online (Sandbox Code Playgroud)\n\n

该脚本以 root 身份运行,并且 KBUILD_SIGN_PIN 变量不在 root 环境中,因此该脚本无法访问 KBUILD_SIGN_PIN。

\n\n

可以通过将环境变量放在 sudo 之后来解决此问题,以确保它设置在根环境中:

\n\n
sudo KBUILD_SIGN_PIN="p4$$w<>rD" /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $f\n
Run Code Online (Sandbox Code Playgroud)\n


Rod*_*ith -1

最简单的解决方案是禁用安全启动。可以使用您自己的密钥对内核模块进行签名,然后注册该密钥,但我不知道该过程的详细信息。