LUKS-tároló visszafejtése a rendszerindításkor

Szép napot és éjszakát mindenkinek! Ez a bejegyzés hasznos lesz azok számára, akik LUKS adattitkosítást használnak, és szeretnék visszafejteni a lemezeket Linux alatt (Debian, Ubuntu) a gyökérpartíció visszafejtésének szakaszai. És nem találtam ilyen információt az interneten.

A közelmúltban, a polcokon lévő lemezek számának növekedésével belefutottam abba a problémába, hogy a lemezeket a több mint jól ismert módszerrel az /etc/crypttab segítségével dekódoljam. Személy szerint kiemelek néhány problémát ezzel a módszerrel, nevezetesen, hogy a fájl beolvasása folyamatban van csak a gyökérpartíció betöltése (csatolása) után, ami negatívan érinti a ZFS importálást, különösen akkor, ha azokat egy *_crypt eszköz partícióiból építették fel, vagy partíciókból épült mdadm raideket is. Mindannyian tudjuk, hogy LUKS konténereken is használhatod szétválasztva, igaz? És az egyéb szolgáltatások korai indításának problémája is, amikor még nincsenek tömbök, de használatához Már kell valami (fürtözött Proxmox VE 5.x-el és ZFS-sel dolgozom iSCSI-n keresztül).

Egy kicsit a ZFSoverISCSI-rőlAz iSCSI nekem a LIO-n keresztül működik, sőt, amikor az iscsi target elindul, és nem látja a ZVOL eszközöket, egyszerűen eltávolítja őket a konfigurációból, ami megakadályozza a vendégrendszerek indítását. Ezért vagy vissza kell állítani egy json-fájl biztonsági másolatát, vagy manuálisan kell hozzáadni az eszközöket azonosítókkal minden egyes virtuális géphez, ami egyszerűen szörnyű, ha több tucat ilyen gép van, és minden konfigurációhoz egynél több lemez tartozik.

A második kérdés, amelyet megfontolok, az, hogy hogyan kell visszafejteni (ez a cikk kulcspontja). És erről lentebb beszélünk, menj a vágás alá!

Az interneten leggyakrabban kulcsfájlt használnak (ezt megelőzően a - cryptsetup luksAddKey paranccsal önmaga hozzáadva a nyíláshoz), vagy ritka kivételek esetén (az orosz nyelvű interneten nagyon kevés információ található) - a decrypt_derived szkriptet. a /lib/cryptsetup/script/ könyvtárban található (persze van más mód is, de én ezt a kettőt használtam, ami a cikk alapját képezte). Törekedtem az újraindítások utáni teljes autonóm beépítésre is, minden további parancs nélkül a konzolban, hogy minden egyszerre „repüljön fel” nekem. Ezért minek várni? —

Kezdjük!

Tételezzünk fel egy olyan rendszert, mint a Debian, amely egy sda3_crypt kriptopartícióra van telepítve, és egy tucatnyi lemezre, amely készen áll a titkosításra és tetszés szerint létrehozva. Van egy jelmondatunk (passphrase) az sda3_crypt zárolásának feloldásához, és ebből a partícióból távolítjuk el a „hash”-t a futó (dekódolt) rendszer jelszavából, és adjuk hozzá a többi lemezhez. Minden elemi, a konzolon végrehajtjuk:

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

ahol X a lemezeink, partícióink stb.

Miután a jelmondatunkból "hash"-el titkosította a lemezeket, meg kell találnia az UUID-t vagy az azonosítót - attól függően, hogy ki mit és mit szokott. Az adatokat a /dev/disk/by-uuid és by-id fájlból vesszük.

A következő lépés a fájlok és miniszkriptek előkészítése a működéshez szükséges funkciókhoz, folytassuk:

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/

további

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

A ../decrypt tartalma

#!/bin/sh

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

további

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

A ../partcopy tartalma

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

néhány

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

Tartalom ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

és végül az update-initramfs előtt szerkesztenie kell az /etc/initramfs-tools/scripts/local-top/cryptroot fájlt, a ~360-as sortól kezdve, lenti kódrészlet.

Eredeti


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

és hozd ebbe a formába

Szerkesztette


                # 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

Vegye figyelembe, hogy itt UUID vagy ID használható. A lényeg az, hogy a HDD / SSD eszközökhöz szükséges illesztőprogramok hozzá legyenek adva az /etc/initramfs-tools/modules mappához. A paranccsal megtudhatja, hogy melyik illesztőprogramot használja udevadm info -a -n /dev/sdX | egrep 'néz|VEZETŐ'.

Most, hogy végeztünk, és az összes fájl a helyén van, futtassa update-initramfs -u -k all -v, a fakitermelésben nem szabad szkriptjeink végrehajtási hibái. Újraindítjuk, beírjuk a jelszót és várunk egy kicsit, a lemezek számától függően. Ezután a rendszer elindul, és az indítás utolsó szakaszában, vagyis a root partíció „csatolása” után a partprobe parancs végrehajtásra kerül - megkeresi és felveszi az összes létrehozott partíciót a LUKS eszközökön és bármilyen tömbön, legyen az ZFS vagy mdadm, gond nélkül össze lesz rakva! És mindezt betöltés előtt alapvető szolgáltatások és szolgáltatások, amelyeknek szükségük van ezekre a lemezekre/tömbökre.

update1: Hogyan észrevette AEP, ez a módszer csak a LUKS1 esetében működik.

Forrás: will.com

Hozzászólás