Acasă
» Cum să
»
Instalați și semnați module de kernel personalizate pe bootarea securizată SLES 15
Instalați și semnați module de kernel personalizate pe bootarea securizată SLES 15
Un driver terț pe SUSE Linux Enterprise Server 15 se poate compila corect, dar se poate încărca fără a afișa mesajul „Cheia necesară nu este disponibilă” sau „Cheia a fost respinsă de serviciu”. Când UEFI Secure Boot impune semnăturile modulelor, soluția constă în semnarea modulului kernel personalizat cu un certificat de încredere, înscrierea certificatului respectiv prin gestionarea Machine Owner Key (MOK) și apoi încărcarea modulului normal, fără a dezactiva Secure Boot.
Această procedură presupune un sistem SLES 15 UEFI standard care utilizează shim SUSE, un kernel-defaultkernel, acces de administrator și o sursă de încredere pentru driverul dumneavoastră. Se referă la .komodulele personalizate, nu la semnarea unui kernel de înlocuire sau la modificarea cheilor platformei firmware. Exemplele urmează modelul de administrare SLES 15 SP6/SP7; verificați diferențele dintre pachet și varianta de kernel din pachetul service pack instalat.
1. Verificați mai întâi Secure Boot și kernelul care rulează
Conectați-vă cu acces administrativ și identificați kernelul pe care l-ați bootat efectiv. Un nume de pachet potrivit nu dovedește în sine că un modul se poate încărca în acel kernel.
uname -r
mokutil --sb-state
ls -ld "/lib/modules/$(uname -r)/build"
Verificați versiunea activă a kernelului și starea Secure Boot înainte de a instala sau semna un driver.
Dacă mokutilraportează că Secure Boot este activat, o semnătură nesigură este o explicație probabilă pentru o eroare de încărcare legată de cheie. Dacă este dezactivată, investigați alte cauze înainte de a genera chei; impunerea explicită a semnăturii kernel poate fi, de asemenea, importantă. Verificați jurnalul kernelului după o încărcare eșuată pentru mesajul de respingere real.
sudo journalctl -k -b --no-pager | tail -n 50
Verificați modulul candidat înainte de a-l instala. Înlocuiți numele fișierului exemplu cu numele real; acesta vermagicar trebui să corespundă versiunii kernelului curent și proprietăților de compilare compatibile.
modinfo -F name /path/to/mydriver.ko
modinfo -F vermagic /path/to/mydriver.ko
Verificați metadatele modulului, în special vermagic, în loc să presupuneți că vreun fișier .ko se va potrivi cu SLES 15.
2. Folosește un pachet de drivere acceptat sau construiește un modul corespunzător
Mai întâi, solicitați furnizorului de hardware sau software un pachet de module Kernel (KMP) compatibil cu SLES, deja semnat. Acest lucru este preferabil instalării manuale a unui fișier binar: furnizorul poate oferi gestionarea actualizărilor kernelului și un proces documentat de înscriere a certificatelor. O semnătură a furnizorului nu este automat acceptată pe fiecare mașină Secure Boot.
Dacă trebuie să compilați driverul, instalați fișierele de dezvoltare care corespund kernelului dvs. care rulează. Pentru varianta inițială kernel-default, pachetele SLES obișnuite includ pachetul implicit de dezvoltare a kernelului, fișierele de dezvoltare a kernelului și instrumentele de compilare. Disponibilitatea și versiunile repozitoriului depind de înregistrare și de modulele SLES activate.
Instalați pachetele de dezvoltare a kernelului și instrumentele criptografice corespunzătoare înainte de a lucra cu un modul personalizat.
Dacă directorul de compilare lipsește sau pachetul de dezvoltare vizează o altă versiune de kernel, remediați mai întâi nepotrivirea pachet/kernel. Un kernel nou instalat poate necesita o repornire controlată înainte de a construi pe baza acestuia.
Din directorul sursă al driverelor de încredere, utilizați instrucțiunile de compilare ale furnizorului. Pentru modulele convenționale bazate pe kbuild, comanda de mai jos se compilează pe baza kernelului care rulează; nu descarcă și nu creează un driver singură.
cd /path/to/driver-source
make -C "/lib/modules/$(uname -r)/build" M="$PWD" modules
Folosește arborele de compilare a kernelului și directorul sursă al driverului pentru a produce un fișier .ko corespunzător.
Sari peste compilare dacă ai deja un fișier compatibil .kode la un furnizor de încredere. Nu forța niciodată încărcarea unui modul cu o semnătură greșită vermagic; o semnătură nu poate repara un fișier binar incompatibil.
3. Creați cheia de semnare și semnați modulul instalat
Generați o cheie RSA dedicată și un certificat X.509 într-un director exclusiv pentru utilizatorii rădăcină. Certificatul public va fi înscris; cheia privată trebuie să rămână protejată, deoarece oricine o controlează poate semna module suplimentare în care această mașină poate avea încredere.
Generați o pereche separată de chei pentru semnarea modulelor și păstrați cheia privată limitată la administrator.
-nodescreează o cheie privată necriptată pentru un exemplu simplu; pentru o conductă de semnare în producție, utilizați o cheie criptată protejată corespunzător sau un serviciu de semnare extern în cadrul politicii dvs. de securitate. Valabilitatea de zece ani prezentată aici este ilustrativă, nu o recomandare pentru durata de viață a certificatului organizațional.
Copiați modulul finalizat în directorul de module al kernelului în execuție. Semnați exact fișierul instalat după orice împachetare, eliminare sau alte modificări ale fișierului. Înlocuiți mydriverși calea sa cu numele de bază și locația reală a modulului.
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"
Aplicați semnătura fișierului .ko instalat și verificați câmpul pentru semnatar înainte de a-l încărca.
Dacă sign-filelipsește pe acea cale, localizați instrumentul livrat împreună cu fișierele de compilare a kernelului corespunzătoare, în loc să copiați o versiune fără legătură. Un semnatar afișat înseamnă că fișierul conține metadate de semnătură; nu dovedește că semnatarul a fost înscris. Nu ștergeți și nu modificați niciodată modulul după semnare.
4. Înregistrați certificatul public folosind MOK
Importați certificatul public formatat DER — nu MOK.priv— și setați parola de înscriere unică solicitată de mokutil. Aranjați accesul la consolă înainte de repornire; autorizarea are loc în interfața MokManager la pornire, nu într-un shell SSH.
În meniul de pornire UEFI, selectați Înregistrare MOK și confirmați înscrierea certificatului solicitat.
La următoarea pornire, alegeți Înregistrare MOK , urmați instrucțiunile de confirmare, introduceți parola de unică folosință și continuați pornirea. Aspectul meniului depinde de versiunea de firmware și shim. Revenirea la Linux fără confirmarea înregistrării lasă noul certificat nedeclarat de încredere.
După pornire, verificați dacă certificatul specific este înscris:
5. Încărcați modulul semnat și izolați erorile rămase
Actualizează metadatele dependențelor modulului și încarcă modulul după numele său, nu după calea completă a fișierului. modprobeRezolvă dependențele și respectă configurația standard a modulului.
Confirmați că modulul semnat apare în lista de module încărcate și verificați jurnalul kernelului pentru erori.
Dacă încărcarea tot eșuează, alegeți acțiunea corectivă care corespunde dovezilor:
Cheie respinsă sau cheia necesară nu este disponibilă: rulați din nou mokutil --test-key; confirmați că fișierul instalat este cel semnat și verificați dacă o actualizare a driverului l-a înlocuit.
Format de modul nevalid: comparați modinfo -F vermagiccu uname -r, reconstruiți pentru kernelul activ și verificați arhitectura procesorului.
Simbol necunoscut sau dependență lipsă: inspectați journalctl -k -b, modulele necesare ale furnizorului și ABI-ul kernelului; o altă semnătură nu va remedia simbolurile lipsă.
Pentru driverele de stocare sau de rețea critice pentru bootare, testați mai întâi pe un sistem care nu este de producție și asigurați-vă că este disponibilă o consolă de recuperare. Configurați încărcarea automată numai după ce driverul funcționează fiabil; documentele SUSE /etc/modules-load.d/pentru modulele care altfel nu se încarcă la detectarea dispozitivului.
Verificați rezultatul după o repornire
Reporniți încă o dată în fereastra de întreținere dacă încărcarea persistentă este importantă. Confirmați că Secure Boot rămâne activat, cheia publică este înscrisă, modulul este prezent și kernelul nu raportează nicio eroare nouă de verificare sau compatibilitate. Reconstruiți sau reinstalați și semnați versiunea actualizată .kodupă actualizările kernelului sau ale driverelor furnizorului.