Malĉifri LUKS-ujon ĉe la lanĉa tempo de la sistemo

Bonan tagon kaj nokton al ĉiuj! Ĉi tiu afiŝo estos utila por tiuj, kiuj uzas LUKS-datumĉifradon kaj volas deĉifri diskojn sub Linukso (Debian, Ubuntu) sur etapoj de malĉifri la radikan sekcion. Kaj mi ne povis trovi tiajn informojn en la interreto.

Pli lastatempe, kun la pliiĝo de la nombro da diskoj en la bretoj, mi renkontis la problemon de deĉifri diskojn per la pli ol konata metodo per /etc/crypttab. Persone, mi reliefigas kelkajn problemojn kun uzado de ĉi tiu metodo, nome ke la dosiero estas legita nur post ŝarĝo (muntado) la radikdisko, kiu negative influas ZFS-importadon, precipe se ili estis konstruitaj el sekcioj sur *_crypt aparato, aŭ mdadm-atakoj konstruitaj ankaŭ el sekcioj. Ni ĉiuj scias, ke vi povas uzi parted sur LUKS-ujoj, ĉu ne? Kaj ankaŭ la problemo de la frua komenco de aliaj servoj, kiam ankoraŭ ne ekzistas tabeloj, sed uzi Mi jam bezonas ion (mi laboras kun amasigita Proxmox VE 5.x kaj ZFS per iSCSI).

Iom pri ZFSoverISCSIiSCSI funkcias por mi per LIO, kaj fakte, kiam la iscsi-celo komenciĝas kaj ne vidas ZVOL-aparatojn, ĝi simple forigas ilin de la agordo, kio malhelpas gastsistemojn ekfunkciigi. Sekve, ĉu restarigi json-dosieran sekurkopion, ĉu permane aldonante aparatojn kun identigiloj por ĉiu VM, kio estas simple terura kiam ekzistas dekoj da tiaj maŝinoj kaj ĉiu agordo havas pli ol 1 diskon.

Kaj la dua demando, kiun mi konsideros, estas kiel deĉifri (ĉi tio estas la ŝlosila punkto de la artikolo). Kaj ni parolos pri tio ĉi sube, iru sub la tranĉon!

Plej ofte, en Interreto, ŝlosila dosiero estas uzata (mem aldonita al la fendo antaŭ ĉi tio per la komando - cryptsetup luksAddKey), aŭ en maloftaj esceptoj (en la ruslingva Interreto estas tre malmulte da informoj) - la decrypt_derived skripto. lokita en /lib/cryptsetup/script/ (kompreneble, estas aliaj manieroj, sed mi uzis ĉi tiujn du, kiuj formis la bazon de la artikolo). Mi ankaŭ strebis por plena aŭtonoma inkludo post rekomencoj, sen aldonaj komandoj en la konzolo, por ke ĉio "flugu supren" por mi tuj. Tial, kial atendi? —

Ni komencu!

Ni supozu sistemon, kiel Debian, instalitan sur sda3_crypt kripta sekcio kaj dekduo da diskoj pretaj por esti ĉifritaj kaj kreitaj laŭ via koro. Ni havas ŝlosilan frazon (pasfrazo) por malŝlosi sda3_crypt, kaj estas de ĉi tiu subdisko ke ni forigos la "haŝiŝon" de la pasvorto sur la kuranta (malĉifrita) sistemo kaj aldonos ĝin al la resto de la diskoj. Ĉio estas elementa, en la konzolo ni ekzekutas:

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

kie X estas niaj diskoj, sekcioj, ktp.

Post ĉifri la diskojn per "hash" de nia pasfrazo, vi devas eltrovi la UUID aŭ ID - depende de kiu kutimas kio kaj kio. Ni prenas datumojn de /dev/disk/by-uuid kaj by-id respektive.

La sekva paŝo estas prepari dosierojn kaj mini-skriptojn por la funkcioj, kiujn ni bezonas labori, ni daŭrigu:

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/

plu

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

Enhavo de ../decrypt

#!/bin/sh

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

plu

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

La enhavo de ../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"

iom pli

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

Enhavo ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

kaj laste, antaŭ update-initramfs, vi devas redakti la /etc/initramfs-tools/scripts/local-top/cryptroot-dosieron, komencante de linio ~360, koda fragmento sube.

Originala


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

kaj alportu ĝin al ĉi tiu formo

Redaktita


                # 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

Notu, ke aŭ UUID aŭ ID povas esti uzataj ĉi tie. La ĉefa afero estas, ke la necesaj peliloj por HDD / SSD-aparatoj estas aldonitaj al /etc/initramfs-tools/modules. Vi povas ekscii, kiu pelilo estas uzata per la komando udevadm info -a -n /dev/sdX | egrep 'aspektanta|ŝoforo'.

Nun kiam ni finiĝis kaj ĉiuj dosieroj estas en loko, kuru ĝisdatigo-initramfs -u -k ĉiuj -v, en arbohakado ne devas esti ekzekuto eraroj de niaj skriptoj. Ni rekomencas, enigas la pasfrazon kaj atendas iomete, depende de la nombro da diskoj. Poste, la sistemo komenciĝos kaj en la fina etapo de lanĉo, nome post "muntado" de la radika sekcio, la komando partprobe estos ekzekutita - ĝi trovos kaj prenos ĉiujn kreitajn subdiskojn sur LUKS-aparatoj kaj ajnaj tabeloj, ĉu ĝi estas ZFS aŭ mdadm, estos kunvenita senprobleme! Kaj ĉio ĉi antaŭ ŝarĝo kernaj servoj kaj servoj kiuj bezonas ĉi tiujn diskojn/tabelojn.

ĝisdatigo1: Kiel rimarkita AEP, ĉi tiu metodo funkcias nur por LUKS1.

fonto: www.habr.com

Aldoni komenton