LUKS edukiontzi bat deszifratzen sistema abiaraztean

Egun eta gau on guztioi! Argitalpen hau erabilgarria izango da LUKS datuen enkriptatzea erabiltzen dutenentzat eta Linux-en (Debian, Ubuntu) diskoak deszifratu nahi dituztenentzat. root partizioa deszifratzeko faseak. Eta Interneten ezin izan nuen horrelako informaziorik aurkitu.

Duela gutxi, apaletan disko-kopurua areagotuz, /etc/crypttab-en bidez diskoak deszifratzearen arazoarekin topo egin nuen. Pertsonalki, metodo hau erabiltzearen arazo batzuk nabarmentzen ditut, hots, fitxategia irakurtzen ari dela root partizioa kargatu (muntatu) ondoren bakarrik, eta horrek negatiboki eragiten die ZFS inportazioei, bereziki *_crypt gailuko partizioetatik eraikitakoak badira, edo partizioetatik eraikitako mdadm raid-ak ere. Denok dakigu parted erabil dezakezula LUKS ontzietan, ezta? Eta beste zerbitzu batzuk goiz abiatzearen arazoa ere, oraindik arrayrik ez dagoenean, baina erabiltzea Dagoeneko zerbait behar dut (iSCSIren bidez Proxmox VE 5.x eta ZFS multzokatuta lan egiten dut).

ZFSoverISCSIri buruz apur batiSCSI-k LIO bidez funtzionatzen du, eta, hain zuzen ere, iscsi helburua abiarazten denean eta ZVOL gailuak ikusten ez dituenean, konfiguraziotik kentzen ditu, sistema gonbidatuak abiatzea eragozten duena. Hori dela eta, json fitxategiaren babeskopia berrezartzea edo VM bakoitzeko identifikatzaileak dituzten gailuak eskuz gehitzea, hori besterik ez da izugarria halako dozenaka makina daudenean eta konfigurazio bakoitzak disko 1 baino gehiago duenean.

Eta kontuan hartuko dudan bigarren galdera da nola deszifratu (hau da artikuluaren funtsezko puntua). Eta honetaz hitz egingo dugu jarraian, joan ebaki azpian!

Gehienetan, Interneten, gako-fitxategi bat erabiltzen da (hau baino lehen zirrikituan auto-gehitua komandoak - cryptsetup luksAddKey), edo salbuespen bakanetan (errusierazko Interneten informazio gutxi dago) - decrypt_derived script-a. /lib/cryptsetup/script/-en kokatuta (noski, badira beste modu batzuk, baina bi hauek erabili ditut, artikuluaren oinarria izan direnak). Berrabiarazi ondoren erabateko inklusio autonomoa lortzeko ere ahalegindu nintzen, kontsolan komando gehigarririk gabe, dena aldi berean "hegan egin zedin". Horregatik, zergatik itxaron? β€”

Has gaitezen!

Demagun sistema bat, Debian bezalakoa, sda3_crypt kripto-partizio batean instalatuta eta dozena bat disko enkriptatzeko eta zure gogoaren arabera sortzeko prest. Sda3_crypt desblokeatzeko pasaesaldi bat (passphrase) dugu, eta partizio horretatik aterako dugu martxan (deszifratuta) sistemako pasahitzetik "hash"-a eta gainerako diskoetan gehituko dugu. Dena oinarrizkoa da, kontsolan exekutatzen dugu:

/lib/cryptsetup/scripts/decrypt_derived sda3_crypt | cryptsetup luksFormat /dev/sdX

non X gure diskoak, partizioak, etab.

Diskoak gure pasaesaldiko "hash" batekin enkriptatu ondoren, UUID edo IDa aurkitu behar duzu, zertara eta zertara erabiltzen denaren arabera. /dev/disk/by-uuid eta by-id-en datuak hartzen ditugu hurrenez hurren.

Hurrengo urratsa fitxategiak eta mini-scriptak prestatzea da lan egin behar ditugun funtzioetarako, jarrai dezagun:

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/

gehiago

touch /etc/initramfs-tools/hooks/decrypt && chmod +x /etc/initramfs-tools/hooks/decrypt

../desenkriptatutako edukia

#!/bin/sh

cp -p /lib/cryptsetup/scripts/decrypt_derived "$DESTDIR/bin/decrypt_derived"

gehiago

touch /etc/initramfs-tools/hooks/partcopy && chmod +x /etc/initramfs-tools/hooks/partcopy

../partcopy-ren edukia

#!/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"

pixka bat gehiago

touch /etc/initramfs-tools/scripts/local-bottom/partprobe && chmod +x /etc/initramfs-tools/scripts/local-bottom/partprobe

Edukia ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

eta azkenik, update-initramfs aurretik, /etc/initramfs-tools/scripts/local-top/cryptroot fitxategia editatu behar duzu, ~360 lerrotik hasita, beheko kode zatia

Original


                # decrease $count by 1, apparently last try was successful.
                count=$(( $count - 1 ))
                
                message "cryptsetup ($crypttarget): set up successfully"
                break

eta ekarri forma honetara

Editatua


                # 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

Kontuan izan UUID edo IDa erabil daitekeela hemen. Gauza nagusia da HDD / SSD gailuetarako beharrezko kontrolatzaileak /etc/initramfs-tools/modules gehitzen direla. Komandoarekin zein kontrolatzaile erabiltzen ari den jakin dezakezu udevadm info -a -n /dev/sdX | egrep 'begira|GIDARI'.

Orain amaitu eta fitxategi guztiak lekuan daudela, exekutatu update-initramfs -u -k all -v, erregistroan ez da izan behar gure scripten exekuzio akatsak. Berrabiarazi, pasaesaldia sartu eta pixka bat itxaron dugu, disko kopuruaren arabera. Ondoren, sistema abiaraziko da eta abiarazteko azken fasean, hots, root partizioa "muntatu" ondoren, partprobe komandoa exekutatuko da - LUKS gailuetan eta edozein arrayetan sortutako partizio guztiak aurkitu eta jasoko ditu, izan ZFS edo izan. mdadm, arazorik gabe muntatuko da! Eta hori guztia kargatu aurretik Disko/matrize hauek behar dituzten oinarrizko zerbitzuak eta zerbitzuak.

eguneratzea1: Nola nabaritu AEP, metodo honek LUKS1-erako bakarrik funtzionatzen du.

Iturria: www.habr.com

Gehitu iruzkin berria