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/sdXahol 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/decryptA 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/partcopyA 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/partprobeA 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"
breakFelhí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 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
