Dobar dan i noć svima! Ovaj će post biti koristan onima koji koriste LUKS enkripciju podataka i žele dekriptirati diskove pod Linuxom (Debian, Ubuntu) na faze dekriptiranja korijenske particije. I nisam mogao pronaći takve informacije na internetu.
U novije vrijeme, s povećanjem broja diskova na policama, naišao sam na problem dešifriranja diskova više nego poznatom metodom kroz /etc/crypttab. Osobno ističem nekoliko problema s korištenjem ove metode, naime da se datoteka čita tek nakon učitavanja (mountanja) root particije, što negativno utječe na ZFS uvoze, osobito ako su izgrađeni od particija na *_crypt uređaju, ili mdadm napade također izgrađene od particija. Svi znamo da parted možete koristiti na LUKS kontejnerima, zar ne? A također i problem ranog pokretanja drugih usluga, kada još nema nizova, ali za korištenje Već mi treba nešto (radim s klasteriranim Proxmox VE 5.x i ZFS preko iSCSI).
Malo o ZFSoverISCSIiSCSI mi radi preko LIO-a, i zapravo, kada se iscsi target pokrene i ne vidi ZVOL uređaje, jednostavno ih ukloni iz konfiguracije, što onemogućuje dizanje gostujućih sustava. Dakle, ili vraćanje sigurnosne kopije json datoteke ili ručno dodavanje uređaja s identifikatorima za svaki VM, što je jednostavno užasno kada postoje deseci takvih strojeva i svaka konfiguracija ima više od 1 diska.
A drugo pitanje koje ću razmotriti je kako dešifrirati (ovo je ključna točka članka). A o ovome ćemo govoriti u nastavku, idite ispod reza!
Najčešće se na Internetu koristi datoteka ključa (koja se sama dodala u utor prije toga naredbom - cryptsetup luksAddKey), ili u rijetkim iznimkama (na internetu na ruskom jeziku ima vrlo malo informacija) - skripta decrypt_derived koji se nalazi u /lib/cryptsetup/script/ (naravno, postoje i drugi načini, ali ja sam koristio ova dva, koja su bila osnova članka). Također sam se zalagao za potpuno autonomno uključivanje nakon reboota, bez ikakvih dodatnih naredbi u konzoli, tako da mi sve odjednom “poleti”. Stoga, zašto čekati? —
Krenimo!
Pretpostavimo da je sustav, poput Debiana, instaliran na kripto particiji sda3_crypt i desetak diskova spremnih za šifriranje i stvaranje po želji. Imamo lozinku (passphrase) za otključavanje sda3_crypt, a upravo s ove particije ćemo ukloniti "hash" iz lozinke na pokrenutom (dešifriranom) sustavu i dodati je ostalim diskovima. Sve je elementarno, u konzoli izvršavamo:
/lib/cryptsetup/scripts/decrypt_derived sda3_crypt | cryptsetup luksFormat /dev/sdX
gdje su X naši diskovi, particije itd.
Nakon šifriranja diskova s "hashom" iz naše šifre, morate saznati UUID ili ID - ovisno o tome tko je na što navikao i na što. Podatke uzimamo iz /dev/disk/by-uuid odnosno by-id.
Sljedeći korak je priprema datoteka i mini-skripti za funkcije koje su nam potrebne za rad, nastavimo:
cp -p /usr/share/initramfs-tools/hooks/cryptroot /etc/initramfs-tools/hooks/
cp -p /usr/share/initramfs-tools/scripts/local-top/cryptroot /etc/initramfs-tools/scripts/local-top/
dalje
touch /etc/initramfs-tools/hooks/decrypt && chmod +x /etc/initramfs-tools/hooks/decrypt
Sadržaj ../decrypt
#!/bin/sh
cp -p /lib/cryptsetup/scripts/decrypt_derived "$DESTDIR/bin/decrypt_derived"
dalje
touch /etc/initramfs-tools/hooks/partcopy && chmod +x /etc/initramfs-tools/hooks/partcopy
Sadržaj ../partcopy
#!/bin/sh
cp -p /sbin/partprobe "$DESTDIR/bin/partprobe"
cp -p /lib/x86_64-linux-gnu/libparted.so.2 "$DESTDIR/lib/x86_64-linux-gnu/libparted.so.2"
cp -p /lib/x86_64-linux-gnu/libreadline.so.7 "$DESTDIR/lib/x86_64-linux-gnu/libreadline.so.7"
još malo
touch /etc/initramfs-tools/scripts/local-bottom/partprobe && chmod +x /etc/initramfs-tools/scripts/local-bottom/partprobe
Sadržaj ../partprobe
#!/bin/sh
$DESTDIR/bin/partprobe
i posljednje, prije update-initramfs-a, morate urediti /etc/initramfs-tools/scripts/local-top/cryptroot datoteku, počevši od reda ~360, isječak koda ispod
Original
# decrease $count by 1, apparently last try was successful.
count=$(( $count - 1 ))
message "cryptsetup ($crypttarget): set up successfully"
break
i dovedite ga u ovaj obrazac
Uređeno
# decrease $count by 1, apparently last try was successful.
count=$(( $count - 1 ))
/bin/decrypt_derived $crypttarget | cryptsetup luksOpen /dev/disk/by-uuid/ *CRYPT_MAP*
/bin/decrypt_derived $crypttarget | cryptsetup luksOpen /dev/disk/by-id/ *CRYPT_MAP*
message "cryptsetup ($crypttarget): set up successfully"
break
Imajte na umu da se ovdje može koristiti UUID ili ID. Glavna stvar je da su potrebni upravljački programi za HDD / SSD uređaje dodani u /etc/initramfs-tools/modules. Pomoću naredbe možete saznati koji se upravljački program koristi udevadm info -a -n /dev/sdX | egrep 'tražim|VOZAČA'.
Sad kad smo gotovi i sve su datoteke na svom mjestu, trčite ažuriranje-initramfs -u -k sve -v, u sječi ne smije biti pogreške u izvršavanju naših skripti. Ponovno se pokrećemo, unosimo zaporku i čekamo malo, ovisno o broju diskova. Zatim će se sustav pokrenuti i u završnoj fazi pokretanja, odnosno nakon “montiranja” root particije, izvršit će se naredba partprobe - pronaći će i pokupiti sve kreirane particije na LUKS uređajima i bilo kojim nizovima, bilo ZFS ili mdadm, sastaviti će se bez problema! I sve ovo prije utovara osnovne usluge i usluge koje trebaju ove diskove/nizove.
ažuriranje1: Kako
Izvor: www.habr.com