LUKS konteinera atÅ”ifrÄ“Å”ana sistēmas sāknÄ“Å”anas laikā

Labu dienu un nakti visiem! Å Ä« ziņa bÅ«s noderÄ«ga tiem, kas izmanto LUKS datu Å”ifrÄ“Å”anu un vēlas atÅ”ifrēt diskus operētājsistēmā Linux (Debian, Ubuntu) saknes nodalÄ«juma atÅ”ifrÄ“Å”anas posmi. Un es nevarēju atrast Ŕādu informāciju internetā.

Pavisam nesen, palielinoties disku skaitam plauktos, es saskāros ar disku atÅ”ifrÄ“Å”anas problēmu, izmantojot vairāk nekā labi zināmo metodi, izmantojot /etc/crypttab. PersonÄ«gi es izceļu dažas problēmas, kas saistÄ«tas ar Ŕīs metodes izmantoÅ”anu, proti, fails tiek lasÄ«ts tikai pēc saknes nodalÄ«juma ielādes (montāžas)., kas negatÄ«vi ietekmē ZFS importÄ“Å”anu, jo Ä«paÅ”i, ja tie tika veidoti no starpsienām *_crypt ierÄ«cē vai mdadm reidi, kas veidoti arÄ« no nodalÄ«jumiem. Mēs visi zinām, ka LUKS konteineros var izmantot atdalÄ«tu, vai ne? Un arÄ« citu servisu agrÄ«nas palaiÅ”anas problēma, kad vēl nav masÄ«vu, bet izmantot Man jau kaut ko vajag (es strādāju ar klasterizētu Proxmox VE 5.x un ZFS, izmantojot iSCSI).

Mazliet par ZFSoverISCSIiSCSI man darbojas caur LIO, un patiesÄ«bā, kad iscsi target startē un neredz ZVOL ierÄ«ces, tas vienkārÅ”i noņem tās no konfigurācijas, kas neļauj viesu sistēmām palaist. Tādējādi vai nu jāatjauno json faila dublējums, vai manuāli jāpievieno ierÄ«ces ar identifikatoriem katrai virtuālajai maŔīnai, kas ir vienkārÅ”i briesmÄ«gi, ja ir desmitiem Ŕādu maŔīnu un katrā konfigurācijā ir vairāk nekā 1 disks.

Un otrs jautājums, ko es apsvērÅ”u, ir tas, kā atÅ”ifrēt (tas ir raksta galvenais punkts). Un mēs par to runāsim tālāk, ejiet zemāk!

Visbiežāk internetā tiek izmantots atslēgas fails (paÅ”i pievienots slotam pirms tam ar komandu - cryptsetup luksAddKey) vai retos izņēmumos (krievu valodā internetā ir ļoti maz informācijas) - decrypt_derived skripts. atrodas /lib/cryptsetup/script/ (protams, ir arÄ« citi veidi, bet es izmantoju Å”os divus, kas veidoja raksta pamatu). Es arÄ« tiecos pēc pilnÄ«gas autonomas iekļauÅ”anas pēc pārstartÄ“Å”anas, bez papildu komandām konsolē, lai man viss uzreiz "uzlidotu". Tāpēc kāpēc gaidÄ«t? ā€”

Sāksim!

Pieņemsim, ka sistēma, piemēram, Debian, ir instalēta sda3_crypt kriptogrāfijas nodalÄ«jumā un duci disku, kas ir gatavi Å”ifrÄ“Å”anai un izveidoÅ”anai pēc jÅ«su sirds patikas. Mums ir ieejas frāze (paroles frāze), lai atbloķētu sda3_crypt, un tieÅ”i no Ŕī nodalÄ«juma mēs noņemsim ā€œjaucējuā€ no paroles darboÅ”ajā (atÅ”ifrētajā) sistēmā un pievienosim to pārējiem diskiem. Viss ir elementāri, konsolē mēs izpildām:

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

kur X ir mūsu diski, nodalījumi utt.

Pēc disku Å”ifrÄ“Å”anas ar "jauktu" no mÅ«su ieejas frāzes, jums ir jānoskaidro UUID vai ID - atkarÄ«bā no tā, kurÅ” ir pieradis un ko. Mēs iegÅ«stam datus attiecÄ«gi no /dev/disk/by-uuid un by-id.

Nākamais solis ir failu un mini skriptu sagatavoŔana funkcijām, kas mums jāstrādā, turpināsim:

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/

tālāk

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

../decrypt saturs

#!/bin/sh

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

tālāk

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

../partcopy saturs

#!/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"

mazliet vairāk

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

Saturs ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

un pēdējais, pirms update-initramfs, jums ir jārediģē /etc/initramfs-tools/scripts/local-top/cryptroot fails, sākot no rindiņas ~360, koda fragments zemāk

Oriģināls


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

un nogādājiet to Ŕajā formā

Rediģēts


                # 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

Ņemiet vērā, ka Å”eit var izmantot UUID vai ID. Galvenais ir tas, ka nepiecieÅ”amie draiveri HDD / SSD ierÄ«cēm tiek pievienoti /etc/initramfs-tools/modules. Ar komandu varat uzzināt, kurÅ” draiveris tiek izmantots udevadm info -a -n /dev/sdX | egrep 'meklē | DRIVER'.

Tagad, kad esam pabeiguÅ”i un visi faili ir savās vietās, palaidiet update-initramfs -u -k all -v, mežizstrādē nedrÄ«kst bÅ«t mÅ«su skriptu izpildes kļūdas. Mēs atsāknējam, ievadām ieejas frāzi un nedaudz pagaidām, atkarÄ«bā no disku skaita. Pēc tam sistēma sāks darboties un pēdējā palaiÅ”anas posmā, proti, pēc saknes nodalÄ«juma ā€œuzmontÄ“Å”anasā€, tiks izpildÄ«ta komanda partprobe - tā atradÄ«s un uzņems visus izveidotos nodalÄ«jumus LUKS ierÄ«cēs un jebkuros masÄ«vos, neatkarÄ«gi no tā, vai tas ir ZFS vai mdadm, tiks samontēts bez problēmām! Un tas viss pirms iekrauÅ”anas pamatpakalpojumi un pakalpojumi, kuriem nepiecieÅ”ami Å”ie diski/masÄ«vi.

atjauninājums1: Kā pamanīju AEP, Ŕī metode darbojas tikai LUKS1.

Avots: www.habr.com

Pievieno komentāru