https://github.com/jakeday/linux-surface/blob/master/SIGNING.md ha istruzioni più specifiche sulla firma del kernel (adattata dallo stesso tutorial collegato nella risposta accettata). Le istruzioni sono riprodotte per intero come segue:
Firma di un kernel personalizzato per Secure Boot
Le istruzioni sono per Ubuntu, ma dovrebbero funzionare in modo simile per altre distro, se usano shim e grub come bootloader. Se la distro non utilizza shim (ad es. Linux Foundation Preloader), ci dovrebbero essere passaggi simili per completare la firma (ad es. HashTool invece di MokUtil per LF Preloader) oppure è possibile installare shim da utilizzare. Si chiama il pacchetto ubuntu per shim shim-signed, ma per favore informati su come installarlo correttamente, in modo da non confondere il tuo bootloader.
Dall'ultimo aggiornamento di GRUB2 (2.02 + dfsg1-5ubuntu1) in Ubuntu, GRUB2 non carica più kernel senza segno, purché Secure Boot sia abilitato. Gli utenti di Ubuntu 18.04 riceveranno una notifica durante l'aggiornamento del pacchetto grub-efi, che questo kernel non è firmato e che l'aggiornamento si interromperà.
Quindi hai tre opzioni per risolvere questo problema:
- Firmi tu stesso il kernel.
- Usi un kernel generico e firmato della tua distribuzione.
- Si disabilita l'avvio protetto.
Poiché le opzioni due e tre non sono realmente praticabili, questi sono i passaggi per firmare il kernel da soli.
Istruzioni adattate dal blog di Ubuntu . Prima di seguire, eseguire il backup della directory / boot / EFI, in modo da poter ripristinare tutto. Seguire questi passaggi a proprio rischio.
- Crea la configurazione per creare la chiave di firma, salva come mokconfig.cnf:
# This definition stops the following lines failing if HOME isn't
# defined.
HOME = .
RANDFILE = $ENV::HOME/.rnd
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3
string_mask = utf8only
prompt = no
[ req_distinguished_name ]
countryName = <YOURcountrycode>
stateOrProvinceName = <YOURstate>
localityName = <YOURcity>
0.organizationName = <YOURorganization>
commonName = Secure Boot Signing Key
emailAddress = <YOURemail>
[ v3 ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage = codeSigning,1.3.6.1.4.1.311.10.3.6
nsComment = "OpenSSL Generated Certificate"
Regola tutte le parti con i tuoi dettagli.
- Creare la chiave pubblica e privata per firmare il kernel:
openssl req -config ./mokconfig.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
- Converti la chiave anche in formato PEM (mokutil necessita di DER, sbsign ha bisogno di PEM):
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
- Registrare la chiave per l'installazione di shim:
sudo mokutil --import MOK.der
Ti verrà chiesta una password, la userai solo per confermare la selezione della chiave nel passaggio successivo, quindi scegli una.
Riavvia il tuo sistema. Incontrerai una schermata blu di uno strumento chiamato MOKManager. Seleziona "Registra MOK" e poi "Visualizza tasto". Assicurati che sia la chiave che hai creato al passaggio 2. Successivamente, continua il processo e devi inserire la password fornita al passaggio 4. Continua con l'avvio del sistema.
Verifica che la tua chiave sia registrata tramite:
sudo mokutil --list-enrolled
- Firma il tuo kernel installato (dovrebbe essere in / boot / vmlinuz- [KERNEL-VERSION] -surface-linux-surface):
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface --output /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface.signed
- Copia l'initram del kernel unsigned, quindi abbiamo anche un initram per quello firmato.
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
- Aggiorna il tuo grub-config
sudo update-grub
- Riavvia il sistema e seleziona il kernel firmato. Se l'avvio funziona, puoi rimuovere il kernel non firmato:
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub
Ora il tuo sistema dovrebbe funzionare con un kernel firmato e l'aggiornamento di GRUB2 funziona di nuovo. Se si desidera aggiornare il kernel personalizzato, è possibile firmare facilmente la nuova versione seguendo nuovamente i passaggi precedenti dal passaggio sette in poi. Quindi BACKUP dei tasti MOK (MOK.der, MOK.pem, MOK.priv).