Të gjithëve një ditë të mbarë, natë! Ky postim do të jetë i dobishëm për ata që përdorin enkriptimin e të dhënave LUKS dhe duan të kryejnë dekodimin e disqeve nën Linux (Debian, Ubuntu) në fazën e dekodimit të seksionit root. Dhe nuk kam arritur të gjej një informacion të tillë në internet.
Së fundmi, me rritjen e numrit të disqeve në raft, u përballa me problemin e dekodimit të disqeve duke përdorur metodën e njohur përmes /etc/crypttab. Personalish, shoh disa probleme me përdorimin e kësaj metode, konkretisht se ky skedar lexohen vetëm pas ngarkesës (mount) së seksionit root, gjë që ndikon negativisht në importimin e ZFS, veçanërisht nëse ato janë ndërtuar nga seksione në pajisjen *_crypt, ose raid mdadm gjithashtu të ndërtuara nga seksione. Ne të gjithë e dimë se mund të përdorim parted në kontejnerët LUKS? Dhe gjithashtu problemi i fillimit të hershëm të shërbimeve të tjera, kur masivat ende nuk ekzistojnë, por të përdorë më duhet tashmë (punoj me Proxmox VE 5.x të klustruar dhe ZFS mbi iSCSI).
Pak për ZFS over iSCSIiSCSI funksionon për mua përmes LIO, dhe realisht kur niset iscsi-target dhe nuk sheh pajisjet ZVOL, ato thjesht i heq nga konfigurimi, e cila nuk i lejon sistemet mysafire të ngarkohen. Nga kjo, ose rikthimi i një bërthame json skedari, ose shtimi manual i pajisjeve me identifikatorët e çdo VM, që është vërtet tmerr, kur ka dhjetëra makina dhe në konfigurimin e secilës më shumë se 1 disk.
Dhe pyetja e dytë që do të shqyrtoj, është se me çfarë do të bëhet dekodimi (ky është një pikë kyçe e artikullit). Dhe për këtë do të flasim më poshtë, hyni në nënkategori!
MĂ« shpesh nĂ« hapĂ«sirat e internetit pĂ«rdoren çelĂ«sat e skedarit (natyrisht tĂ« shtuar mĂ« parĂ« nĂ« slotin me komandĂ«n â cryptsetup luksAddKey), ose nĂ« raste tĂ« rralla (nĂ« internetin nĂ« gjuhĂ«n ruse ka informacion tĂ« kufizuar) â skripti decrypt_derived, qĂ« ndodhet nĂ« /lib/cryptsetup/script/ (sigurisht, ka edhe mĂ«nyra tĂ« tjera, por unĂ« kam pĂ«rdorur kĂ«to dy, qĂ« i hodha nĂ« bazĂ« tĂ« artikullit). Po ashtu, synoja njĂ« aktivizim tĂ« plotĂ« autonom pas rinisjeve, pa asnjĂ« komandĂ« shtesĂ« nĂ« konsolĂ«, qĂ« gjithçka tĂ« "fluturojĂ«" menjĂ«herĂ«. Prandaj, pse tĂ« presim? â
Le të fillojmë!
Supozoni njĂ« sistem, pĂ«r shembull Debian, i instaluar nĂ« ndarjen e kriptuar sda3_crypt dhe dhjetĂ« disqe tĂ« gatshme pĂ«r kriptim dhe krijimin e çfarĂ«do qĂ« dĂ«shiron. Ne kemi njĂ« frazĂ« kyçe (passphrase) pĂ«r tĂ« çelur sda3_crypt dhe pikĂ«risht nga kjo ndarje do tĂ« marrim "hash" nga fjalĂ«kalimi dhe do ta shtojmĂ« nĂ« disqet e tjera. ĂshtĂ« shumĂ« e thjeshtĂ«, nĂ« konsolĂ« zbatojmĂ«:
/lib/cryptsetup/scripts/decrypt_derived sda3_crypt | cryptsetup luksFormat /dev/sdXku X janë diskët tanë, ndarjet etj.
Pas kriptimit të disqeve me "hash" nga fraza jonë kyçe, është e nevojshme të dihet UUID ose ID - sipas asaj çfarë preferon kush. Marrim të dhënat nga /dev/disk/by-uuid dhe by-id përkatësisht.
Hapi tjetër është përgatitja e skedave dhe mini-skripteve për funksionet që na nevojiten, le të fillojmë:
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/më pas
touch /etc/initramfs-tools/hooks/decrypt && chmod +x /etc/initramfs-tools/hooks/decryptPërmbajtja e ../decrypt
#!/bin/sh
cp -p /lib/cryptsetup/scripts/decrypt_derived "$DESTDIR/bin/decrypt_derived"më pas
touch /etc/initramfs-tools/hooks/partcopy && chmod +x /etc/initramfs-tools/hooks/partcopyPërmbajtja e ../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"pak më shumë
touch /etc/initramfs-tools/scripts/local-bottom/partprobe && chmod +x /etc/initramfs-tools/scripts/local-bottom/partprobePërmbajtja e ../partprobe
#!/bin/sh
$DESTDIR/bin/partprobedhe e fundit, para update-initramfs, duhet të redaktohet skedari /etc/initramfs-tools/scripts/local-top/cryptroot, duke filluar nga rreshti ~360, pjesa e kodit më poshtë
Originali
# decrease $count by 1, apparently last try was successful.
count=$(( $count - 1 ))
message "cryptsetup ($crypttarget): set up successfully"
break
dhe e çojmë në këtë formë
E redaktuar
# 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"
breakVini re se kĂ«tu mund tĂ« pĂ«rdoret ose UUID ose ID. E rĂ«ndĂ«sishme Ă«shtĂ« qĂ« driverĂ«t e nevojshĂ«m pĂ«r pajisjet HDD/SSD tĂ« jenĂ« shtuar nĂ« /etc/initramfs-tools/modules. Mund tĂ« mĂ«soni driverin qĂ« po pĂ«rdoret me komandĂ«n udevadm info -a -n /dev/sdX | egrep âlooking|DRIVERâ.
Tani, kur kemi përfunduar dhe të gjitha skedat janë në vend, fillojmë update-initramfs -u -k all -v, në regjistrim nuk duhet të ketë gabime në ekzekutimin e skripteve tona. Rindiznim, futim frazën kyçe dhe presim pak, në varësi të numrit të disqeve. Më pas sistemi do të niset dhe në fazën përfundimtare të nisjes, pikërisht pas "mounting" të ndarjes root, do të ekzekutohet komanda partprobe - ajo do të gjejë dhe do të lidhë të gjitha ndarjet e krijuara në pajisjet LUKS dhe çdo masiv, qoftë ZFS apo mdadm do të réunoheshin pa probleme! Dhe gjithë kjo para ngarkimit slëvizjeve dhe shërbimeve kryesore, të cilat kërkojnë këto disqe/masive.
update1: Si , kjo mënyrë funksionon vetëm për LUKS1.
Burimi: habr.com
