Warum wird bei der Installation von Kernelmodulen von Drittanbietern oder nach einem Kernel-Upgrade die Meldung "Erforderlicher Schlüssel nicht verfügbar" angezeigt?

79

Dieses Problem tritt nur auf UEFI-Systemen mit aktiviertem Secure Boot auf.

Wenn ich versuche, DKMS-Module wie VirtualBox-, Nvidia- oder Broadcom-Treiber zu installieren, werden diese nicht installiert, und ich erhalte sie, Required key not availablewenn ich sie versuche modprobe.

VirtualBox beschwert sich, dass vboxdrvnicht geladen ist.

Der Broadcom- wlTreiber wird lspci -kals Kernelmodul angezeigt, aber nicht verwendet. sudo modprobe wlwirft Required key not available.

Dieses Problem kann auch auftreten, wenn ich einige Kernelmodule aus Git-Quellen installiere.

Dieses Problem kann nach einem Kernel-Update als deaktivierter WLAN-Adapter, schwarzer Bildschirm nach einem Neustart usw. auftreten.

Wie kann ich es reparieren?

Pilot6
quelle
Ähnlich: askubuntu.com/questions/760671/…
Tor Klingberg

Antworten:

85

Seit Ubuntu-Kernel 4.4.0-20 ist die EFI_SECURE_BOOT_SIG_ENFORCEKernel-Konfiguration aktiviert. Dadurch wird verhindert, dass nicht signierte Module von Drittanbietern geladen werden, wenn UEFI Secure Boot aktiviert ist.

Die einfachste Möglichkeit, dieses Problem zu beheben, besteht darin , den sicheren Start in den UEFI-Einstellungen (BIOS) zu deaktivieren .

In den meisten Fällen können Sie die UEFI-Einstellungen über das Grub-Menü aufrufen. Drücken Sie ESCTaste zum Booten, erhalten in Grub - Menü und wählen System - Setup. Die Option "Sicherer Start" sollte sich im Abschnitt "Sicherheit" oder "Start" der UEFI befinden.

Sie können direkt in UEFI einsteigen, dies hängt jedoch von Ihrer Hardware ab. Lesen Sie in Ihrem Computerhandbuch nach, wie Sie dorthin gelangen. Es kann sein Del, oder F2beim Booten oder etwas anderes.

Eine alternative Möglichkeit besteht darin, Secure Boot mit zu deaktivieren mokutil.

Seit Ubuntu-Kernel-Build 4.4.0-21.37 kann dies durch Ausführen behoben werden

sudo apt install mokutil
sudo mokutil --disable-validation

Es muss ein Passwort erstellt werden. Das Passwort sollte mindestens 8 Zeichen lang sein. Nach dem Neustart werden Sie von UEFI gefragt, ob Sie die Sicherheitseinstellungen ändern möchten. Wählen Sie "Ja".

Anschließend werden Sie aufgefordert, das zuvor erstellte Passwort einzugeben. Bei einigen UEFI-Firmware-Versionen wird nicht das vollständige Kennwort abgefragt, sondern die Eingabe einiger Zeichen, z. B. 1., 3. usw. Seien Sie vorsichtig. Einige Leute verstehen das nicht. Ich habe es auch nicht vom ersten Versuch bekommen ;-)

Update: Jetzt ist diese Kernelkonfiguration in allen unterstützten Ubuntu-Kerneln aktiviert. Betroffen sind Ubuntu 16.04, 15.10 und 14.04.

Pilot6
quelle
Das funktioniert bei mir nicht. @Sputnik Antwort tut. Trotzdem würde ich gerne wissen, warum mokutil mich nach einem Passwort fragt und wann ich es brauche.
Alwin Kesler
8
@AlwinKesler Es wird nach einem Kennwort gefragt, das nach dem Neustart überprüft wird, bevor die Änderungen an der MOK-Datenbank tatsächlich durchgeführt werden. Ohne dies könnte ein Rogue-Prozess die Schlüssel in der MOK-Datenbank ändern, die nach dem nächsten Neustart wirksam werden. Außerdem 'weiß' die Plattform jetzt, dass die Person, die die Änderung anfordert, dieselbe Person ist, die nach dem Neustart physisch anwesend ist, und hat daher Hardwaresicherheitsmaßnahmen bestanden, z .
zwets
@Pilot6: Ich bin immer noch auf Ubuntu 14.04 LTS wegen einiger technischer Probleme. Vielen Dank für die Aktualisierung der Antwort.
Ravi Joshi
3
Arbeitete für mich auf Ubuntu 18.04. Konnte für mein ganzes Leben nicht herausfinden, warum die Installation von nvidia-Treibern auf keinen Fall funktionierte oder sogar auf den 16.04 zurückgesetzt wurde. Gah! Das hat es behoben. So viel Zeit verschwendet.
Nate
1
Mein Ubuntu-System war wirklich träge. Das ergab keinen Sinn, da es sich um einen brandneuen Laptop handelte. Jetzt merke ich, dass die CPU alles tat und meine Grafikkarte die ganze Zeit im Leerlauf war. Dieser Link hat auch geholfen - linuxbabe.com/ubuntu/install-nvidia-driver-ubuntu-18-04
Peter Drinnan
32

Wie von Benutzer @zwets vorgeschlagen, kopiere ich (mit Änderungen) eine Antwort hier:

Seit der Kernel-Version 4.4.0-20 wurde durchgesetzt, dass nicht signierte Kernel-Module bei aktiviertem Secure Boot nicht ausgeführt werden dürfen. Wenn Sie Secure Boot beibehalten und diese Module auch ausführen möchten, müssen Sie diese Module als nächsten logischen Schritt signieren .

Also lass es uns versuchen.

  1. Erstellen Sie Signaturschlüssel

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

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

Hinweis 1 : Es können mehrere Dateien für einen einzelnen Treiber / ein einzelnes Modul signiert werden. /path/to/moduleMöglicherweise müssen diese durch ersetzt werden $(modinfo -n <modulename>), z$(modinfo -n vboxdrv)

Anmerkung 2 : sudo kmodsign sha512 ./MOK.priv ./MOK.der /path/to/moduleIst eine Alternative, wenn sign-filenicht verfügbar.

  1. Registrieren Sie die Schlüssel für Secure Boot

    sudo mokutil --import MOK.der
    

    Geben Sie ein Kennwort für die spätere Verwendung nach dem Neustart ein

  2. Rebootund befolgen Sie die Anweisungen zum Registrieren von MOK (Maschinenbesitzerschlüssel). Hier ist ein Beispiel mit Bildern. Das System wird noch einmal neu gestartet.

Wenn der Schlüssel ordnungsgemäß registriert wurde, wird er unter angezeigt sudo mokutil --list-enrolled.

Bitte lassen Sie mich wissen, ob Ihre Module auf Ubuntu 16.04 so laufen würden (auf Kernel 4.4.0-21, glaube ich).

Ressourcen: Ausführlicher Website- Artikel zur Implementierung der Modulsignatur in Fedora und Ubuntu . (Sie haben daran gearbeitet) ;-)

Zusätzliche Ressource: Ich habe bei jedem virtualbox-dkmsUpgrade ein Bash-Skript für meinen eigenen Gebrauch erstellt und überschreibe damit die signierten Module. Schauen Sie sich meine vboxsignursprünglich auf GitHub .

Zusätzlicher Hinweis für das (extra-) Sicherheitsbewusste: ;-)

Da der von Ihnen erstellte private Schlüssel ( MOK.privin diesem Beispiel) von jedem verwendet werden kann, der Zugriff darauf hat, empfiehlt es sich, ihn sicher aufzubewahren. Sie können chmodes verschlüsseln ( gpg) oder an einem anderen sicheren Ort aufbewahren (r). Oder entfernen Sie , wie in diesem Kommentar erwähnt , die Option -nodesin Schritt 1. Dadurch wird der Schlüssel mit einer Passphrase verschlüsselt.

Majal
quelle
Unter Ubuntu 14.10 wurde weiterhin die Meldung "Erforderlicher Schlüssel nicht verfügbar" angezeigt , dass versucht wurde, einen Broadcom-Treiber zu installieren , der aus dem Quellcode kompiliert wurde, obwohl der Schlüssel vorregistriert und der Treiber signiert wurde. Deaktivierung der Validierung funktioniert.
Mark
1
Das hat bei mir für VirtualBox und Ubuntu 16.04 geklappt.
YtvwlD
1
In Schritt 3 wird folgende Fehlermeldung angezeigt: "EFI-Variablen werden auf diesem System nicht unterstützt". "dmesg" hat keine efi-Einträge ("dmesg | grep efi" hat keine Ergebnisse) Was kann ich noch tun? Danke
musbach
Sie können den Pfad durch $ (modinfo -n modulename) ersetzen
Shane
Unter Ubuntu 18.04 hier sagt das Modul insmod for talpa_syscallhook.ko weiterhin "Erforderlicher Schlüssel nicht verfügbar", obwohl ich dieses Modul und alle anderen Module im selben Verzeichnis für Sophos AV signiert habe, nur für den Fall. Der Schlüssel wurde erfolgreich registriert, da ich ihn sehen kann, wenn ich alle Mok-Schlüssel aufführe. Irgendwelche Ideen, wie es weitergehen soll?
Fran Marzoa
6

Sie können Secure Boot (UEFI) im BIOS mit den folgenden Schritten deaktivieren:

  1. Starten Sie Ihren Computer neu und rufen Sie das BIOS-Menü auf (in meinem Fall drücken Sie F2)

  2. Suchen Sie nach Secure Boot und wechseln Sie zu Legacy

Auf einem ASUS-Motherboard:

  • Wechseln Sie in den erweiterten Modus (F7)
  • Gehen Sie in der Secure Boot-Option im Abschnitt Boot
  • Ändern Sie "Windows UEFI-Modus" mit "Anderes Betriebssystem"
  • Speichern und neu starten, um die Einstellungen zu übernehmen (F10)
Sputnik
quelle
2
Secure Boot und "Legacy" sind unterschiedliche Einstellungen.
Pilot6
Wenn Sie jedoch "Legacy Boot" anstelle von UEFI aktiviert haben, bedeutet dies, dass Secure Boot nicht aktiviert ist?
Supernormal
@Supernormal, ja, das verstehe ich.
Sputnik
3

Sie können Secure Boot auch im Shim-signierten Modus deaktivieren sudo update-secureboot-policy. Diese Wiki-Seite erklärt diese Methode:

  • Öffnen Sie ein Terminal (Strg + Alt + T), führen Sie sudo update-secureboot-policy aus und wählen Sie dann Ja aus.
  • Geben Sie ein temporäres Passwort mit 8 bis 16 Stellen ein. (Zum Beispiel 12345678, wir werden dieses Passwort später verwenden
  • Geben Sie dasselbe Passwort zur Bestätigung erneut ein.
  • Starten Sie das System neu und drücken Sie eine beliebige Taste, wenn der blaue Bildschirm angezeigt wird (MOK - Verwaltung)
  • Wählen Sie Change Secure Boot state
  • Geben Sie das in Schritt 2 ausgewählte Passwort ein und drücken Sie die Eingabetaste.
  • Wählen Sie Ja, um Secure Boot in Shim-Signed zu deaktivieren.
  • Drücken Sie die Eingabetaste, um den gesamten Vorgang abzuschließen.

Sie können Secure Boot immer noch in Shim-Signed wieder aktivieren. Einfach ausführen

sudo update-secureboot-policy --aktiviere und folge den obigen Schritten

Kent Lin
quelle