Wyłączenie szybkiego przeładowywania systemu z kexec
Napisał: Patryk Krawaczyński
18/10/2017 w Bezpieczeństwo Brak komentarzy. (artykuł nr 644, ilość słów: 283)
K
exec to wywołanie systemowe, które umożliwia załadowanie i uruchomienie innego jądra z aktualnie uruchomionego systemu. Jest to bardzo przydatna funkcjonalność dla deweloperów jądra Linuksa lub innych osób, którym zależy na czasie. Bardzo szybki restart odbywa się bez czekania na cały proces ładowania systemu BIOS lub UEFI. Nowe jądro ładowane jest bezpośrednio do pamięci i z niej uruchamiane. Zapobiega to długim czasom oczekiwania związanym z pełnym uruchomieniem komputera i może pomagać w niektórych przypadkach spełnić wymagania wysokiej dostępności minimalizując przestoje systemów (należy jednak pamiętać, że kexec w zależności od konfiguracji sprzętowych może działać niepoprawnie z powodu urządzeń, które nie zostały w pełni zainicjowane podczas korzystania z tej metody).
Przykładowa procedura dla systemu Ubuntu 16.04 jest bardzo prosta. Instalujemy pakiet kexec-tools (już na tym etapie zostajemy spytani czy kexec ma zajmować się funkcjami restartu) i wydajemy polecenia:
kexec -l /boot/vmlinuz-linux --initrd=/boot/initramfs-linux.img --reuse-cmdline systemctl kexec
W pierwotnej postaci mechanizm ten miał swoje implikacje bezpieczeństwa. Matthew Garrett udowodnił, że dzięki niemu jest w stanie załadować dowolny kod do jądra. Wsparcie dla umożliwienia uruchamiania tylko podpisanych jąder za pośrednictwem kexec zostało włączone do wersji 3.17 Linuksa, która została wydana 5 października 2014 r. Powoduje to, że użytkownik z prawami administratora nie będzie mógł załadować dowolnego kodu i go wykonać. Uzupełnia to także mechanizm UEFI Secure Boot. Jeśli nie potrzebujemy tej funkcjonalności dla naszych serwerów możemy wyłączyć kexec z poziomu /etc/sysctl.conf
:
kernel.kexec_load_disabled = 1
Po wydaniu polecenia sysctl -p, przy próbie wydania polecenia kexec powinniśmy otrzymać komunikat:
kexec_load failed: Operation not permitted
Bardzo często wyłączanie kexec jest łączone z blokadą ładowania dodatkowych modułów.
Więcej informacji: kexec