Perché viene visualizzato il messaggio "Chiave richiesta non disponibile" quando si installano moduli del kernel di terze parti o dopo un aggiornamento del kernel?


79

Questo problema si verifica solo su sistemi UEFI con avvio protetto abilitato.

Quando provo ad installare i moduli DKMS come i driver VirtualBox, Nvidia o Broadcom, non si installano e ottengo Required key not availablequando provo a provarli modprobe.

VirtualBox si lamenta che vboxdrvnon è stato caricato.

Il wldriver Broadcom è mostrato lspci -kcome un modulo del kernel ma non è in uso. sudo modprobe wlgenera Required key not available.

Anche questo problema può verificarsi quando installo alcuni moduli del kernel da fonti git.

Questo problema può comparire dopo un aggiornamento del kernel come adattatore wireless disabilitato, schermo nero dopo un riavvio, ecc.

Come posso ripararlo?


Risposte:


85

Dal kernel Ubuntu 4.4.0-20 la EFI_SECURE_BOOT_SIG_ENFORCEconfigurazione del kernel è stata abilitata. Ciò impedisce il caricamento di moduli di terze parti non firmati se UEFI Secure Boot è abilitato.

Il modo più semplice per risolvere questo problema è disabilitare l'avvio protetto nelle impostazioni UEFI (BIOS).

Nella maggior parte dei casi è possibile accedere alle impostazioni UEFI utilizzando il menu di grub. Premere il ESCpulsante all'avvio, accedere al menu di grub e selezionare Configurazione del sistema. L'opzione Avvio protetto dovrebbe trovarsi nella sezione "Sicurezza" o "Avvio" di UEFI.

Puoi entrare direttamente in UEFI, ma dipende dal tuo hardware. Leggi il manuale del tuo computer per vedere come arrivarci. Potrebbe essere Del, o F2all'avvio, o qualcos'altro.

Un modo alternativo è disabilitare Secure Boot usando mokutil.

Poiché la build del kernel Ubuntu 4.4.0-21.37 può essere risolta eseguendo

sudo apt install mokutil
sudo mokutil --disable-validation

Sarà necessario creare una password. La password deve contenere almeno 8 caratteri. Dopo il riavvio, UEFI chiederà se si desidera modificare le impostazioni di sicurezza. Scegli "Sì".

Quindi ti verrà chiesto di inserire la password precedentemente creata. Alcuni firmware UEFI richiedono non la password completa, ma di inserirne alcuni caratteri, come 1o, 3o, ecc. Fai attenzione. Alcune persone non lo capiscono. Non ho capito neanche dal primo tentativo ;-)

Aggiornamento: ora questa configurazione del kernel è abilitata in tutti i kernel Ubuntu supportati. Ubuntu 16.04, 15.10 e 14.04 sono interessati.


Questo non funziona per me. @Sputnik risponde. Tuttavia, vorrei sapere perché mokutil mi sta chiedendo una password e quando ne ho bisogno?
Alwin Kesler,

8
@AlwinKesler Richiede una password che verrà convalidata dopo il riavvio, prima che le modifiche al database MOK vengano effettivamente eseguite. Senza questo, un processo non autorizzato potrebbe cambiare le chiavi nel database MOK che diventano effettive dopo il successivo riavvio. Inoltre, ora la piattaforma "sa" che la persona che richiede la modifica è la stessa persona che è fisicamente presente dopo il riavvio e avrà quindi superato le misure di sicurezza hardware, come avere accesso fisico alla macchina e conoscere la password del sistema del tempo di avvio .
zwets,

@ Pilot6: sono ancora su Ubuntu 14.04 LTS a causa di alcuni problemi tecnici. Grazie mille per aver aggiornato la risposta.
Ravi Joshi,

3
Ha funzionato per me su Ubuntu 18.04. Non sono riuscito a capire per me il motivo per cui l'installazione dei driver nvidia non funzionava in alcun modo, o anche ripristinando la versione 16.04. Gah! Questo l'ha risolto. Così tanto tempo perso.
Nate,

1
Il mio sistema Ubuntu era davvero in ritardo. Non aveva senso poiché si trattava di un laptop nuovo di zecca. Ora mi rendo conto che la CPU stava facendo tutto e la mia scheda video era inattiva per tutto il tempo. Questo link ha anche aiutato - linuxbabe.com/ubuntu/install-nvidia-driver-ubuntu-18-04
Peter Drinnan,

32

Come suggerito dall'utente @zwets, sto copiando (con modifiche) una risposta qui:

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. Se desideri mantenere l'avvio protetto ed eseguire anche questi moduli, 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 name/"
    
  2. Firma il modulo

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /path/to/module
    

Nota 1 : è possibile firmare più file per un singolo driver / modulo, quindi /path/to/modulepotrebbe essere necessario sostituirli $(modinfo -n <modulename>), ad es$(modinfo -n vboxdrv)

Nota 2 : sudo kmodsign sha512 ./MOK.priv ./MOK.der /path/to/moduleè un'alternativa se sign-filenon è disponibile.

  1. Registrare le chiavi su Secure Boot

    sudo mokutil --import MOK.der
    

    Fornire una password per un uso successivo dopo il riavvio

  2. Reboote seguire le istruzioni per registrare MOK (chiave del proprietario della macchina). Ecco un esempio con le immagini. Il sistema si riavvierà ancora una volta.

Se la chiave è stata registrata correttamente, verrà visualizzata sotto sudo mokutil --list-enrolled.

Per favore fatemi sapere se i vostri moduli funzionerebbero in questo modo su Ubuntu 16.04 (sul kernel 4.4.0-21, credo).

Risorse: Articolo dettagliato sul sito Web per l' implementazione di Firma dei moduli di Fedora e Ubuntu . (ci hanno lavorato) ;-)

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 vboxsignoriginale su GitHub .

Nota aggiuntiva per la sicurezza (extra) consapevole: ;-)

Poiché la chiave privata che hai creato ( MOK.privin questo esempio) può essere utilizzata da chiunque possa accedervi, è buona norma proteggerla. Puoi chmodfarlo, crittografarlo ( gpg) o memorizzarlo in un altro posto sicuro (r). Oppure, come notato in questo commento , rimuovere l'opzione -nodesnel passaggio numero 1. Questo crittograferà la chiave con una passphrase.


Su Ubuntu 14.10 ho continuato a vedere 'chiave richiesta non disponibile' cercando di installare un driver broadcom compilato dal sorgente, nonostante preregistrassi la chiave e firmassi il driver. La disabilitazione della convalida ha funzionato.
Mark

1
Questo ha funzionato per me per VirtualBox e Ubuntu 16.04.
YtvwlD

1
Ottengo il seguente errore nel passaggio 3: "Le variabili EFI non sono supportate su questo sistema". "dmesg" non ha voci efi ("dmesg | grep efi" non ha risultati) Cos'altro posso fare? Grazie
musbach,

Puoi sostituire il percorso con $ (modinfo -n modulename)
Shane

Su Ubuntu 18.04 qui, insmod per il modulo talpa_syscallhook.ko continua dicendo "Chiave richiesta non disponibile" nonostante abbia firmato quel modulo e tutti gli altri moduli nella stessa directory per Sophos AV per ogni evenienza. La chiave è stata registrata correttamente come posso vederla quando elencherò tutte le chiavi mok. Qualche idea su come procedere?
Fran Marzoa,

6

È possibile disabilitare l'avvio protetto (UEFI) nel BIOS con i seguenti passaggi:

  1. Riavvia il tuo computer e accedi al menu BIOS (nel mio caso premendo F2)

  2. Cerca Secure Boot e passa a Legacy

In una scheda madre ASUS:

  • Vai alla Modalità avanzata (F7)
  • Vai all'opzione Avvio protetto nella sezione Avvio
  • Modifica "Modalità Windows UEFI" con "Altro sistema operativo"
  • Salva e riavvia per applicare le impostazioni (F10)

2
Secure Boot e "Legacy" sono impostazioni diverse.
Pilota 6

Ma se hai "legacy boot" abilitato invece di UEFI, ciò implica che Secure Boot non è abilitato?
Supernormal

@Supernormal, sì, questo è quello che capisco.
Sputnik,

3

È inoltre possibile disabilitare l'avvio protetto in esecuzione con shim-sign sudo update-secureboot-policy. Questa pagina wiki spiega questo metodo:

  • Apri un terminale (Ctrl + Alt + T), esegui sudo update-secureboot-policy e seleziona Sì.
  • Immettere una password temporanea compresa tra 8 e 16 cifre. (Ad esempio, 12345678, useremo questa password in seguito
  • Immettere nuovamente la stessa password per confermare.
  • Riavvia il sistema e premi un tasto qualsiasi quando viene visualizzata la schermata blu (gestione MOK
  • Seleziona Cambia stato avvio sicuro
  • Immettere la password selezionata al passaggio 2 e premere Invio.
  • Selezionare Sì per disabilitare l'avvio protetto in shim-firmato.
  • Premere il tasto Invio per completare l'intera procedura.

È ancora possibile abilitare l'avvio protetto in shim-sign nuovamente. Esegui e basta

sudo update-secureboot-policy - abilitabile e quindi seguire i passaggi precedenti

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.