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

Ustaw publiczny adres URL NextCloud, aby mógł się do siebie dodzwonić

Napraw ostrzeżenie Nextcloud o brakującym adresie wychodzącym, ustawiając jego kanoniczny adres URL i sprawdzając routing DNS, HTTPS i odwrotnego serwera proxy na samym serwerze.

Konfigurowanie buforowania Nextcloud Redis w systemie Ubuntu 24.04

Konfigurowanie buforowania Nextcloud Redis w systemie Ubuntu 24.04

Skonfiguruj APCu i Redis przez lokalne gniazdo Unix na potrzeby buforowania i blokowania plików w usłudze Nextcloud, wraz z instrukcjami dla bieżących i starszych wersji usługi Nextcloud.

Uruchom automatycznie Nextcloud Cron za pomocą timera Systemd

Sprawdź tryb cron Nextcloud, napraw usługę systemd i timer oraz zweryfikuj, czy zadania w tle są uruchamiane po uruchomieniu i co pięć minut.

Usuń ostrzeżenie o blokowaniu plików w NextCloud za pomocą Redis

Włącz niezawodne blokowanie plików Nextcloud, wybierz odpowiedni serwer Redis lub Valkey i sprawdź, czy ostrzeżenie zostanie usunięte bez ryzyka równoczesnych zmian w plikach.

Co jest potrzebne, aby uzyskać ocenę bezpieczeństwa Nextcloud A+

Co jest potrzebne, aby uzyskać ocenę bezpieczeństwa Nextcloud A+

Napraw typowe błędy skanowania Nextcloud dzięki bieżącym aktualizacjom, protokołom HTTPS i HSTS, precyzyjnemu zaufaniu do odwrotnego serwera proxy i sprawdzeniu względem serwera publicznego.

Włącz szyfrowanie po stronie serwera Nextcloud z mierzalnym wpływem

Skonfiguruj Nextcloud SSE dla pamięci masowej, która tego wymaga, chroń klucze szyfrujące i zmierz wpływ transferu i procesora przed zaszyfrowaniem istniejących plików.

Dodaj wyszukiwanie pełnotekstowe Elasticsearch do NextCloud

Połącz wyszukiwarkę plików Nextcloud z Elasticsearch, zindeksuj zawartość dokumentów i wybierz konfigurację odpowiadającą Twoim potrzebom w zakresie serwera i bezpieczeństwa.

Ustaw niezawodną politykę wygasania dla usuniętych plików w usłudze NextCloud

Ustaw niezawodną politykę wygasania dla usuniętych plików w usłudze NextCloud

Skonfiguruj Nextcloud tak, aby usuwał usunięte pliki po upływie określonego czasu przechowywania, niezawodnie planował zadania w tle i unikał poleceń, które usuwają śmieci każdego użytkownika.

Ostrzeżenie o braku indeksów bazy danych NextCloud

Ostrzeżenie o braku indeksów bazy danych NextCloud

Wykonaj bezpieczną naprawę OCC w Nextcloud, przejrzyj zmiany w bazie danych i sprawdź, dlaczego ostrzeżenie może nadal się pojawiać.

Zwiększ limit przesyłania danych do sieci w NextCloud powyżej 2 GB

Zwiększ limit przesyłania danych do sieci w NextCloud powyżej 2 GB

Zezwól na przesyłanie większych plików przez przeglądarkę Nextcloud, dostosowując ustawienia PHP, Nginx lub Apache, tymczasowego miejsca przechowywania i limitu czasu — i sprawdź, który limit blokuje plik.