https://github.com/jakeday/linux-surface/blob/master/SIGNING.md zawiera bardziej szczegółowe instrukcje dotyczące podpisywania jądra (dostosowane z tego samego samouczka połączonego z zaakceptowaną odpowiedzią). Instrukcje zostały odtworzone w następujący sposób:
Podpisywanie niestandardowego jądra dla bezpiecznego rozruchu
Instrukcje dotyczą Ubuntu, ale powinny działać podobnie dla innych dystrybucji, jeśli używają shim i grub jako bootloadera. Jeśli twoja dystrybucja nie używa podkładki dystansowej (np. Linux Foundation Preloader), powinieneś wykonać podobne kroki, aby ukończyć podpisywanie (np. HashTool zamiast MokUtil dla LF Preloader) lub możesz zainstalować podkładkę shim, aby jej użyć. Nazywa się pakiet ubuntu dla shim shim-signed
, ale proszę się dowiedzieć, jak go poprawnie zainstalować, aby nie zepsuć programu ładującego.
Od najnowszej aktualizacji GRUB2 (2.02 + dfsg1-5ubuntu1) w Ubuntu, GRUB2 nie ładuje już niepodpisanych jąder, o ile włączony jest Bezpieczny rozruch. Użytkownicy Ubuntu 18.04 zostaną powiadomieni podczas aktualizacji pakietu grub-efi, że to jądro nie jest podpisane i aktualizacja zostanie przerwana.
Zatem masz trzy opcje rozwiązania tego problemu:
- Sam podpisujesz jądro.
- Używasz podpisanego, ogólnego jądra swojej dystrybucji.
- Wyłączasz bezpieczny rozruch.
Ponieważ opcje druga i trzecia nie są tak naprawdę wykonalne, oto kroki do samodzielnego podpisania jądra.
Instrukcje dostosowane z bloga Ubuntu . Przed rozpoczęciem wykonaj kopię zapasową katalogu / boot / EFI, aby móc przywrócić wszystko. Wykonaj te kroki na własne ryzyko.
- Utwórz konfigurację, aby utworzyć klucz podpisu, zapisz jako mokconfig.cnf:
# This definition stops the following lines failing if HOME isn't
# defined.
HOME = .
RANDFILE = $ENV::HOME/.rnd
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3
string_mask = utf8only
prompt = no
[ req_distinguished_name ]
countryName = <YOURcountrycode>
stateOrProvinceName = <YOURstate>
localityName = <YOURcity>
0.organizationName = <YOURorganization>
commonName = Secure Boot Signing Key
emailAddress = <YOURemail>
[ v3 ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical,CA:FALSE
extendedKeyUsage = codeSigning,1.3.6.1.4.1.311.10.3.6
nsComment = "OpenSSL Generated Certificate"
Dopasuj wszystkie części do swoich szczegółów.
- Utwórz klucz publiczny i prywatny do podpisywania jądra:
openssl req -config ./mokconfig.cnf \
-new -x509 -newkey rsa:2048 \
-nodes -days 36500 -outform DER \
-keyout "MOK.priv" \
-out "MOK.der"
- Konwertuj klucz również na format PEM (mokutil wymaga DER, sbsign potrzebuje PEM):
openssl x509 -in MOK.der -inform DER -outform PEM -out MOK.pem
- Zapisz klucz do instalacji shim:
sudo mokutil --import MOK.der
Zostaniesz poproszony o hasło, użyjesz go tylko do potwierdzenia wyboru klucza w następnym kroku, więc wybierz dowolny.
Uruchom ponownie system. Spotkasz niebieski ekran narzędzia o nazwie MOKManager. Wybierz „Zarejestruj MOK”, a następnie „Wyświetl klucz”. Upewnij się, że to klucz utworzony w kroku 2. Następnie kontynuuj proces i musisz wprowadzić hasło podane w kroku 4. Kontynuuj uruchamianie systemu.
Sprawdź, czy Twój klucz jest zarejestrowany przez:
sudo mokutil --list-enrolled
- Podpisz zainstalowane jądro (powinno to być na / boot / vmlinuz- [KERNEL-VERSION] -surface-linux-surface):
sudo sbsign --key MOK.priv --cert MOK.pem /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface --output /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface.signed
- Skopiuj initram jądra niepodpisanego, więc mamy również initram dla podpisanego.
sudo cp /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{,.signed}
- Zaktualizuj swoją grub-config
sudo update-grub
- Uruchom ponownie system i wybierz podpisane jądro. Jeśli bootowanie działa, możesz usunąć niepodpisane jądro:
sudo mv /boot/vmlinuz-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo mv /boot/initrd.img-[KERNEL-VERSION]-surface-linux-surface{.signed,}
sudo update-grub
Teraz twój system powinien działać pod podpisanym jądrem, a aktualizacja GRUB2 działa ponownie. Jeśli chcesz zaktualizować niestandardowe jądro, możesz łatwo podpisać nową wersję, wykonując powyższe kroki od kroku siódmego. W ten sposób ZAPASUJ klucze MOK (MOK.der, MOK.pem, MOK.priv).