Eu não tentei nenhum desses procedimentos. No entanto, eu faço isso de uma maneira diferente - mas é um método muito tedioso. Esta descrição fará parecer mais fácil do que isso, porque eu me refiro a uma grande página que eu escrevi que cobre o pior das partes tediosas. Meu procedimento é:
- Assuma o controle da inicialização segura - no meu caso, configurei meu computador para que eu incorpore minha própria chave pública de inicialização segura no firmware. Dessa forma, não preciso usar Shim ou MOKs. Eu removi as chaves da Microsoft e adicionei as minhas próprias e as chaves da Canonical ao computador no qual eu uso este procedimento, mas você pode configurar as suas com as teclas que quiser. A parte crítica para os propósitos de sua pergunta é que você deve incluir uma chave que você gere, com uma chave privada que você retenha para fazê-la funcionar. Você também precisará das chaves usadas para assinar os componentes padrão - a chave da Canonical, a chave de mercado público da Microsoft ou ambas. Se você fizer uma dupla inicialização com o Windows, precisará da chave pública para a que a Microsoft usa para assinar seu próprio gerenciador de inicialização. Veja esta página minha para todos os detalhes sangrentos - mas esteja ciente de que este é um tedioso e procedimentos delicados, então você pode passar um bom tempo fazendo essa parte funcionar. Observe que a maioria dos UEFIs facilita bastante a restauração do conjunto de chaves padrão, portanto, o risco envolvido na tentativa desse procedimento é baixo.
- Assinar os módulos do VirtualBox - O próximo passo é assinar os módulos do kernel do VirtualBox. Isso é feito praticamente da mesma maneira que as páginas que você vinculou descrevem; no entanto, tenho um script para ajudar a automatizar esse processo (veja abaixo).
-
Carrega o módulo do VirtualBox - Depois de assinar os módulos, eles devem ser carregados. Isso deve acontecer automaticamente na reinicialização; mas se você quiser usar o VirtualBox sem reinicializar, deve usar explicitamente
modprobe
para cada um dos módulos (vboxdrv
,vboxnetflt
,vboxpci
evboxnetadp
). - Repita os passos 2-3 após cada atualização do kernel - Após a atualização do kernel, os passos 2 e 3 devem ser repetidos.
Por conveniência, escrevi um script para executar as etapas 2 e 3 em um comando. Eu chamo de sign-vbox
. Aqui está:
#!/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
Para usar este script, basta digitar seu nome. Assina os módulos do VirtualBox associados ao kernel em execução no momento. Se você passar um número de versão do kernel, ele deve assinar os kernels associados a essa versão do kernel, mas não há espaço para erro ao especificar o número da versão do kernel. (Ele espera o mesmo formato que uname -r
retornaria se o kernel estivesse em execução.)
Observe que o script espera encontrar chaves privadas ( refind_local.key
) e públicas ( refind_local.cer
) em /etc/refind.d/keys/
. Você precisará alterar esse local para o seu próprio sistema, a menos que você use o rEFInd e use as chaves locais para ele. O arquivo de chave privada deve ser tão seguro quanto você puder, como ter 0400 ( -r--------
) permissões. Limitar o acesso ao diretório em si também pode ser útil. Melhor ainda, coloque-o em uma unidade flash USB que você conecte somente quando executar este comando.
Além disso, escrevi este script para meu uso pessoal. Provavelmente tem erros, especialmente se usados de uma maneira que eu não esperava. Certamente, ele falhará bastante se os arquivos de origem do kernel não estiverem instalados.
É concebível que este script funcione com os métodos baseados em MOK que você tentou usar se o apontasse para os arquivos de chaves que você gerou, o arquivo público do qual você carregou no MOK. Eu não posso prometer isso, porém, e é claro, seus problemas podem ser devidos a módulos do kernel ou problemas incorretamente assinados no final do Shim / MOK. Usar este script ajudaria apenas se os módulos do seu kernel não estivessem corretamente assinados.