Instalacja i podpisywanie niestandardowych modułów jądra w bezpiecznym rozruchu SLES 15

Sterownik innej firmy w systemie SUSE Linux Enterprise Server 15 może kompilować się poprawnie, ale nie uruchamiać się z komunikatem „Wymagany klucz niedostępny” lub „Klucz został odrzucony przez usługę”. Gdy UEFI Secure Boot wymusza podpisy modułów, rozwiązaniem jest podpisanie niestandardowego modułu jądra zaufanym certyfikatem, zarejestrowanie tego certyfikatu za pomocą zarządzania kluczami właściciela maszyny (MOK), a następnie normalne załadowanie modułu — bez wyłączania Secure Boot.

Ta procedura zakłada standardowy system SLES 15 UEFI z nakładką SUSE shim, kernel-defaultjądrem, dostępem administratora i zaufanym źródłem sterownika. Dotyczy ona .komodułów niestandardowych, a nie podpisywania jądra zastępczego ani zmiany kluczy platformy oprogramowania sprzętowego. Przykłady są zgodne z modelem administracyjnym SLES 15 SP6/SP7; sprawdź różnice między pakietami i wersjami jądra w zainstalowanym pakiecie Service Pack.

1. Najpierw sprawdź Bezpieczny rozruch i działające jądro

Zaloguj się z uprawnieniami administracyjnymi i zidentyfikuj jądro, które faktycznie uruchomiłeś. Sama nazwa pakietu nie dowodzi, że moduł można załadować do tego jądra.

uname -r
mokutil --sb-state
ls -ld "/lib/modules/$(uname -r)/build"
Terminal pokazujący uname -r, status bezpiecznego rozruchu mokutil i sprawdzenie katalogu kompilacji jądra
Przed zainstalowaniem lub podpisaniem sterownika sprawdź aktywną wersję jądra i status Secure Boot.

Jeśli mokutilraporty wskazują włączoną funkcję Bezpieczny rozruch, prawdopodobnym wytłumaczeniem niepowodzenia ładowania związanego z kluczem jest niezaufany podpis. Jeśli jest wyłączona, przed wygenerowaniem kluczy należy zbadać inne przyczyny; jawne wymuszanie podpisu jądra również może mieć znaczenie. Po nieudanym ładowaniu sprawdź dziennik jądra pod kątem faktycznego komunikatu o odrzuceniu.

sudo journalctl -k -b --no-pager | tail -n 50

Sprawdź moduł kandydujący przed jego instalacją. Zastąp przykład prawdziwą nazwą pliku; vermagicpowinna być zgodna z bieżącą wersją jądra i kompatybilnymi właściwościami kompilacji.

modinfo -F name /path/to/mydriver.ko
modinfo -F vermagic /path/to/mydriver.ko
Terminal wyświetlający przykładową listę modinfo dla zewnętrznego sterownika jądra i ścieżki narzędzia do podpisywania jądra
Przejrzyj metadane modułów, zwłaszcza vermagic, zamiast zakładać, że każdy plik .ko będzie pasował do SLES 15.

2. Użyj obsługiwanego pakietu sterowników lub zbuduj odpowiedni moduł

Najpierw poproś dostawcę sprzętu lub oprogramowania o zgodny z SLES, podpisany pakiet modułu jądra (KMP). Jest to lepsze rozwiązanie niż ręczna instalacja pliku binarnego: dostawca może zapewnić obsługę aktualizacji jądra i udokumentowany proces rejestracji certyfikatu. Podpis dostawcy nie jest automatycznie zaufany na każdym komputerze z systemem Secure Boot.

Jeśli musisz skompilować sterownik, zainstaluj pliki programistyczne odpowiadające działającemu kernelowi. kernel-defaultStandardowe pakiety SLES dla tej wersji zawierają domyślny pakiet programistyczny kernela, pliki programistyczne kernela oraz narzędzia do kompilacji. Dostępność i wersje repozytoriów zależą od rejestracji i włączonych modułów SLES.

sudo zypper install gcc make openssl mokutil kernel-devel kernel-default-devel
rpm -q kernel-default-devel kernel-devel
readlink -f "/lib/modules/$(uname -r)/build"
Terminal w stylu SLES wyświetlający instalację Zyppera jądra i wymagania wstępne dotyczące jego rozwoju i podpisywania
Przed rozpoczęciem pracy z modułem niestandardowym zainstaluj odpowiednie pakiety programistyczne jądra i narzędzia kryptograficzne.

Jeśli brakuje katalogu kompilacji lub pakiet deweloperski jest przeznaczony dla innej wersji jądra, najpierw należy naprawić niezgodność między pakietem a jądrem. Nowo zainstalowane jądro może wymagać kontrolowanego ponownego uruchomienia przed kompilacją.

Z zaufanego katalogu źródłowego sterownika należy skorzystać z instrukcji kompilacji dostawcy. W przypadku konwencjonalnych modułów opartych na kbuild, poniższe polecenie kompiluje się z działającym jądrem; nie pobiera ani nie tworzy sterownika samodzielnie.

cd /path/to/driver-source
make -C "/lib/modules/$(uname -r)/build" M="$PWD" modules
Terminal pokazujący polecenie kbuild make kompilujące zewnętrzny moduł jądra dla działającego jądra SLES
Użyj drzewa kompilacji jądra i katalogu źródłowego sterownika, aby utworzyć pasujący plik .ko.

Pomiń kompilację, jeśli masz już kompatybilny plik .kood zaufanego dostawcy. Nigdy nie ładuj na siłę modułu z nieprawidłową wersją vermagic; podpis nie naprawi niezgodnego pliku binarnego.

3. Utwórz klucz podpisu i podpisz zainstalowany moduł

Wygeneruj dedykowany klucz RSA i certyfikat X.509 w katalogu głównym. Certyfikat publiczny zostanie zarejestrowany; klucz prywatny musi pozostać chroniony, ponieważ ktokolwiek go kontroluje, może podpisywać dodatkowe moduły, którym ten komputer może zaufać.

sudo -i
umask 077
mkdir -p /root/module-signing
cd /root/module-signing
openssl req -new -x509 -newkey rsa:3072 -sha256 -days 3650 -nodes \
  -subj "/CN=SLES Custom Module Signing/" \
  -keyout MOK.priv -out MOK.pem
openssl x509 -in MOK.pem -outform DER -out MOK.der
chmod 600 MOK.priv
Terminal pokazujący polecenie OpenSSL tworzące lokalny klucz prywatny RSA i certyfikat podpisywania modułu X.509
Wygeneruj osobną parę kluczy podpisujących moduł i zachowaj klucz prywatny, który będzie dostępny tylko dla administratora.

-nodesTworzy niezaszyfrowany klucz prywatny. Dla przykładu: w produkcyjnym procesie podpisywania użyj odpowiednio zabezpieczonego zaszyfrowanego klucza lub zewnętrznej usługi podpisywania, zgodnie z polityką bezpieczeństwa. Podany tutaj dziesięcioletni okres ważności ma charakter poglądowy i nie jest rekomendacją dożywotniego okresu ważności certyfikatu w organizacji.

Skopiuj gotowy moduł do katalogu modułów działającego jądra. Podpisz dokładnie zainstalowany plik po każdym spakowaniu, usunięciu lub innych modyfikacjach plików. Zastąp go mydriveri jego ścieżkę rzeczywistą nazwą bazową i lokalizacją modułu.

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"
Terminal pokazujący przykładowe wywołanie pliku podpisu i inspekcję sygnatariusza modinfo dla modułu jądra
Zastosuj podpis do zainstalowanego pliku .ko i sprawdź jego pole podpisującego przed załadowaniem.

Jeśli sign-filew tej ścieżce go nie ma, znajdź narzędzie dostarczone z plikami kompilacji jądra, zamiast kopiować niepowiązaną wersję. Wyświetlony sygnatariusz oznacza, że ​​plik zawiera metadane podpisu; nie dowodzi to jednak, że sygnatariusz został zarejestrowany. Nigdy nie usuwaj ani nie modyfikuj modułu po podpisaniu.

4. Zarejestruj certyfikat publiczny za pomocą MOK

Zaimportuj certyfikat publiczny w formacie DER — nie MOK.priv— i ustaw jednorazowe hasło rejestracyjne wymagane przez mokutil. Zapewnij dostęp do konsoli przed ponownym uruchomieniem; autoryzacja odbywa się w interfejsie MokManager podczas rozruchu, a nie w powłoce SSH.

mokutil --import /root/module-signing/MOK.der
mokutil --list-new
reboot
Niebieskie menu rozruchowe w stylu MokManager z wyróżnioną opcją Enroll MOK nad innymi opcjami klucza właściciela maszyny
W menu startowym UEFI wybierz opcję Enroll MOK (Zarejestruj MOK) i potwierdź żądaną rejestrację certyfikatu.

Podczas następnego uruchomienia wybierz opcję „Enroll MOK” , postępuj zgodnie z monitami potwierdzającymi, wprowadź hasło jednorazowe i kontynuuj uruchamianie. Wygląd menu zależy od wersji oprogramowania sprzętowego i podkładki. Powrót do systemu Linux bez potwierdzenia rejestracji spowoduje, że nowy certyfikat nie będzie uznawany za zaufany.

Po uruchomieniu sprawdź, czy konkretny certyfikat jest zarejestrowany:

sudo mokutil --test-key /root/module-signing/MOK.der
sudo mokutil --list-enrolled

5. Załaduj podpisany moduł i wyizoluj pozostałe błędy

Aktualizuje metadane zależności modułu i ładuje moduł według jego nazwy, a nie pełnej ścieżki dostępu. modprobeRozwiązuje zależności i respektuje standardową konfigurację modułu.

sudo depmod -a
sudo modprobe mydriver
lsmod | grep -w mydriver
modinfo -F signer mydriver
Terminal wyświetlający polecenia modprobe, lsmod i kernel-log służące do sprawdzania podpisanego modułu
Sprawdź, czy podpisany moduł znajduje się na liście załadowanych modułów i sprawdź dziennik jądra pod kątem błędów.

Jeśli ładowanie nadal się nie powiedzie, wybierz działanie naprawcze odpowiadające dowodom:

  • Klucz odrzucony lub wymagany klucz niedostępny: uruchom ponownie mokutil --test-key; sprawdź, czy zainstalowany plik jest tym podpisanym i sprawdź, czy aktualizacja sterownika go zastąpiła.
  • Nieprawidłowy format modułu: porównaj modinfo -F vermagicz uname -r, przebuduj dla aktywnego jądra i sprawdź architekturę procesora.
  • Nieznany symbol lub brakująca zależność: sprawdź journalctl -k -bwymagane moduły dostawcy i ABI jądra; inny podpis nie naprawi brakujących symboli.

W przypadku sterowników pamięci masowej lub sieciowych krytycznych dla rozruchu, należy najpierw przetestować je na systemie nieprodukcyjnym i upewnić się, że konsola odzyskiwania jest dostępna. Automatyczne ładowanie należy skonfigurować dopiero po uruchomieniu sterownika; dokumenty SUSE /etc/modules-load.d/dotyczą modułów, które w innym przypadku nie ładują się po wykryciu urządzenia.

Sprawdź wynik po ponownym uruchomieniu

Uruchom ponownie w oknie konserwacji, jeśli ciągłe ładowanie ma znaczenie. Upewnij się, że funkcja bezpiecznego rozruchu jest włączona, klucz publiczny jest zarejestrowany, moduł jest obecny i jądro nie zgłasza żadnych nowych błędów weryfikacji ani zgodności. Przebuduj lub przeinstaluj i podpisz zaktualizowane jądro .kopo aktualizacji jądra lub sterowników dostawcy.

mokutil --sb-state
sudo mokutil --test-key /root/module-signing/MOK.der
modinfo -F signer mydriver
lsmod | grep -w mydriver
sudo journalctl -k -b --no-pager | tail -n 30

Dokumentacja podstawowa: SUSE SLES 15 SP6: UEFI i klucze właściciela komputera ; SUSE: Zarządzanie modułami jądra ; Jądro Linux: Funkcja podpisywania modułów ; Jądro Linux: Budowanie modułów zewnętrznych . Podręcznik administratora SLES 15 SP6 został zaktualizowany 17 września 2026 r.; zachowanie poleceń dla instalatorów sterowników innych firm i wersji jądra innych niż domyślne musi zostać potwierdzone przez ich opiekunów.

Zostaw komentarz

Zautomatyzuj spójne kopie zapasowe Nextcloud za pomocą Restic i Cron

Zautomatyzuj spójne kopie zapasowe Nextcloud za pomocą Restic i Cron

Twórz kopie zapasowe plików Nextcloud i MariaDB, planuj zaszyfrowane migawki Restic za pomocą cron i weryfikuj odzyskiwanie bez narażania serwera na ryzyko.

Tworzenie kopii zapasowej i przywracanie skrzynki pocztowej Zimbra CE za pomocą eksportów TGZ

Tworzenie kopii zapasowej i przywracanie skrzynki pocztowej Zimbra CE za pomocą eksportów TGZ

Eksportuj pojedynczą skrzynkę pocztową Zimbra Community Edition, sprawdzaj poprawność kopii zapasowej TGZ i przywracaj brakujące elementy bez nadpisywania istniejącej poczty.

Umożliw zatwierdzonym użytkownikom tworzenie pokoi Jitsi z logowaniem przez Keycloak

Umożliw zatwierdzonym użytkownikom tworzenie pokoi Jitsi z logowaniem przez Keycloak

Zezwalaj tylko zatwierdzonym kontom na otwieranie pokoi Jitsi Meet przy użyciu Keycloak i uwierzytelniania tokenem, jednocześnie zapewniając możliwość dołączania gościom, gdy będzie to potrzebne.

Synchronizuj użytkowników usługi Active Directory z usługą ONLYOFFICE DocSpace za pośrednictwem protokołu LDAP

Synchronizuj użytkowników usługi Active Directory z usługą ONLYOFFICE DocSpace za pośrednictwem protokołu LDAP

Połącz ONLYOFFICE DocSpace z usługą Active Directory lub OpenLDAP, bezpiecznie importuj użytkowników i grupy, mapuj pola kont i planuj niezawodną synchronizację.

Dodawanie czcionek do serwera dokumentów ONLYOFFICE: Docker kontra Linux

Dodawanie czcionek do serwera dokumentów ONLYOFFICE: Docker kontra Linux

Zainstaluj niestandardowe czcionki w serwerze dokumentów ONLYOFFICE, porównaj trwałe instalacje Docker z kopiami bezpośrednimi, utwórz ponownie listę czcionek i zweryfikuj wynik.

Debian 12 na serwerze VPS z małą ilością pamięci RAM: Jak ograniczyć awarie MySQL spowodowane brakiem pamięci (OOM)

Debian 12 na serwerze VPS z małą ilością pamięci RAM: Jak ograniczyć awarie MySQL spowodowane brakiem pamięci (OOM)

Diagnozuj błędy OOM MySQL w systemie Debian 12, sprawdzaj limity pamięci VPS, konfiguruj wymianę oraz dostosowuj pamięć i współbieżność bazy danych, nie obiecując przy tym uniwersalnego rozwiązania.

Umieść dokumenty ONLYOFFICE w HAProxy bez przerywania edycji

Umieść dokumenty ONLYOFFICE w HAProxy bez przerywania edycji

Skonfiguruj protokół HAProxy HTTPS, przekazywanie nagłówków, limity czasu WebSocket i kontrole kondycji dla dokumentów ONLYOFFICE, a następnie zweryfikuj edycję i zapisy.

Instalacja i podpisywanie niestandardowych modułów jądra w bezpiecznym rozruchu SLES 15

Instalacja i podpisywanie niestandardowych modułów jądra w bezpiecznym rozruchu SLES 15

Załaduj niestandardowy moduł jądra SLES 15 bez wyłączania funkcji Secure Boot. Dopasuj uruchomiony moduł jądra, podpisz plik .ko, zarejestruj klucz MOK i zweryfikuj ładowanie.

Bezpieczne przekazywanie dziennika systemowego SLES za pomocą rsyslog i wzajemnego protokołu TLS

Bezpieczne przekazywanie dziennika systemowego SLES za pomocą rsyslog i wzajemnego protokołu TLS

Wysyłaj logi systemu SLES do zdalnego kolektora rsyslog za pośrednictwem uwierzytelnionego protokołu TLS, z kontrolą certyfikatów, buforowaniem przerw i testami dostarczania.

Uruchamianie systemu Ubuntu Server w trybie awaryjnym: przewodnik ratunkowy krok po kroku

Uruchamianie systemu Ubuntu Server w trybie awaryjnym: przewodnik ratunkowy krok po kroku

Bezpieczna diagnostyka trybu awaryjnego Ubuntu Server. Odczytaj logi rozruchu, sprawdź montowania roota i fstab, napraw uszkodzoną jednostkę, obsłuż błędy systemu plików i zweryfikuj czysty restart.