Home
» Hoe
»
Aangepaste kernelmodules installeren en ondertekenen op SLES 15 Secure Boot
Aangepaste kernelmodules installeren en ondertekenen op SLES 15 Secure Boot
Een driver van een derde partij op SUSE Linux Enterprise Server 15 kan correct compileren, maar toch niet laden met de foutmeldingen "Vereiste sleutel niet beschikbaar" of "Sleutel werd geweigerd door de service". Wanneer UEFI Secure Boot modulehandtekeningen afdwingt, is de oplossing om de aangepaste kernelmodule te ondertekenen met een vertrouwd certificaat, dat certificaat te registreren via Machine Owner Key (MOK)-beheer en de module vervolgens normaal te laden, zonder Secure Boot uit te schakelen.
Deze procedure gaat uit van een standaard SLES 15 UEFI-systeem met SUSE-shim, een kernel-defaultkernel, beheerdersrechten en een vertrouwde bron voor uw stuurprogramma. Het behandelt aangepaste .komodules, niet het ondertekenen van een vervangende kernel of het wijzigen van firmwareplatformsleutels. De voorbeelden volgen het SLES 15 SP6/SP7-beheermodel; controleer de verschillen in pakket en kernelvariant in uw geïnstalleerde servicepack.
1. Controleer eerst Secure Boot en de actieve kernel.
Log in met beheerdersrechten en identificeer de kernel die u daadwerkelijk hebt opgestart. Een overeenkomende pakketnaam alleen bewijst niet dat een module in die kernel kan worden geladen.
uname -r
mokutil --sb-state
ls -ld "/lib/modules/$(uname -r)/build"
Controleer de actieve kernelversie en de Secure Boot-status voordat u een driver installeert of ondertekent.
Als mokutilSecure Boot is ingeschakeld, is een onbetrouwbare handtekening een waarschijnlijke oorzaak van een mislukte sleutelaanmaak. Als Secure Boot is uitgeschakeld, onderzoek dan andere oorzaken voordat u sleutels genereert; expliciete handhaving van de kernelhandtekening kan ook van belang zijn. Controleer na een mislukte laadpoging het kernellogboek op het daadwerkelijke afwijzingsbericht.
sudo journalctl -k -b --no-pager | tail -n 50
Controleer de kandidaatmodule voordat u deze installeert. Vervang de voorbeeld-bestandsnaam door de daadwerkelijke bestandsnaam; deze vermagicmoet overeenkomen met de actieve kernelversie en de compatibele build-eigenschappen.
modinfo -F name /path/to/mydriver.ko
modinfo -F vermagic /path/to/mydriver.ko
Bekijk de modulemetadata, met name die van Vermagic, in plaats van ervan uit te gaan dat elk .ko-bestand compatibel is met SLES 15.
2. Gebruik een ondersteund stuurprogrammapakket of bouw een bijbehorende module.
Vraag eerst de hardware- of softwareleverancier om een SLES-compatibel, reeds ondertekend Kernel Module Package (KMP). Dit is te verkiezen boven het handmatig installeren van een binair bestand: de leverancier biedt mogelijk ondersteuning voor kernelupdates en een gedocumenteerd certificaatregistratieproces. Een leveranciershandtekening wordt niet automatisch vertrouwd op elke Secure Boot-machine.
Als u het stuurprogramma moet compileren, installeer dan de ontwikkelbestanden die overeenkomen met uw actieve kernel. Voor deze kernel-defaultvariant omvatten de gebruikelijke SLES-pakketten het standaard kernel-ontwikkelpakket, kernel-ontwikkelbestanden en compilatietools. De beschikbaarheid en versies van de repository zijn afhankelijk van de registratie en de ingeschakelde SLES-modules.
Installeer de bijbehorende kernelontwikkelingspakketten en cryptografische tools voordat u met een aangepaste module gaat werken.
Als de buildmap ontbreekt of als het ontwikkelingspakket een andere kernelversie gebruikt, los dan eerst de discrepantie tussen pakket en kernel op. Een nieuw geïnstalleerde kernel vereist mogelijk een gecontroleerde herstart voordat er een build mee kan worden uitgevoerd.
Gebruik de installatie-instructies van de leverancier vanuit de vertrouwde driverbronmap. Voor conventionele kbuild-gebaseerde modules compileert de onderstaande opdracht tegen de actieve kernel; er wordt zelf geen driver gedownload of aangemaakt.
cd /path/to/driver-source
make -C "/lib/modules/$(uname -r)/build" M="$PWD" modules
Gebruik de kernel-buildstructuur en de broncodemap van het stuurprogramma om een overeenkomend .ko-bestand te genereren.
Sla de compilatie over als je al een compatibel bestand .kovan een vertrouwde leverancier hebt. Forceer nooit het laden van een module met een onjuist bestand vermagic; een digitale handtekening kan een incompatibel binair bestand niet herstellen.
3. Maak de ondertekeningssleutel aan en onderteken de geïnstalleerde module.
Genereer een speciale RSA-sleutel en een X.509-certificaat in een map die alleen toegankelijk is voor rootgebruikers. Het openbare certificaat wordt geregistreerd; de privésleutel moet beschermd blijven, omdat degene die deze beheert, extra modules kan ondertekenen die deze machine mogelijk vertrouwt.
Genereer een apart sleutelpaar voor moduleondertekening en houd de privésleutel beperkt tot de beheerder.
-nodesEr wordt een niet-versleutelde privésleutel gegenereerd als eenvoudig voorbeeld; voor een productieomgeving waarin digitale handtekeningen worden ondertekend, gebruikt u een adequaat beveiligde, versleutelde sleutel of een externe ondertekeningsservice conform uw beveiligingsbeleid. De hier getoonde geldigheidsduur van tien jaar is slechts een voorbeeld en geen aanbeveling voor de levensduur van certificaten binnen uw organisatie.
Kopieer de voltooide module naar de moduledirectory van de actieve kernel. Onderteken het geïnstalleerde bestand na eventuele verpakking, verwijdering van beveiligingscode of andere bestandsaanpassingen. Vervang de bestandsnaam mydriveren het pad door de daadwerkelijke basisnaam en locatie van de module.
install -D -m 0644 /path/to/mydriver.ko \
"/lib/modules/$(uname -r)/extra/mydriver.ko"
SIGN_FILE="$(readlink -f /lib/modules/$(uname -r)/build)/scripts/sign-file"
test -x "$SIGN_FILE" || echo "Locate the sign-file binary for this kernel"
"$SIGN_FILE" sha256 /root/module-signing/MOK.priv \
/root/module-signing/MOK.der \
"/lib/modules/$(uname -r)/extra/mydriver.ko"
modinfo -F signer "/lib/modules/$(uname -r)/extra/mydriver.ko"
Voeg de handtekening toe aan het geïnstalleerde .ko-bestand en controleer het veld 'signer' voordat u het laadt.
Als sign-filehet bestand niet op dat pad aanwezig is, zoek dan de tool die bij uw kernelbuildbestanden is meegeleverd in plaats van een niet-gerelateerde versie te kopiëren. Een weergegeven ondertekenaar betekent dat het bestand handtekeningmetadata bevat; het bewijst niet dat de ondertekenaar is geregistreerd. Verwijder of wijzig de module nooit na ondertekening.
4. Registreer het openbare certificaat via MOK
Importeer het openbare certificaat in DER-formaat (niet het standaardcertificaat) MOK.priven stel het eenmalige inschrijfwachtwoord in dat door wordt gevraagd mokutil. Regel consoletoegang vóór het opnieuw opstarten; de autorisatie vindt plaats in de MokManager-interface tijdens het opstarten, niet in een SSH-shell.
Selecteer in het UEFI-opstartmenu 'MOK inschrijven' en bevestig de gevraagde certificaatinschrijving.
Kies bij de volgende opstart 'MOK registreren' , volg de bevestigingsinstructies, voer het eenmalige wachtwoord in en ga verder met opstarten. Het menu dat verschijnt, is afhankelijk van de firmware- en shim-versie. Als u terugkeert naar Linux zonder de registratie te bevestigen, wordt het nieuwe certificaat niet vertrouwd.
Controleer na het opstarten of het betreffende certificaat is geregistreerd:
5. Laad de ondertekende module en isoleer de resterende fouten.
Update de metadata van moduleafhankelijkheden en laad de module op basis van de naam, niet op basis van het volledige bestandspad. modprobeLost afhankelijkheden op en respecteert de standaard moduleconfiguratie.
Controleer of de ondertekende module in de lijst met geladen modules voorkomt en inspecteer het kernel-logboek op fouten.
Als het laden nog steeds mislukt, kies dan de corrigerende actie die overeenkomt met de bevindingen:
Sleutel geweigerd of vereiste sleutel niet beschikbaar: voer opnieuw uit mokutil --test-key; controleer of het geïnstalleerde bestand het ondertekende bestand is en controleer of een stuurprogramma-update het heeft vervangen.
Ongeldig moduleformaat: vergelijk modinfo -F vermagicmet uname -r, compileer opnieuw voor de actieve kernel en controleer de CPU-architectuur.
Onbekend symbool of ontbrekende afhankelijkheid: inspecteer journalctl -k -bde vereiste modules van de leverancier en de kernel-ABI; een andere handtekening zal ontbrekende symbolen niet verhelpen.
Test opstartkritieke opslag- of netwerkstuurprogramma's eerst op een niet-productiesysteem en zorg ervoor dat er een herstelconsole beschikbaar is. Configureer automatisch laden pas nadat het stuurprogramma betrouwbaar werkt; raadpleeg de SUSE-documentatie /etc/modules-load.d/voor modules die anders niet automatisch laden bij apparaatdetectie.
Controleer het resultaat na een herstart.
Start de computer nogmaals opnieuw op tijdens het onderhoudsvenster als aanhoudend laden belangrijk is. Controleer of Secure Boot ingeschakeld blijft, de publieke sleutel is geregistreerd, de module aanwezig is en de kernel geen nieuwe verificatie- of compatibiliteitsfouten meldt. Compileer of installeer de bijgewerkte versie opnieuw en onderteken deze .kona upgrades van de kernel of leveranciersstuurprogramma's.