Zi si noapte buna tuturor! Această postare va fi utilă celor care folosesc criptarea datelor LUKS și doresc să decripteze discurile sub Linux (Debian, Ubuntu) pe etapa de decriptare a partiției rădăcină. Și nu am putut găsi astfel de informații pe Internet.
Destul de recent, odată cu creșterea numărului de discuri din rafturi, am întâlnit problema decriptării discurilor folosind metoda mai mult decât cunoscută prin /etc/crypttab. Personal, scot în evidență câteva probleme legate de utilizarea acestei metode și anume că fișierul este citit numai după încărcarea (montarea) partiției rădăcină, care afectează negativ importurile ZFS, în special dacă au fost colectate din partiții de pe un dispozitiv *_crypt sau raid-urile mdadm colectate și din partiții. Știm cu toții că poți folosi parted pe containerele LUKS, nu? Și, de asemenea, problema pornirii timpurii a altor servicii, când nu există încă matrice, și pentru a utiliza Deja am nevoie de ceva (lucrez cu clustered Proxmox VE 5.x și ZFS peste iSCSI).
Câteva despre ZFSoverISCSIiSCSI funcționează pentru mine prin LIO și, de fapt, când ținta iscsi pornește și nu vede dispozitivele ZVOL, pur și simplu le elimină din configurație, ceea ce împiedică pornirea sistemelor invitate. Prin urmare, fie restaurarea fișierului json de rezervă, fie adăugarea manuală a dispozitivelor cu identificatorii fiecărei mașini virtuale, ceea ce este pur și simplu groaznic când există zeci de astfel de mașini și fiecare configurație are mai mult de 1 disc.
Și a doua întrebare pe care o voi lua în considerare este cum să decriptez (acesta este punctul cheie al articolului). Și despre asta vom vorbi mai jos, treci la tăietură!
Cel mai adesea pe Internet folosesc un fișier cheie (care a fost adăugat automat la slot cu comanda - cryptsetup luksAddKey), sau în rare excepții (există foarte puține informații pe internetul în limba rusă) - scriptul decrypt_derived, situat în /lib/cryptsetup/script/ (desigur, există și alte moduri, dar le-am folosit pe acestea două, care au stat la baza articolului). De asemenea, m-am străduit pentru activarea autonomă completă după reporniri, fără comenzi suplimentare în consolă, astfel încât totul să „decoleze” imediat pentru mine. Prin urmare, de ce să așteptați? —
Hai să începem!
Presupunem un sistem, de exemplu Debian, instalat pe partiția cripto sda3_crypt și o duzină de discuri gata să cripteze și să creeze orice dorește inima ta. Avem o frază cheie (frază de acces) pentru a debloca sda3_crypt și tocmai din această secțiune vom elimina „hash”-ul parolei de pe un sistem care rulează (decriptat) și îl vom adăuga pe alte discuri. Totul este elementar, în consolă executăm:
/lib/cryptsetup/scripts/decrypt_derived sda3_crypt | cryptsetup luksFormat /dev/sdX
unde X este discurile noastre, partițiile etc.
După criptarea discurilor cu un hash din fraza noastră cheie, trebuie să aflați UUID-ul sau ID-ul - în funcție de cine este obișnuit cu ce. Preluăm date din /dev/disk/by-uuid și, respectiv, by-id.
Următoarea etapă este pregătirea fișierelor și mini-scripturilor pentru funcțiile pe care trebuie să le lucrăm, să continuăm:
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/
mai departe
touch /etc/initramfs-tools/hooks/decrypt && chmod +x /etc/initramfs-tools/hooks/decrypt
Conținutul ../decrypt
#!/bin/sh
cp -p /lib/cryptsetup/scripts/decrypt_derived "$DESTDIR/bin/decrypt_derived"
mai departe
touch /etc/initramfs-tools/hooks/partcopy && chmod +x /etc/initramfs-tools/hooks/partcopy
Cuprins ../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"
mai mult
touch /etc/initramfs-tools/scripts/local-bottom/partprobe && chmod +x /etc/initramfs-tools/scripts/local-bottom/partprobe
Cuprins ../partprobe
#!/bin/sh
$DESTDIR/bin/partprobe
și, în sfârșit, înainte de update-initramfs, trebuie să editați fișierul /etc/initramfs-tools/scripts/local-top/cryptroot, începând cu linia ~360, o bucată de cod de mai jos
Original
# decrease $count by 1, apparently last try was successful.
count=$(( $count - 1 ))
message "cryptsetup ($crypttarget): set up successfully"
break
și aduceți-l în această formă
Editat
# 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
Rețineți că aici poate fi folosit fie UUID, fie ID. Principalul lucru este că driverele necesare pentru dispozitivele HDD/SSD sunt adăugate la /etc/initramfs-tools/modules. Puteți afla ce driver este folosit cu comanda udevadm info -a -n /dev/sdX | egrep „în căutarea|șofer”.
Acum că am terminat și toate fișierele sunt la locul lor, rulăm update-initramfs -u -k all -v, în logare nu trebuie sa fie erori în executarea scripturilor noastre. Repornim, introducem fraza cheie și așteptăm puțin, în funcție de numărul de discuri. Apoi, sistemul va porni și în etapa finală a pornirii, și anume după „montarea” partiției rădăcină, va fi executată comanda partprobe - va găsi și va prelua toate partițiile create pe dispozitivele LUKS și orice matrice, fie că este vorba de ZFS sau mdadm, va fi asamblat fara probleme! Și toate acestea înainte de încărcare principalele servicii care au nevoie de aceste discuri/matrice.
update1: Cum
Sursa: www.habr.com