God dag, god kvÀll allihopa! Det hÀr inlÀgget kommer att vara anvÀndbart för dem som anvÀnder LUKS-datakryptering och vill avkoda diskar under Linux (Debian, Ubuntu) vid avkodningen av root-partitionen. Och sÄdan information har jag inte kunnat hitta pÄ internet.
Nyligen, med det ökande antalet diskar i hyllorna, stötte jag pÄ problemet med avkodning av diskar med hjÀlp av den mer Àn kÀnda metoden genom /etc/crypttab. Jag identifierar personligen flera problem med att anvÀnda denna metod, nÀmligen att filen lÀses endast efter att root-partitionen har laddats (mount), vilket negativt pÄverkar importen av ZFS, sÀrskilt om de har skapats frÄn partitioner pÄ *_crypt-enheten, eller mdadm RAID som ocksÄ byggdes frÄn partitioner. Vi vet ju alla att man kan anvÀnda parted pÄ LUKS-containrar? Och det finns ocksÄ problemet med tidig start av andra tjÀnster nÀr inte matriserna Àr klara, men anvÀnda nÄgot redan mÄste vara klart (jag arbetar med klusterbaserad Proxmox VE 5.x och ZFS över iSCSI).
Lite om ZFS över iSCSIiSCSI fungerar för mig genom LIO, och nÀr iscsi-targeten startar och inte ser ZVOL-enheter, tar den helt enkelt bort dem frÄn konfigurationen, vilket gör det omöjligt för gÀstsysten att starta. DÀrför antingen ÄterstÀllning av JSON-filens sÀkerhetskopia, eller manuell tillÀggning av enheter med identifierarna för varje VM, vilket Àr en mardröm nÀr man har tiotals sÄdana maskiner och i konfigurationen av varje mer Àn 1 disk.
Och den andra frÄgan som jag kommer att ta upp Àr hur man genomför avkodningen (detta Àr en nyckelpunkt i artikeln). Och om detta kommer vi att diskutera nedan, kom och titta!
Ofast anvĂ€nds nyckelfiler (naturligtvis först tillagda i slotten med kommandot â cryptsetup luksAddKey), eller i sĂ€llsynta undantag (det finns mycket lite information pĂ„ rysksprĂ„kiga internet) â skriptet decrypt_derived, som ligger i /lib/cryptsetup/script/ (sjĂ€lvklart finns det ocksĂ„ andra metoder, men jag anvĂ€nde just dessa tvĂ„, vilket utgör grunden för artikeln). Jag strĂ€vade ocksĂ„ efter en helt autonom aktivering efter omstarter, utan nĂ„gon ytterligare kommandon i konsolen, sĂ„ att allt skulle "flyga" direkt. SĂ„ varför vĂ€nta? â
LÄt oss börja!
Vi förestÀller oss ett system, till exempel Debian, installerat pÄ kryptodelen sda3_crypt och ett dussin diskar redo att krypteras och skapa vad som helst. Vi har en nyckelfras (passphrase) för att lÄsa upp sda3_crypt, och frÄn denna partition kommer vi att ta "hashen" av lösenordet pÄ det körande (avkrypterade) systemet och lÀgga till det pÄ de andra diskarna. Allt Àr enkelt, vi kör följande i konsolen:
/lib/cryptsetup/scripts/decrypt_derived sda3_crypt | cryptsetup luksFormat /dev/sdXdÀr X Àr vÄra diskar, partitioner osv.
Efter att ha krypterat diskarna med "hashen" av vÄr nyckelfras, behöver vi veta UUID eller ID - beroende pÄ vad man Àr van vid. Vi tar uppgifter frÄn /dev/disk/by-uuid och by-id respektive.
NÀsta steg Àr att förbereda filer och miniskript för att arbeta med de funktioner vi behöver, lÄt oss börja:
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/vidare
touch /etc/initramfs-tools/hooks/decrypt && chmod +x /etc/initramfs-tools/hooks/decryptInnehÄllet i ../decrypt
#!/bin/sh
cp -p /lib/cryptsetup/scripts/decrypt_derived "$DESTDIR/bin/decrypt_derived"vidare
touch /etc/initramfs-tools/hooks/partcopy && chmod +x /etc/initramfs-tools/hooks/partcopyInnehÄllet i ../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"lite mer
touch /etc/initramfs-tools/scripts/local-bottom/partprobe && chmod +x /etc/initramfs-tools/scripts/local-bottom/partprobeInnehÄllet i ../partprobe
#!/bin/sh
$DESTDIR/bin/partprobeoch sist, innan update-initramfs, mÄste vi redigera filen /etc/initramfs-tools/scripts/local-top/cryptroot, med början frÄn rad ~360, koden nedan
Original
# decrease $count by 1, apparently last try was successful.
count=$(( $count - 1 ))
message "cryptsetup ($crypttarget): set up successfully"
break
och konverterar den till detta format
Redigerad
# 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"
breakObservera att vi hÀr kan anvÀnda antingen UUID eller ID. Det viktigaste Àr att de nödvÀndiga drivrutinerna för HDD/SSD-enheterna Àr tillagda i /etc/initramfs-tools/modules. För att ta reda pÄ vilken drivrutin som anvÀnds kan man anvÀnda kommandot udevadm info -a -n /dev/sdX | egrep 'looking|DRIVER'.
Nu nĂ€r vi Ă€r klara och alla filer Ă€r pĂ„ plats kör vi update-initramfs -u -k all -v, i loggningen ska det inte finnas nĂ„gra fel i körningen av vĂ„ra skript. Vi startar om, anger nyckelfrasen och vĂ€ntar en stund, beroende pĂ„ antalet diskar. DĂ€refter startar systemet och i slutskedet av starten, efter "monteringen" av root-partitionen, kommer kommandot partprobe att köras â det kommer att hitta och koppla alla skapade partitioner pĂ„ LUKS-enheter och alla arrayer, oavsett om det Ă€r ZFS eller mdadm, kommer att sĂ€ttas ihop utan problem! Och allt detta innan de grundlĂ€ggande tjĂ€nsterna och servrarna som behöver dessa diskar/arrayer. update1
: Hurhar jag mÀrkt Windows, PowerShell och lÄnga sökvÀgar
KĂ€lla: habr.com
