A LUKS konténer dekódolása a rendszer indításakor.

Mindenkinek jó napot és jó estét! Ez a bejegyzés hasznos lesz azoknak, akik LUKS adat titkosítást használnak, és diskek dekripkelését szeretnék végezni Linuxon (Debian, Ubuntu) a root partíció dekripkelése során.Ilyen információt az interneten nem tudtam találni.

Nemrégiben, a polcokon található lemezek számának növekedésével, szembesültem azzal a problémával, hogy diskek dekripkelése túlságosan is ismert módszerrel történik az /etc/crypttab fájl segítségével. Személy szerint több problémát emelnék ki e módszer használatával kapcsolatban, nevezetesen, hogy a fájl csak a root partíció betöltése (mount) után olvasható,ami kedvezőtlen hatással van a ZFS importálására, különösen, ha az *_crypt eszközök partícióiból, vagy mdadm tömbökből álltak össze, amelyeket szintén partíciókból alakítottak ki. Mindenki tudja, hogy a LUKS tartályokon használhatók a parted parancsok? Illetve van egy másik probléma is, amikor más szolgáltatások korai indítása történik, amikor még nincsenek tömbök, de használni már szükség van valamire (a Proxmox VE 5.x és ZFS over iSCSI klaszterrel dolgozom).

Egy kicsit a ZFS over iSCSI-ról.Az iSCSI nálam az LIO-n keresztül működik, és amikor az iscsi célpont 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ég rendszerek indítását. Innentől kezdve csak vagy a json fájl biztonsági mentésének helyreállítása, vagy a VM-ek azonosítóival rendelkező eszközök manuális hozzáadása marad, ami rémes, amikor ilyen gépekből tucatnyi van, és minden konfigurációban több mint egy disk található.

A második kérdés, amelyet meg fogok vizsgálni, az, hogy mivel végezzük a dekripkelést (ez a cikk kulcsfontosságú pontja). Erről alább fogunk beszélni, tarts velünk!

Leggyakrabban az interneten kulcsfájlt használnak (amelyet természetesen előzőleg a cryptsetup luksAddKey parancs segítségével a helyére kellett tenni), vagy ritka kivételekben (a magyar nyelvű interneten nagyon szegényes az információ) – a decrypt_derived szkriptet, amely a /lib/cryptsetup/script/ mappában található (természetesen vannak más módszerek is, de én pontosan ezeket a kettőt használtam, ami a cikk alapját képezi). Emellett törekedtem a teljes autonóm indításra a rendszer újraindulása után, bármilyen további konzolos parancs nélkül, hogy minden azonnal "futni tudjon". Szóval, miért várjunk? –

Kezdjünk hozzá!

Tegyük fel, hogy egy Debian rendszer van telepítve a crypto-partíción, az sda3_crypt-en, és van egy tucat lemezünk, amelyek készen állnak a titkosításra, és bármire, amire csak szükség van. Van egy kulcskifejezésünk (passphrase) az sda3_crypt feloldásához, és pontosan erről a partícióról fogunk a futó (dekódolt) rendszeren „hash”-t készíteni a jelszóról, és hozzáadni a többi lemezhez. Minden egyszerű, a konzolba írjuk:

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

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

A lemezek „hash”-elésével a kulcskifejezésünktől most meg kell tudnunk az UUID-t vagy az ID-t - attól függ, ki mit részesít előnyben. Az adatokat az /dev/disk/by-uuid és by-id könyvtárakból vesszük.

A következő lépés a szükséges funkciók működéséhez szükséges fájlok és mini-scriptek előkészítése, kezdjük el:

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ább

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

A tartalom .. /decrypt

#!/bin/sh

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

tovább

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

A tartalom .. /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"

még egy kicsit

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

A tartalom .. /partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

és végül, az update-initramfs előtt szerkesztenünk kell a fájlt /etc/initramfs-tools/scripts/local-top/cryptroot, a ~360. sor környékén, lásd az alábbi kódrészletet

Eredeti


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

és így alakítjuk át

Szerkesztett


                # 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

Felhívjuk figyelmét, hogy itt vagy UUID-t, vagy ID-t használhatunk. A lényeg, hogy a szükséges HDD/SSD meghajtók a /etc/initramfs-tools/modules könyvtárban legyenek. A használt meghajtói információk a következő paranccsal találhatóak: udevadm info -a -n /dev/sdX | egrep ‘looking|DRIVER’.

Most, hogy végeztünk, és minden fájl a helyén van, indítsuk el update-initramfs -u -k all -v, a naplózásban nem kell, hogy a scriptjeink végrehajtásakor hibák legyenek. Újraindítjuk, beírjuk a kulcskifejezést, és egy kicsit várunk, a lemezek számától függően. Ezután a rendszer elindul, és a rendszerindítás végső fázisában, nevezetesen a root-partíció „mounting”-ja után, végrehajtja a partprobe parancsot - ez megtalálja és csatlakoztatja az összes létrehozott partíciót a LUKS eszközökön, és bármilyen tömb, akár ZFS, akár mdadm, gond nélkül összeáll! Mindez a szolgáltatások és szolgáltatások indítása előtt, amelyeknek ezekre a lemezekre/tömbökre szükségük van. update1

: HogyanAEP észrevettem , ez a módszer csak a LUKS1-re működik.Mindenkinek jó napot, jó estét! Ez a bejegyzés hasznos lesz azok számára, akik LUKS adatokat titkosítanak, és le szeretnék bontani a lemezeket Linuxon (Debian, Ubuntu) a root partíció dekódolása során.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster