LUKS կոնտեյների վերծանում համակարգի բեռնման ժամանակ

Բարի օր և գիշեր բոլորին: Այս գրառումը օգտակար կլինի նրանց համար, ովքեր օգտագործում են LUKS տվյալների կոդավորումը և ցանկանում են ապակոդավորել սկավառակները Linux-ի տակ (Debian, Ubuntu) արմատային բաժանման վերծանման փուլը. Եվ ես չկարողացա գտնել նման տեղեկատվություն ինտերնետում:

Բոլորովին վերջերս, դարակներում սկավառակների քանակի ավելացմամբ, ես հանդիպեցի սկավառակների ապակոդավորման խնդրին՝ օգտագործելով ավելի քան հայտնի մեթոդը /etc/crypttab-ի միջոցով: Անձամբ ես ընդգծում եմ այս մեթոդի օգտագործման մի քանի խնդիր, այն է, որ ֆայլը կարդացվում է միայն արմատային միջնորմը բեռնելուց (մոնտաժելուց) հետո, ինչը բացասաբար է անդրադառնում ZFS ներմուծման վրա, մասնավորապես, եթե դրանք հավաքվել են *_crypt սարքի միջնորմներից կամ mdadm արշավանքներից, որոնք հավաքվել են նաև միջնորմներից: Մենք բոլորս գիտենք, որ դուք կարող եք օգտագործել մասնատված LUKS տարաների վրա, այնպես չէ՞: Եվ նաև այլ ծառայությունների վաղաժամ մեկնարկի խնդիրը, երբ դեռ զանգվածներ չկան, և օգտագործումը Ինձ արդեն ինչ-որ բան է պետք (ես աշխատում եմ կլաստերային Proxmox VE 5.x-ի և ZFS-ի հետ iSCSI-ի միջոցով):

Մի փոքր ZFSoverISCSI-ի մասինiSCSI-ն ինձ մոտ աշխատում է LIO-ի միջոցով, և փաստորեն, երբ iscsi թիրախը սկսում է և չի տեսնում ZVOL սարքերը, այն պարզապես հեռացնում է դրանք կոնֆիգուրացիայից, ինչը թույլ չի տալիս հյուր համակարգերի բեռնումը: Հետևաբար, կա՛մ վերականգնելով json ֆայլը, կա՛մ ձեռքով ավելացնելով սարքեր յուրաքանչյուր VM-ի նույնացուցիչներով, ինչը պարզապես սարսափելի է, երբ կան տասնյակ նման մեքենաներ, և յուրաքանչյուր կոնֆիգուրացիա ունի 1-ից ավելի սկավառակ:

Եվ երկրորդ հարցը, որը ես կքննարկեմ, այն է, թե ինչպես կարելի է վերծանել (սա հոդվածի հիմնական կետն է): Եվ մենք կխոսենք այս մասին ստորև, անցեք կտրվածքին:

Ամենից հաճախ ինտերնետում նրանք օգտագործում են բանալի ֆայլ (որը ավտոմատ կերպով ավելացվել է բնիկին հրամանով - cryptsetup luksAddKey), կամ հազվադեպ բացառություններով (ռուսալեզու ինտերնետում շատ քիչ տեղեկատվություն կա) - decrypt_derived script, որը գտնվում է ք. /lib/cryptsetup/script/ (իհարկե, այլ ճանապարհներ կան, բայց ես օգտագործել եմ այս երկուսը, որոնք հիմք են հանդիսացել հոդվածի համար)։ Ես նաև ձգտում էի վերագործարկումից հետո լիարժեք ինքնավար ակտիվացման, առանց որևէ լրացուցիչ հրամանների վահանակում, որպեսզի ինձ համար ամեն ինչ անմիջապես «հեռանա»: Հետևաբար, ինչո՞ւ սպասել: —

Եկեք սկսենք!

Մենք ենթադրում ենք, որ համակարգ, օրինակ՝ Debian, տեղադրված է sda3_crypt կրիպտո միջնորմի վրա և տասնյակ սկավառակներ, որոնք պատրաստ են գաղտնագրելու և ստեղծելու այն, ինչ ուզում ես: Մենք ունենք բանալի արտահայտություն (գաղտնաբառ) sda3_crypt-ը բացելու համար և հենց այս բաժնից է, որ մենք կհեռացնենք գաղտնաբառի «հեշը» գործող (գաղտնազերծված) համակարգի վրա և կավելացնենք այն այլ սկավառակների վրա: Ամեն ինչ տարրական է, վահանակում մենք կատարում ենք.

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

որտեղ X-ը մեր սկավառակներն են, միջնապատերը և այլն:

Սկավառակները մեր հիմնական արտահայտությունից հեշով գաղտնագրելուց հետո դուք պետք է պարզեք UUID-ը կամ ID-ն՝ կախված նրանից, թե ով ինչի է սովոր: Մենք տվյալներ ենք վերցնում համապատասխանաբար /dev/disk/by-uuid և by-id-ից:

Հաջորդ փուլը ֆայլերի և մինի-սկրիպտների պատրաստումն է այն գործառույթների համար, որոնք մենք պետք է աշխատենք, եկեք շարունակենք.

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/

далее

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

Բովանդակություն ../decrypt

#!/bin/sh

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

далее

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

Բովանդակություն ../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"

մի քիչ ավելի

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

Բովանդակություն ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

և վերջապես, մինչ update-initramfs-ը, դուք պետք է խմբագրեք ֆայլը /etc/initramfs-tools/scripts/local-top/cryptroot՝ սկսած ~360 տողից, ստորև ներկայացված կոդի մի հատվածը:

Original


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

և բերեք այն այս ձևի

Խմբագրվել է


                # 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

Նկատի ունեցեք, որ այստեղ կարող են օգտագործվել կամ UUID կամ ID: Գլխավորն այն է, որ HDD/SSD սարքերի համար անհրաժեշտ դրայվերներն ավելացվեն /etc/initramfs-tools/modules-ում։ Դուք կարող եք պարզել, թե որ դրայվերն է օգտագործվում հրամանով udevadm info -a -n /dev/sdX | egrep «փնտրում է|ՎԱՐՈՐԴ».

Այժմ, երբ մենք ավարտեցինք, և բոլոր ֆայլերը տեղում են, մենք աշխատում ենք update-initramfs -u -k all -v, անտառահատումների մեջ չպետք է լինի սխալներ մեր սցենարների կատարման մեջ: Մենք վերաբեռնում ենք, մուտքագրում ենք հիմնական արտահայտությունը և մի փոքր սպասում՝ կախված սկավառակների քանակից։ Հաջորդը, համակարգը կսկսվի և գործարկման վերջին փուլում, մասնավորապես, արմատային միջնորմը «մոնտաժելուց» հետո, կկատարվի partprobe հրամանը. mdadm, կհավաքվի առանց խնդիրների! Եվ այս ամենը բեռնումից առաջ հիմնական ծառայությունները, որոնք կարիք ունեն այս սկավառակների/զանգվածների:

թարմացում 1: Ինչպես նկատեց ԱԵՊ, այս մեթոդն աշխատում է միայն LUKS1-ի համար:

Source: www.habr.com

Добавить комментарий