https://github.com/jakeday/linux-surface/blob/master/SIGNING.md enthält spezifischere Anweisungen zum Signieren des Kernels (angepasst an dasselbe Tutorial, das in der akzeptierten Antwort verlinkt ist). Die Anweisungen werden wie folgt vollständig wiedergegeben:
Signieren eines benutzerdefinierten Kernels für Secure Boot
Die Anweisungen gelten für Ubuntu, sollten jedoch für andere Distributionen ähnlich funktionieren, wenn Shim und Grub als Bootloader verwendet werden. Wenn Ihre Distribution kein Shim verwendet (z. B. Linux Foundation Preloader), sollten ähnliche Schritte ausgeführt werden, um die Signatur abzuschließen (z. B. HashTool anstelle von MokUtil für LF Preloader), oder Sie können Shim installieren, um es stattdessen zu verwenden. Das Ubuntu-Paket für Shim heißt. shim-signed
Bitte informieren Sie sich jedoch über die korrekte Installation, damit Sie Ihren Bootloader nicht durcheinander bringen.
Seit dem letzten GRUB2-Update (2.02 + dfsg1-5ubuntu1) in Ubuntu lädt GRUB2 keine nicht signierten Kernel mehr, solange Secure Boot aktiviert ist. Benutzer von Ubuntu 18.04 werden während des Upgrades des grub-efi-Pakets darüber informiert, dass dieser Kernel nicht signiert ist und das Upgrade abgebrochen wird.
Sie haben also drei Möglichkeiten, um dieses Problem zu lösen:
- Sie signieren den Kernel selbst.
- Sie verwenden einen signierten, generischen Kernel Ihrer Distribution.
- Sie deaktivieren den sicheren Start.
Da Option zwei und drei nicht wirklich realisierbar sind, sind dies die Schritte, um den Kernel selbst zu signieren.
Anleitung aus dem Ubuntu Blog angepasst . Bevor Sie folgen, sichern Sie bitte Ihr Verzeichnis / boot / EFI, damit Sie alles wiederherstellen können. Befolgen Sie diese Schritte auf eigenes Risiko.
- Erstellen Sie die Konfiguration, um den Signaturschlüssel zu erstellen, und speichern Sie sie als 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"
Passen Sie alle Teile mit Ihren Angaben an.
- Erstellen Sie den öffentlichen und privaten Schlüssel zum Signieren des Kernels:
openssl req -config ./mokconfig.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
- Konvertieren Sie den Schlüssel auch in das PEM-Format (mokutil benötigt DER, sbsign benötigt PEM):
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
- Registrieren Sie den Schlüssel für Ihre Shim-Installation:
sudo mokutil --import MOK.der
Sie werden nach einem Passwort gefragt. Sie werden es nur verwenden, um Ihre Schlüsselauswahl im nächsten Schritt zu bestätigen. Wählen Sie also eines aus.
Starten Sie Ihr System neu. Sie sehen einen blauen Bildschirm eines Tools namens MOKManager. Wählen Sie "MOK einschreiben" und dann "Ansichtstaste". Stellen Sie sicher, dass es sich um Ihren Schlüssel handelt, den Sie in Schritt 2 erstellt haben. Fahren Sie anschließend mit dem Vorgang fort und geben Sie das in Schritt 4 angegebene Kennwort ein. Fahren Sie mit dem Booten Ihres Systems fort.
Stellen Sie sicher, dass Ihr Schlüssel registriert ist über:
sudo mokutil --list-enrolled
- Signieren Sie Ihren installierten Kernel (er sollte sich unter / boot / vmlinuz- [KERNEL-VERSION] -surface-linux-surface befinden):
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface --output /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface.signed
- Kopieren Sie das Initram des nicht signierten Kernels, damit wir auch ein Initram für das signierte haben.
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
- Aktualisieren Sie Ihre Grub-Konfiguration
sudo update-grub
- Starten Sie Ihr System neu und wählen Sie den signierten Kernel aus. Wenn das Booten funktioniert, können Sie den nicht signierten Kernel entfernen:
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub
Jetzt sollte Ihr System unter einem signierten Kernel laufen und das Upgrade von GRUB2 funktioniert wieder. Wenn Sie den benutzerdefinierten Kernel aktualisieren möchten, können Sie die neue Version einfach signieren, indem Sie die obigen Schritte ab Schritt 7 erneut ausführen. Sichern Sie also die MOK-Tasten (MOK.der, MOK.pem, MOK.priv).