Zdalne Odblokowywanie Puli ZFS przez ZFSBootMenu
17.10.2026
10 minut czytania
#zfs #zfsbootmenu #linux
Problem i rozwiązanie
ZFS (Zettabyte File System) słynie z wysokiego poziomu integralności danych, zapewnianego dzięki kompleksowemu systemowi sum kontrolnych i zaawansowanym funkcji tworzenia migawek. Jednak wdrożenie szyfrowania wiąże się z istotnym ograniczeniem operacyjnym: koniecznością fizycznego dostępu. Gdy pule ZFS są chronione hasłami, ich obsługa wymaga fizycznego podłączenia klawiatury i monitora, co powoduje znaczne utrudnienia logistyczne, które często można rozwiązać jedynie za pomocą kosztownych przełączników KVM.
Niniejszy przewodnik przedstawia stabilne, sprawdzone rozwiązanie opracowane na podstawie moich własnych testów. Wykorzystując ZFSBootMenu, możemy umożliwić zdalne odblokowywanie zaszyfrowanych zbiorów danych ZFS podczas procesu uruchamiania. Eliminuje to konieczność fizycznej obecności przy rutynowym administrowaniu, umożliwiając niezawodne zarządzanie systemem zarówno przy biurku, jak i z drugiego końca miasta. Poniższy artykuł skupia się na tym, jak włączyć zdalne odblokowywanie zbiorów danych ZFS za pomocą ZBM, ale nie mówi nic o koniecznym buforowaniu klucza szyfrującego w initramfs drugiego etapu.
Kontekst konfiguracji
Ostatnie zmiany w oficjalnym kontenerze kompilacyjnym ZBM sprawiły, że dotychczasowe metody przestały działać. W niniejszym przewodniku opisano niezawodne rozwiązanie oparte na praktycznych doświadczeniach, pozwalające włączyć zdalny dostęp do sekwencji rozruchowej systemu root-on-ZFS. Jeśli czujesz się na siłach, by zarządzać tak zaawansowaną konfiguracją, wykonaj poniższe kroki.
Wymagania systemowe
Ta konfiguracja jest zaawansowana i zakłada znajomość procesu uruchamiania jądra systemu Linux oraz podstaw systemu plików ZFS. Przed kontynuowaniem upewnij się, że zostały spełnione poniższe wymagania:
- System typu root-on-ZFS: Twój system operacyjny musi być zainstalowany na systemie plików ZFS, a nie na tradycyjnych partycjach.
- Wiedza w zakresie niestandardowej struktury rozruchowej: Musisz wiedzieć, jak zastąpić dotychczasowy program rozruchowy narzędziem ZFSBootMenu (ZBM), jeśli jeszcze z niego nie korzystasz.
- Układ docelowy: System musi wykorzystywać układ, w którym jądro i initramfs znajdują się w katalogu
/efiwewnątrz zaszyfrowanego zbioru danych, podczas gdy ZBM znajduje się na niezaszyfrowanej partycji FAT32/boot
Po wdrożeniu sekwencja uruchamiania będzie przebiegać następująco:
- ZBM uruchamia się
- System próbuje skonfigurować karty sieciowe za pomocą DHCP
- Startuje usługa Dropbear
- Użytkownik odszyfrowuje zbiory danych za pośrednictwem SSH lub fizycznej konsoli
- Użytkownik wybiera, który zbiór danych/jądro + initramfs ma zostać uruchomiony
Etapy wdrożenia
Krok 1: Zainstaluj niezbędne narzędzia
W tej sekcji znajdują się polecenia specyficzne dla danej dystrybucji, które zależą od menedżera pakietów używanego przez system operacyjny. Należy dostosować te polecenia do konkretnej dystrybucji systemu Linux.
Krok 2: Skonfiguruj ZFSBootMenu
Ten plik jest sercem konfiguracji, kontrolującym sposób budowy ZFSBootMenu za pomocą polecenia generate-zbm
Krok 3: Zdefiniuj moduły i skrypty
Ten plik kieruje procesem tworzenia initramfs, zapewniając, że wszystkie niezbędne narzędzia zostaną dołączone, a co najważniejsze, że nasze niestandardowe skrypty będą uruchamiane we właściwej kolejności.
Krok 4: Inicjalizacja połączeń sieciowych
Oto mój niestandardowy skrypt, zaprojektowany z myślą o prostocie i niezawodności w środowisku wczesnego rozruchu. Uruchamia on wszystkie interfejsy sieciowe (z wyjątkiem interfejsu pętli zwrotnej) i próbuje użyć DHCP z ograniczeniem czasu odpowiedzi. Limit czasu wynoszący 10 sekund gwarantuje, że jeśli systemowi nie uda się nawiązać połączenia sieciowego, nie zawiesi się on na czas nieokreślony, co pozwala na potencjalne fizyczne przywrócenie działania poprzez dostęp do konsoli.
Krok 5: Skrypty SSH
Jako demona SSH umożliwiającego zdalny dostęp wybrałem Dropbear. Zamiast tworzyć własne skrypty, wykorzystałem te pochodzące z forków mkinitcpio-rclocal i mkinitcpio-dropbear autorstwa ahesforda na GitHubie. Odpowiadają one za wprowadzenie do initramfs niezbędnych kluczy kryptograficznych. Inteligentnie sprawdzają, czy istniejące klucze OpenSSH można przekonwertować do formatu Dropbear; w przeciwnym razie generują nowe.
Uwaga dotycząca bezpieczeństwa: Podczas procesu konfiguracji korzystałem z maszyny wirtualnej głównie ze względu na wygodę, oddzielając środowisko wdrożeniowe ZBM od produkcyjnego systemu operacyjnego. Wygenerowane klucze hosta SSH i autoryzowane klucze są przechowywane w postaci niezaszyfrowanej w initramfs. Jeśli dojdzie do naruszenia fizycznego dostępu do maszyny, osoba atakująca może wykorzystać ten wektor do późniejszej ekstrakcji haseł poprzez pasywne lub aktywne ataki typu „man-in-the-middle” (MITM).
Krok 6: Wygeneruj ZBM i utwórz wpis rozruchowy
Po skonfigurowaniu wszystkich ustawień i skryptów należy wygenerować ostateczny obraz ZFSBootMenu i poinstruować UEFI, aby go wczytywał.
Kontakt
Chcesz zapoznać się z moimi publicznymi projektami lub po prostu porozmawiać na temat poruszony w tym artykule? Wybierz poniżej, w jaki sposób chcesz się ze mną skontaktować.
Poznaj moje publiczne projekty i wnieś swój wkład, jeśli chcesz
Najszybszy sposób na otrzymanie odpowiedzi
Zaplanuj rozmowę w dogodnym dla siebie terminie