Strona główna
» Jak
»
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
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"
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
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.
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
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ć.
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"
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.
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:
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.
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.