Dekodimi i enkriptimit LUKS gjatë ngarkimit të sistemit

Përshëndetje të gjithë! Ky post 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ë Linux (Debian, Ubuntu) në fazën e dekodimit të pjesës root. Nuk kam arritur të gjej informacion të tillë në internet.

Së fundmi, me rritjen e numrit të disqeve në rafta, u përballa me problemin e dekodimit të disqeve duke përdorur metodën e njohur përmes /etc/crypttab. Personalish, unë identifikoj disa probleme me përdorimin e kësaj metode, konkretisht se skedari është i lexueshëmvetëm pas ngarkimit (mount) të pjesës root , çka ndikon negativisht në importin e ZFS, sidomos nëse janë ndërtuar nga pjesë në pajisje *_crypt, ose raid të krijuar gjithashtu nga pjesë. Të gjithë ne e dimë se mund të përdorim parted në enkriptimet LUKS? përdorimi Dhe gjithashtu problemi i nisjes së hershme të shërbimeve të tjera, kur masat nuk janë akoma të pranishme, por

gjithsesi është i nevojshëm (unë punoj me Proxmox VE 5.x të klasterizuar dhe ZFS mbi iSCSI).Pak për ZFSoverISCSI

Pyti dy shpejt, që do të shqyrtoj është se si të prodhojmë dekriptimin (kjo është pika kyçe e artikullit). Dhe për këtë do të flasim më poshtë, hidhuni poshtë për të lexuar më shumë!

NĂ« shumicĂ«n e rasteve nĂ« hapĂ«sirĂ«n e internetit pĂ«rdoret njĂ« çelĂ«s (sigurisht, i shtuar mĂ« parĂ« nĂ« slot nga komanda — cryptsetup luksAddKey), ose nĂ« raste tĂ« pĂ«rjashta (nĂ« internetin nĂ« gjuhĂ«n shqipe ka shumĂ« pak informacion) — skripta decrypt_derived, e cila ndodhet nĂ« /lib/cryptsetup/script/ (natyrisht, ka edhe mĂ«nyra tĂ« tjera, por unĂ« pĂ«rdora pikĂ«risht kĂ«to dy, qĂ« ndihmuan nĂ« formimin e artikullit). Gjithashtu, unĂ« synoja qĂ« gjithçka tĂ« fillonte automatikisht pas rinisjes, pa asnjĂ« komandĂ« shtesĂ« nĂ« konsolĂ«, nĂ« mĂ«nyrĂ« qĂ« gjithçka tĂ« „ngrihej“ menjĂ«herĂ«. Prandaj, pĂ«rse tĂ« presim? —

Të fillojmë!

Ne supozojmë një sistem, për shembull Debian, të instaluar në ndarjen crypto sda3_crypt dhe një duzinë hard drives, të gatshme për enkriptim dhe krijimin e asaj që do të dëshironim. Ne kemi një frazë çelësi (passphrase) për të zhbllokuar sda3_crypt dhe nga kjo ndarje do të marrim 'hash'-in nga passwordi dhe do ta shtojmë në hard drives e tjera. Gjithçka është elementare, në konsolë ne ekzekutojmë:

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

ku X janë hard drives, ndarjet, etj.

Pasi të kemi enkriptuar hard drives me 'hash'-in nga fraza jonë çelësi, është e nevojshme të zbulojmë UUID-në, ose ID-në - duke parë se kush është mësuar me çfarë. Marrim të dhënat nga /dev/disk/by-uuid dhe by-id përkatësisht.

Hapi tjetër është përgatitja e skedarëve dhe mini-skripteve për funksionet që na duhen, 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/decrypt

Përmbajtja ../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/partcopy

Përmbajtja ../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/partprobe

Përmbajtja ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

Dhe e fundit, para update-initramfs, duhet të redaktoni skedarin /etc/initramfs-tools/scripts/local-top/cryptroot, duke filluar nga rreshti ~360, pjesa e kodit më poshtë

Origjinali


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

dhe e sjellim 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"
                break

Kujdes, se kĂ«tu mund tĂ« pĂ«rdorni ose UUID, ose ID. E rĂ«ndĂ«sishme Ă«shtĂ« tĂ« sigurohet qĂ« drejtuesit e nevojshĂ«m pĂ«r pajisjet HDD/SSD tĂ« jenĂ« shtuar nĂ« /etc/initramfs-tools/modules. TĂ« njohim drejtuesin qĂ« po pĂ«rdoret mund tĂ« bĂ«het me komandĂ«n udevadm info -a -n /dev/sdX | egrep ‘looking|DRIVER’.

Tani, kur kemi mbaruar dhe tĂ« gjitha skedarĂ«t janĂ« nĂ« vend, fillojmĂ« update-initramfs -u -k all -v, nĂ« logim nuk duhet tĂ« ketĂ« gabime gjatĂ« ekzekutimit tĂ« skripteve tona. Rindizemi, futim fjalĂ«kalimin dhe presim pak, nĂ« varĂ«si tĂ« numrit tĂ« disqeve. MĂ« pas sistemi do tĂ« bootojĂ« dhe nĂ« fazĂ«n e fundit tĂ« nisjes, pikĂ«risht pas ‘mounting’ tĂ« ndarjes root, do tĂ« ekzekutohet komanda partprobe — ajo do tĂ« gjejĂ« dhe lidhĂ« tĂ« gjitha ndarjet e krijuara nĂ« pajisjet LUKS dhe çdo array, qofshin ato ZFS ose mdadm, do tĂ« mblidhen pa probleme! Dhe gjithçka kjo para ngarkimit tĂ« shĂ«rbimeve dhe sistemeve kryesore, tĂ« cilĂ«ve u nevojiten kĂ«to disqe/array.

update1: Si vërejti AEP, ky metodë funksionon vetëm për LUKS1.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster