Dekripteer 'n LUKS-houer tydens stelselselflaaityd

Goeie dag en nag almal! Hierdie pos sal nuttig wees vir diegene wat LUKS-data-enkripsie gebruik en skywe onder Linux (Debian, Ubuntu) wil dekripteer op stadiums van dekripteer die wortelpartisie. En ek kon nie sulke inligting op die internet kry nie.

Meer onlangs, met die toename in die aantal skywe in die rakke, het ek die probleem ondervind om skywe te dekripteer deur die meer as bekende metode deur /etc/crypttab te gebruik. Persoonlik beklemtoon ek 'n paar probleme met die gebruik van hierdie metode, naamlik dat die lêer gelees word eers nadat die wortelpartisie gelaai (monteer) is, wat ZFS-invoere negatief beïnvloed, veral as hulle gebou is vanaf partisies op die *_crypt-toestel, of mdadm-aanvalle wat ook van partisies gebou is. Ons weet almal dat jy parted op LUKS-houers kan gebruik, reg? En ook die probleem van die vroeë begin van ander dienste, wanneer daar nog geen skikkings is nie, maar te gebruik Ek het reeds iets nodig (ek werk met gegroepeerde Proxmox VE 5.x en ZFS oor iSCSI).

'N bietjie oor ZFSoverISCSIiSCSI werk vir my deur LIO, en in werklikheid, wanneer die iscsi-teiken begin en nie ZVOL-toestelle sien nie, verwyder dit hulle eenvoudig uit die konfigurasie, wat verhoed dat gastestelsels selflaai. Dus, óf die herstel van 'n json-lêer-rugsteun, óf die byvoeging van toestelle met identifiseerders vir elke VM, wat eenvoudig verskriklik is as daar dosyne sulke masjiene is en elke konfigurasie meer as 1 skyf het.

En die tweede vraag wat ek sal oorweeg, is hoe om te dekripteer (dit is die belangrikste punt van die artikel). En ons sal hieronder hieroor praat, gaan onder die snit!

Meestal word 'n sleutellêer op die internet gebruik (self bygevoeg by die gleuf voor dit deur die opdrag - cryptsetup luksAddKey), of in seldsame uitsonderings (op die Russiestalige internet is daar baie min inligting) - die decrypt_derived script geleë in /lib/cryptsetup/script/ (natuurlik is daar ander maniere, maar ek het hierdie twee gebruik, wat die basis van die artikel gevorm het). Ek het ook gestreef na volledige outonome insluiting na herlaai, sonder enige bykomende opdragte in die konsole, sodat alles gelyktydig vir my sou "opvlieg". Daarom, hoekom wag? —

Laat ons begin!

Kom ons neem aan 'n stelsel, soos Debian, geïnstalleer op 'n sda3_crypt kripto partisie en 'n dosyn skywe gereed om geënkripteer en geskep te word na hartelus. Ons het 'n wagwoordfrase (wagfrase) om sda3_crypt te ontsluit, en dit is vanaf hierdie partisie dat ons die "hash" van die wagwoord op die lopende (gedekripteer) stelsel sal verwyder en dit by die res van die skywe sal voeg. Alles is elementêr, in die konsole voer ons uit:

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

waar X ons skywe, partisies, ens.

Nadat u die skywe met 'n "hash" van ons wagwoordfrase geënkripteer het, moet u die UUID of ID uitvind - afhangend van wie aan wat gewoond is en wat. Ons neem data van /dev/disk/by-uuid en by-id onderskeidelik.

Die volgende stap is om lêers en mini-skripte voor te berei vir die funksies wat ons moet werk, kom ons gaan voort:

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/

verdere

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

Inhoud van ../decrypt

#!/bin/sh

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

verdere

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

Die inhoud van ../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"

n bietjie meer

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

Inhoud ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

en laastens, voor update-initramfs, moet jy die /etc/initramfs-tools/scripts/local-top/cryptroot-lêer wysig, vanaf reël ~360, kodebrokkie hieronder

Original


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

en bring dit na hierdie vorm

Geredigeer


                # 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

Let daarop dat óf UUID óf ID hier gebruik kan word. Die belangrikste ding is dat die nodige drywers vir HDD / SSD-toestelle by /etc/initramfs-tools/modules gevoeg word. Jy kan uitvind watter bestuurder met die opdrag gebruik word udevadm info -a -n /dev/sdX | egrep 'soek|DRIVER'.

Noudat ons klaar is en al die lêers in plek is, hardloop update-initramfs -u -k alle -v, in aanteken moet nie wees nie uitvoeringsfoute van ons skrifte. Ons herlaai, voer die wagwoordfrase in en wag 'n bietjie, afhangende van die aantal skywe. Vervolgens sal die stelsel begin en by die finale stadium van bekendstelling, naamlik nadat die wortelpartisie gemonteer is, sal die partprobe-opdrag uitgevoer word - dit sal alle geskepte partisies op LUKS-toestelle en enige skikkings vind en optel, of dit nou ZFS of mdadm, sal sonder probleme aanmekaar gesit word! En dit alles voor laai kerndienste en dienste wat hierdie skywe/skikkings benodig.

opdatering1: Hoe opgemerk AEP, hierdie metode werk net vir LUKS1.

Bron: will.com

Voeg 'n opmerking