Impossibile caricare "vboxdrv" dopo l'aggiornamento a Ubuntu 16.04 (e voglio mantenere un avvio sicuro)


130

Aggiornamento da Ubuntu 15.10 a 16.04 e da allora VirtualBox 5.0.18 non avvia più le mie macchine virtuali. Si lamenta che "vboxdrv" non sia caricato. Quindi provo a caricarlo e ottengo il seguente errore:

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

Credo che sia correlato all'avvio sicuro che utilizzo e che voglio continuare a utilizzare. In realtà con Ubuntu 15.10 l'avvio sicuro e VirtualBox funzionavano perfettamente.

Inoltre ho provato a $ sudo apt-get --reinstall install virtualbox-dkmscompilare correttamente il modulo del kernel ma non ho risolto questo problema.

Qualche idea su come caricare vboxdrv mantenendo abilitato l'avvio protetto?

Aggiornamento 2 : ho anche provato a eseguire sudo mokutil --disable-validation. Quando eseguo questo comando, durante il prossimo avvio mi viene richiesto di disabilitare l'avvio sicuro, aggiungere una chiave o un hash dal disco. Dal momento che non voglio disabilitare l'avvio sicuro, sembra che anche questo non risolva il mio problema. Inoltre, voglio mantenere UEFI attivato per un'installazione parallela di Windows.

Nota : se non ti dispiace disabilitare l'avvio sicuro, vedi Perché ottengo "Chiave richiesta non disponibile" quando installo i moduli del kernel di terze parti o dopo un aggiornamento del kernel? anziché.



Sebbene questa domanda sia un duplicato di askubuntu.com/questions/762254/… , quella domanda non contiene la risposta data da @Majal di seguito.
zwets,


FWIW, per i googler: con Ubuntu 18.04, l'installazione aptitude install virtualbox virtualbox-dkms sarà firmare il modulo e vi chiederà una sola volta la password (?). Riavvia, inserisci la configurazione MOK e registra la chiave usando quella password.
Raphael,

Risposte:


177

Dalla versione 4.4.0-20 del kernel, è stato imposto che i moduli del kernel non firmati non fossero autorizzati a eseguire Secure Boot abilitato. Poiché si desidera mantenere l'avvio protetto, il passaggio logico successivo è firmare quei moduli.

Quindi proviamo.

  1. Crea chiavi di firma

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

    Opzione : per maggiore sicurezza, salta l'opzione -nodes, che ti chiederà una password. Quindi, prima di passare al passaggio successivo, assicurati diexport KBUILD_SIGN_PIN='yourpassword'

  2. Accedi al modulo (vboxdrv per questo esempio, ma ripeti per altri moduli ls $(dirname $(modinfo -n vboxdrv))/vbox*.ko)per la piena funzionalità)

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
    
  3. Conferma che il modulo è firmato

    tail $(modinfo -n vboxdrv) | grep "Module signature appended"
    
  4. Registrare le chiavi su Secure Boot

    sudo mokutil --import MOK.der
    

    che chiederà una password da utilizzare per confermare l'importazione nel passaggio successivo.

  5. Riavvia e segui le istruzioni per registrare MOK (chiave del proprietario della macchina). Ecco un esempio con le immagini. Il sistema si riavvierà ancora una volta.

  6. Conferma che la chiave è stata registrata

    mokutil --test-key MOK.der
    

Se VirtualBox continua a non caricarsi, è possibile che il modulo non sia stato caricato ( sudo modprobe vboxdrvrisolverlo) o che la chiave non sia firmata. Basta ripetere quel passaggio e tutto dovrebbe funzionare bene.

Risorse: Articolo dettagliato sul sito Web per l' implementazione di Firma dei moduli di Fedora e Ubuntu . @zwets per maggiore sicurezza . @shasha_trn per aver menzionato tutti i moduli .

Risorsa aggiuntiva: ho creato uno script bash per uso personale ogni volta che si virtualbox-dkmsaggiorna e quindi sovrascrivo i moduli firmati. Dai un'occhiata al mio vboxsign originariamente su GitHub .


7
Ho anche firmato i moduli vboxnetadp, vboxnetflt, vboxpci per avere dispositivi di rete e pass-pci nelle macchine virtuali.
sasha_trn,

4
Estendendo la risposta di @ majal, ho dovuto eseguire sudo apt install --reinstall virtualbox-dkmsprima di seguire le istruzioni fornite.
TylersSN,

1
@zwets potresti forse approfondire come impostare correttamente la KBUILD_SIGN_PINvariabile ambientale? export KBUILD_SIGN_PIN=passworde export KBUILD_SIGN_PIN="password"prima del passaggio 2 sono risultate entrambeSSL error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read: pem_pkey.c:117
adempewolff il

3
@adempewolff Se la tua password contiene caratteri che la tua shell interpreterà (es. '$' in una stringa tra virgolette), dovrai racchiuderla in apostrofi (').
zwets l'

1
@Majal Grazie per la tua risposta! Preferisco anche firmare i moduli invece di disabilitare la funzione. Posso aggiungere: (1) Questo vale anche per i moduli VMware "vmmon" e "vmnet", che condividono lo stesso destino. (2) Durante l'aggiunta delle chiavi create, scegli la password con saggezza. Durante la fase di riavvio e di avvio con avvio sicuro, il layout della tastiera potrebbe differire dalle impostazioni locali. (-> US-Layout)
one-mb

15

Sul mio sistema ho fatto quanto segue per farlo funzionare:

Esegui mokutil:

sudo mokutil --disable-validation

Quindi mokutil mi ha chiesto di impostare una password per MOK Manager. Dopo aver riavviato il PC, il BIOS ha mostrato una finestra di dialogo per configurare MOK Manager. Ho disabilitato SecureBoot da questa finestra di dialogo, ha richiesto diversi caratteri dalla password (ad es. Inserire carattere (5), ecc.).

Dopo aver avviato i moduli vboxdrv caricati correttamente.

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

Curiosamente, mokutil mostra ancora che SecureBoot è abilitato:

sudo mokutil --sb-state
SecureBoot enabled

9
Come indicato nella mia domanda, desidero continuare a utilizzare l'avvio protetto. Quindi la disabilitazione dell'avvio protetto non risolve il problema.
Jans

2
Non volevo disabilitare l'avvio sicuro, ma alla fine ho dovuto farlo poiché nient'altro avrebbe funzionato - non voglio iniziare a firmare le cose manualmente ogni volta che arriva un aggiornamento del kernel. Peccato che questa sia l'unica soluzione semplice. A proposito, UEFI dice ancora che l'avvio sicuro è abilitato. ¯_ (ツ) _ / ¯
jaywink,

4

È possibile disabilitare il controllo di convalida da

sudo apt install mokutil
sudo mokutil --disable-validation

Dopodiché i pacchetti DKMS dovrebbero essere installati.


2
Inoltre ho provato a eseguire sudo mokutil --disable-validation. Quando eseguo questo comando, durante il prossimo avvio mi viene richiesto di disabilitare l'avvio sicuro, aggiungere una chiave o un hash dal disco. Dal momento che non voglio disabilitare l'avvio sicuro, sembra che anche questo non risolva il mio problema. Per favore fatemi sapere se ho frainteso questo comando.
Jans

2
Prova a disabilitare l'avvio sicuro. Puoi riattivarlo, se ciò non aiuta.
Pilota 6

Ho provato a disabilitare l'avvio sicuro - ma è ancora abilitato :( (ubuntu 18.04)
xhudik

0

Ho riscontrato un errore su vboxdrv anche dopo l'aggiornamento. Ma c'era un problema con la vecchia versione (5.0.14) di Oracle VM VirtualBox Extension Pack. Ho scaricato e installato la versione più recente (5.0.18) di questo pacchetto e il problema è scomparso.


Ehi, potresti per favore elaborare? Da dove l'hai scaricato? PPA o file deb?
Karthik Nishanth,

1
Ho scaricato Extension Pack dai download sul sito VirtualBox , il link è "VirtualBox 5.0.18 Oracle VM VirtualBox Extension Pack -> Tutte le piattaforme supportate ". Quindi ho aperto File> Preferenze su Oracle VM Virtual Box Manager, selezionato "Estensioni" e aggiunto il file scaricato all'elenco. Ha sostituito la vecchia versione di "Oracle VM VirtualBox Extension Pack" (era 5.0.14rxxxxxx).
Rel

1
Il pacchetto di estensione non corregge l'errore. L'errore riguarda la firma del modulo
Karthik Nishanth,

Questo non si applica al mio problema.
Jans

1
Ciò non è correlato al problema del PO. Il messaggio di errore "Chiave richiesta non disponibile" indica che il problema è dovuto a un modulo kernel non firmato su una piattaforma abilitata per l'avvio protetto. Nessun aggiornamento di VirtualBox può risolvere questo problema a meno che non includa un modulo firmato usando una chiave ritenuta attendibile dal kernel. Vale a dire che Canonical deve firmarlo oppure Oracle deve firmarlo e la sua chiave pubblica deve essere aggiunta alle chiavi attendibili del kernel (o della piattaforma).
zwets,

0

Bene, quindi dopo un po 'di test sono abbastanza sicuro che questo sia un problema di avvio sicuro.

Come se fosse abilitato, questo viene lanciato:

ATTENZIONE: il modulo kernel vboxdrv non è caricato. O non è disponibile alcun modulo per il kernel corrente (4.4.0-21-generico) o non è stato possibile caricarlo. Si prega di ricompilare il modulo del kernel e installarlo tramite l'installazione sudo / sbin / rcvboxdrv

Tuttavia, se l'avvio sicuro è disabilitato, la virtualbox si carica senza errori.

Ho ancora il mio BIOS impostato come UEFI.


3
Come indicato nella mia domanda, desidero continuare a utilizzare l'avvio protetto. Quindi la disabilitazione dell'avvio protetto non risolve il problema.
Jans

0

Ho avuto lo stesso problema oggi, avevo Windows 10 e Ubuntu 15.10 su un dual boot con uefi abilitato su Bios (non l'ho disabilitato in modo da poter eseguire Windows preinstallato).

Dopo l'aggiornamento a Ubuntu 16.04 VirtualBox ha smesso di caricare le mie VM con lo stesso messaggio di errore:

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

Ho sospettato un problema UEFI perché durante l'aggiornamento il programma di installazione mi ha chiesto se volevo disabilitarlo, a cui ho risposto No (perché Sì potrebbe rendere il mio Windows inutilizzabile).

Quello che ho fatto è andare al BIOS e abilitare il supporto per l'avvio del BIOS legacy SENZA disabilitare l'avvio sicuro.

Virtualbox ora funziona bene.

Aggiornamento : come @zwets ha giustamente indicato nel commento, abilitando i moduli legacy si disabilita l'avvio sicuro.


2
In realtà ho anche bisogno di UEFI per avviare un'installazione parallela di Windows. Quindi disabilitarlo non è un'opzione neanche per me. Ho aggiornato la mia domanda di conseguenza.
Jans

Hai abilitato il supporto per i moduli BIOS legacy? Questa è un'altra opzione nel BIOS UEFI, diversa dall'avvio sicuro.
Zeine77,

1
@ Zeine77 puoi verificare che il tuo BIOS consenta l'abilitazione di "moduli legacy" mentre Secure Boot rimane abilitato ? Ciò è altamente improbabile, poiché la prima opzione consente l'esecuzione di codice non attendibile nello spazio del kernel, il che vanifica lo scopo della seconda.
zwets,

@zwets hai ragione, ho appena controllato le mie impostazioni del BIOS; e l'abilitazione di moduli legacy ha causato la disabilitazione dell'avvio protetto. Ho ipotizzato, come spiegato nella risposta, che la disabilitazione dell'avvio protetto causerebbe il fallimento dell'avvio di Windows 10, non è questo il caso. Quando ho installato 15.10 (mesi fa) per la prima volta, mi sono preoccupato di non disabilitare l'avvio sicuro poiché ciò avrebbe danneggiato l'installazione di Win 10. Questo significa che Win 10 preinstallato funziona correttamente con la modalità sicura disabilitata?
Zeine77,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.