LUKS-i konteineri dekrüptimine süsteemi alglaadimise ajal

Head päeva ja ööd kõigile! See postitus on kasulik neile, kes kasutavad LUKS-i andmete krüptimist ja soovivad dekrüpteerida kettaid Linuxi (Debian, Ubuntu) all. juurpartitsiooni dekrüpteerimise etapid. Ja ma ei leidnud sellist teavet Internetist.

Hiljuti, riiulitel olevate ketaste arvu suurenemisega, puutusin kokku probleemiga, kuidas ketaste dekrüpteerida enam kui tuntud meetodil läbi /etc/crypttab. Isiklikult tõstan esile mõned selle meetodi kasutamisega seotud probleemid, nimelt faili lugemine alles pärast juurpartitsiooni laadimist (ühendamist)., mis mõjutab negatiivselt ZFS-i importi, eriti kui need loodi *_crypt-seadme partitsioonidest või partitsioonidest ehitatud mdadm-raididest. Me kõik teame, et saate LUKS-i konteineritel kasutada ka parted, eks? Ja ka teiste teenuste varajase käivitamise probleem, kui massiive veel pole, kuid kasutage Mul on juba midagi vaja (töötan rühmitatud Proxmox VE 5.x ja ZFS-iga iSCSI kaudu).

Natuke ZFSoverISCSI kohtaiSCSI töötab minu jaoks LIO kaudu ja tegelikult, kui iscsi sihtmärk käivitub ega näe ZVOL-seadmeid, eemaldab see need lihtsalt konfiguratsioonist, mis takistab külalissüsteemide käivitamist. Seega kas json-faili varukoopia taastamine või iga VM-i jaoks identifikaatoritega seadmete käsitsi lisamine, mis on lihtsalt kohutav, kui selliseid masinaid on kümneid ja igal konfiguratsioonil on rohkem kui 1 ketas.

Ja teine ​​küsimus, mida ma kaalun, on see, kuidas dekrüpteerida (see on artikli põhipunkt). Ja me räägime sellest allpool, mine alla!

Kõige sagedamini kasutatakse Internetis võtmefaili (lisatakse enne seda pesasse käsuga - cryptsetup luksAddKey) või harvadel eranditel (venekeelses Internetis on väga vähe teavet) - skripti decrypt_derived asub /lib/cryptsetup/script/ (muidugi on ka teisi viise, aga mina kasutasin neid kahte, mis olid artikli aluseks). Püüdsin ka pärast taaskäivitamist täieliku autonoomse kaasamise poole, ilma konsoolis täiendavate käskudeta, et kõik minu jaoks korraga “üles lendaks”. Seetõttu, miks oodata? —

Alustame!

Oletame, et süsteem, nagu Debian, on installitud sda3_crypt krüptopartitsioonile ja tosinale kettale, mis on valmis krüpteerimiseks ja teie südame sisuks loomiseks. Meil on sda3_crypt avamiseks parool (parool) ja just sellelt partitsioonilt eemaldame töötava (dekrüptitud) süsteemi paroolist "räsi" ja lisame selle ülejäänud ketastele. Kõik on elementaarne, konsoolis käivitame:

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

kus X on meie kettad, partitsioonid jne.

Pärast ketaste krüptimist meie paroolifraasist "räsi" abil peate välja selgitama UUID või ID - olenevalt sellest, kes on millega harjunud ja millega. Võtame andmed vastavalt /dev/disk/by-uuid ja by-id.

Järgmine samm on failide ja miniskriptide ettevalmistamine funktsioonide jaoks, mida me vajame, jätkame:

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/

далее

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

Faili ../dekrüpteerimise sisu

#!/bin/sh

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

далее

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

../partcopy sisu

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

natuke rohkem

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

Sisu ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

ja viimaseks, enne update-initramfs, peate redigeerima faili /etc/initramfs-tools/scripts/local-top/cryptroot, alustades realt ~360, koodilõik allpool

Originaal


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

ja viige see sellele vormile

Redigeeritud


                # 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

Pange tähele, et siin saab kasutada kas UUID-d või ID-d. Peaasi, et /etc/initramfs-tools/modules lisatakse HDD / SSD seadmete jaoks vajalikud draiverid. Käsuga saate teada, millist draiverit kasutatakse udevadm info -a -n /dev/sdX | egrep 'looking | DRIVER'.

Nüüd, kui oleme valmis ja kõik failid paigas, käivitage update-initramfs -u -k kõik -v, metsaraie ei tohi olla meie skriptide täitmisvead. Taaskäivitame, sisestame parooli ja ootame natuke, olenevalt ketaste arvust. Järgmisena käivitub süsteem ja käivitamise viimases etapis, nimelt pärast juurpartitsiooni "monteerimist", käivitatakse käsk partprobe - see otsib ja korjab üles kõik loodud partitsioonid LUKS-i seadmetes ja mis tahes massiivides, olgu see siis ZFS või mdadm, pannakse kokku probleemideta! Ja seda kõike enne laadimist põhiteenused ja teenused, mis neid kettaid/massiive vajavad.

uuendus1: Kuidas märganud AEP, see meetod töötab ainult LUKS1 puhul.

Allikas: www.habr.com

Lisa kommentaar