Não foi possível carregar o 'vboxdrv' após a atualização para o Ubuntu 16.04 (e eu quero manter a inicialização segura)

130

Eu atualizo do Ubuntu 15.10 para 16.04 e, desde então, o VirtualBox 5.0.18 não inicia mais minhas VMs. Ele reclama que 'vboxdrv' não está carregado. Então, eu tento carregá-lo e obter o seguinte erro:

$ sudo modprobe vboxdrv
modprobe: ERROR: could not insert 'vboxdrv': Required key not available

Acredito que esteja relacionado à inicialização segura que eu uso e que desejo continuar usando. Na verdade, com o Ubuntu 15.10, a inicialização segura e o VirtualBox estavam funcionando bem.

Também tentei $ sudo apt-get --reinstall install virtualbox-dkmscriar o módulo do kernel com sucesso, mas não resolvi esse problema.

Alguma idéia de como carregar o vboxdrv enquanto mantém a inicialização segura ativada?

Atualização 2 : Também tentei executar sudo mokutil --disable-validation. Ao executar este comando, durante a próxima inicialização, sou solicitado a desativar a inicialização segura, adicionar uma chave ou hash do disco. Como não quero desativar a inicialização segura, parece que isso também não resolve o meu problema. Também quero manter o UEFI ativado para uma instalação paralela do Windows.

Nota : Se você não se importa em desativar a inicialização segura, consulte Por que recebo a "Chave necessária não disponível" ao instalar módulos de kernel de terceiros ou após uma atualização do kernel? em vez de.

jans
fonte
Embora esta pergunta seja uma duplicata do askubuntu.com/questions/762254/… , essa pergunta não apresenta a resposta dada por @Majal abaixo.
Zwets
1
Guia passo a passo: stegard.net/2016/10/virtualbox-secure-boot-ubuntu-fail
Dušan Maďar
FWIW, para Googlers: com o Ubuntu 18.04, a instalação aptitude install virtualbox virtualbox-dkms vai assinar o módulo e pedir-lhe um one-time password (?). Reinicialize, entre na configuração do MOK e registre a chave usando essa senha.
Raphael

Respostas:

177

Desde a versão 4.4.0-20 do kernel, foi imposto que os módulos não assinados do kernel não poderão executar com o Secure Boot ativado. Como você deseja manter a Inicialização segura, a próxima etapa lógica é assinar esses módulos.

Então, vamos tentar.

  1. Criar chaves de assinatura

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive common name/"
    

    Opção : para segurança adicional, pule a opção -nodes, que solicitará uma senha. Antes de passar para o próximo passo, certifique-se deexport KBUILD_SIGN_PIN='yourpassword'

  2. Assine o módulo (vboxdrv neste exemplo, mas repita o procedimento para outros módulos ls $(dirname $(modinfo -n vboxdrv))/vbox*.ko)para obter a funcionalidade completa)

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
    
  3. Confirme se o módulo está assinado

    tail $(modinfo -n vboxdrv) | grep "Module signature appended"
    
  4. Registre as chaves no Secure Boot

    sudo mokutil --import MOK.der
    

    que solicitará uma senha para confirmar a importação na próxima etapa.

  5. Reinicie e siga as instruções para Inscrever o MOK (Chave do proprietário da máquina). Aqui está uma amostra com fotos. O sistema irá reiniciar mais uma vez.

  6. Confirme se a chave está registrada

    mokutil --test-key MOK.der
    

Se o VirtualBox ainda não carregar, pode ser porque o módulo não foi carregado ( sudo modprobe vboxdrvserá corrigido) ou que a chave não foi assinada. Simplesmente repita esse passo e tudo deve funcionar bem.

Recursos: Artigo detalhado do site para implementação do Fedora e Ubuntu da assinatura de módulos. @ zwets para segurança adicional . @shasha_trn por mencionar todos os módulos .

Recurso adicional: criei um script bash para meu próprio uso sempre que virtualbox-dkmsatualizações e, assim, substitui os módulos assinados. Confira meu vboxsign originalmente no GitHub .

Majal
fonte
7
Também assinei os módulos vboxnetadp, vboxnetflt, vboxpci para ter rede e passar dispositivos pci throw em máquinas virtuais.
Sasha_trn
4
Estendendo a resposta do @ majal, tive que executar sudo apt install --reinstall virtualbox-dkmsantes de seguir as instruções fornecidas.
TylersSN
1
@zwets você poderia elaborar como definir adequadamente a KBUILD_SIGN_PINvariável ambiental? export KBUILD_SIGN_PIN=passworde export KBUILD_SIGN_PIN="password"antes do passo 2, ambos resultaram emSSL error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read: pem_pkey.c:117
adempewolff
3
@adempewolff Se a sua senha contiver caracteres que o seu shell interpretará (por exemplo, '$' em uma string entre aspas), será necessário incluí-la entre apóstrofes (').
Zwets
1
@Majal Obrigado pela sua resposta! Também sou a favor de assinar os módulos em vez de desativar o recurso. Posso acrescentar: (1) Isso também se aplica aos módulos VMware "vmmon" e "vmnet", que compartilham o mesmo destino. (2) Ao adicionar as chaves criadas, escolha sua senha com sabedoria. Durante a fase de reinicialização e registro de inicialização segura, o layout do teclado pode diferir das configurações de localidade. (-> Layout dos EUA)
one-mb
15

No meu sistema, fiz o seguinte para fazê-lo funcionar:

Execute o mokutil:

sudo mokutil --disable-validation

O mokutil me pediu para definir uma senha para o MOK Manager. Após reiniciar o PC, o BIOS mostrou uma caixa de diálogo para configurar o MOK Manager. Desabilitei o SecureBoot nessa caixa de diálogo, solicitando vários caracteres da senha (por exemplo, digite o caractere (5), etc.).

Depois de inicializar os módulos vboxdrv carregados corretamente.

lsmod | grep vboxdrv
vboxdrv               454656  3 vboxnetadp,vboxnetflt,vboxpci

Curiosamente, o mokutil ainda mostra que o SecureBoot está ativado:

sudo mokutil --sb-state
SecureBoot enabled
Pocho
fonte
9
Conforme indicado na minha pergunta, quero continuar usando a inicialização segura. Desabilitar a inicialização segura não resolve o problema.
Jans
2
Não queria desativar a inicialização segura, mas no final tinha que fazer isso, já que nada mais funcionaria - não quero começar a assinar as coisas manualmente toda vez que uma atualização do kernel chegar. Pena que esta é a única solução fácil a seguir. A UEFI ainda diz que a inicialização segura está ativada. _ (ツ) _ / ¯
jaywink
4

Você pode desativar a verificação de validação

sudo apt install mokutil
sudo mokutil --disable-validation

Depois disso, os pacotes DKMS devem ser instalados.

Pilot6
fonte
2
Também tentei executar o sudo mokutil --disable-validation. Ao executar este comando, durante a próxima inicialização, sou solicitado a desativar a inicialização segura, adicionar uma chave ou hash do disco. Como não quero desativar a inicialização segura, parece que isso também não resolve o meu problema. Informe-me caso eu tenha entendido mal esse comando.
Jans
2
Tente desativar a inicialização segura. Você pode ativá-lo de volta, se isso não ajudar.
usar o seguinte comando
Tentei desativar inicialização segura - mas ainda está habilitado :( (ubuntu 18.04)
xhudik
0

Também recebi um erro sobre o vboxdrv após a atualização. Mas houve um problema com a versão antiga (5.0.14) do Oracle VM VirtualBox Extension Pack. Fiz o download e instalei a versão mais recente (5.0.18) deste pacote e o problema desapareceu.

Reling
fonte
Ei, você poderia, por favor, elaborar? De onde você baixou? PPA ou arquivo deb?
Karthik Nishanth
1
Eu baixei o pacote de extensão de downloads no site VirtualBox , o link é "VirtualBox 5.0.18 Oracle VM VirtualBox Extension Pack -> todas as plataformas suportadas ". Abri Arquivo> Preferências no Oracle VM Virtual Box Manager, selecionei "Extensões" e adicionei o arquivo baixado à lista. Ele substituiu a versão antiga do "Oracle VM VirtualBox Extension Pack" (era 5.0.14rxxxxxx).
Relando 24/04/16
1
O pacote de extensão não corrige o erro. O erro é sobre a assinatura do módulo
Karthik Nishanth
Isso não se aplica ao meu problema.
Jans
1
Isso não tem relação com o problema do OP. A mensagem de erro "Chave necessária não disponível" indica que o problema ocorre devido a um módulo de kernel não assinado em uma plataforma habilitada para Inicialização Segura. Nenhuma atualização do VirtualBox pode corrigir isso, a menos que inclua um módulo assinado usando uma chave confiável pelo kernel. Ou seja, a Canonical deve assiná-lo ou a Oracle deve assiná-lo e sua chave pública deve ser adicionada às chaves confiáveis ​​do kernel (ou da sua plataforma).
Zwets
0

Tudo bem, então, depois de alguns testes, tenho certeza de que esse é um problema de inicialização segura.

Como se estivesse ativado, isso será lançado:

AVISO: O módulo do kernel vboxdrv não está carregado. Não há módulo disponível para o kernel atual (4.4.0-21-genérico) ou ele falhou ao carregar. Por favor, recompile o módulo do kernel e instale-o por sudo / sbin / rcvboxdrv setup

No entanto, se a inicialização segura estiver desabilitada, o virtualbox carrega perfeitamente, sem erros.

Ainda tenho meu BIOS definido como UEFI.

David Haynes
fonte
3
Conforme indicado na minha pergunta, quero continuar usando a inicialização segura. Desabilitar a inicialização segura não resolve o problema.
Jans
0

Eu tive o mesmo problema hoje, tinha o Windows 10 e o Ubuntu 15.10 em uma inicialização dupla com o uefi ativado no Bios (não o desativei para poder executar o Windows pré-instalado).

Após a atualização para o Ubuntu 16.04, o VirtualBox parou de carregar minhas VMs com a mesma mensagem de erro:

modprobe: ERROR: could not insert 'vboxdrv': Required key not available

Suspeitei de problema com o UEFI porque, durante a atualização, o instalador me perguntou se eu queria desativá-lo, ao qual respondi Não (porque Sim pode tornar o meu Windows inutilizável).

O que fiz foi acessar a Bios e ativar o suporte à inicialização do BIOS herdada SEM desativar a inicialização segura.

Virtualbox funciona bem agora.

Atualização : como o @zwets apontou corretamente no comentário, a ativação de módulos herdados desabilita a inicialização segura.

Zeine77
fonte
2
Na verdade, eu também preciso do UEFI para inicializar uma instalação paralela do Windows. Desabilitar também não é uma opção para mim. Eu atualizei minha pergunta de acordo.
Jans
Você ativou o Suporte para módulos de BIOS herdados? Essa é outra opção no BIOS UEFI, diferente da inicialização segura.
precisa saber é o seguinte
1
@ Zeine77, você pode verificar se o seu BIOS permite ativar "módulos herdados" enquanto o Secure Boot permanece ativado ? Isso é altamente improvável, pois a primeira opção permite que códigos não confiáveis ​​sejam executados no espaço do kernel, o que anula o objetivo da segunda.
Zwets
@ zwets você está certo, acabei de verificar minhas configurações de bios; e ativar os módulos herdados desativou a inicialização segura. Presumi, como explicado na resposta, que desabilitar a inicialização segura causaria falha na inicialização do Windows 10, esse não é o caso. Quando instalei o 15.10 (meses atrás), tomei o cuidado de não desativar a inicialização segura, pois isso danificaria a instalação do Win 10. Isso significa que o Win 10 pré-instalado funciona bem com o modo seguro desativado?
Zeine77