LUKS-säilön salauksen purkaminen järjestelmän käynnistyksen yhteydessä

Hyvää päivää ja yötä kaikille! Tämä viesti on hyödyllinen niille, jotka käyttävät LUKS-tietojen salausta ja haluavat purkaa levyjen salauksen Linuxissa (Debian, Ubuntu) juuriosion salauksen purkamisen vaiheet. Ja en löytänyt sellaista tietoa Internetistä.

Äskettäin, kun levyjen määrä hyllyillä kasvoi, törmäsin ongelmaan, joka koskee levyjen salauksen purkamista enemmän kuin tunnetulla menetelmällä /etc/crypttab-tiedoston kautta. Henkilökohtaisesti korostan muutamia tämän menetelmän käyttämiseen liittyviä ongelmia, nimittäin sen, että tiedostoa luetaan vasta juuriosion lataamisen (liitännän) jälkeen, mikä vaikuttaa negatiivisesti ZFS-tuontiin, varsinkin jos ne on rakennettu *_crypt-laitteen osioista tai myös osioista rakennetuista mdadm raideista. Tiedämme kaikki, että voit käyttää erotettuja LUKS-säiliöitä, eikö niin? Ja myös muiden palveluiden aikaisen käynnistymisen ongelma, kun taulukoita ei vielä ole, mutta käyttää Tarvitsen jo jotain (työskentelen klusteroidun Proxmox VE 5.x:n ja ZFS:n kanssa iSCSI:n kautta).

Hieman ZFSoverISCSI:stäiSCSI toimii minulle LIO:n kautta, ja itse asiassa, kun iscsi-kohde käynnistyy eikä näe ZVOL-laitteita, se yksinkertaisesti poistaa ne kokoonpanosta, mikä estää vierasjärjestelmiä käynnistymästä. Tästä syystä joko json-tiedoston varmuuskopion palauttaminen tai laitteiden lisääminen manuaalisesti tunnisteilla jokaiselle VM:lle, mikä on yksinkertaisesti kauheaa, kun tällaisia ​​koneita on kymmeniä ja jokaisessa kokoonpanossa on enemmän kuin yksi levy.

Ja toinen kysymys, jota harkitsen, on salauksen purkaminen (tämä on artikkelin avainkohta). Ja puhumme tästä alla, mene alle!

Useimmiten Internetissä käytetään avaintiedostoa (itse lisätty paikkaan ennen tätä komennolla - cryptsetup luksAddKey) tai harvoissa poikkeuksissa (venäjänkielisessä Internetissä on hyvin vähän tietoa) - decrypt_derived-skripti sijaitsee hakemistossa /lib/cryptsetup/script/ (tottakai on muitakin tapoja, mutta käytin näitä kahta, jotka muodostivat artikkelin perustan). Pyrin myös täysin itsenäiseen sisällyttämiseen uudelleenkäynnistyksen jälkeen ilman lisäkomentoja konsolissa, jotta kaikki "lentäisi" minulle kerralla. Miksi siis odottaa? —

Aloitetaan!

Oletetaan, että Debianin kaltainen järjestelmä on asennettu sda3_crypt-salausosioon ja tusinalle levylle, jotka on valmiina salattavaksi ja luotavaksi sydämesi kyllyydestä. Meillä on tunnuslause (salalause) sda3_crypt:n lukituksen avaamiseen, ja juuri tästä osiosta poistamme "hash"-koodin käynnissä olevan (salauksen purkamisen) järjestelmän salasanasta ja lisäämme sen muihin levyihin. Kaikki on alkeellista, suorittamassamme konsolissa:

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

missä X on levymme, osiot jne.

Kun olet salannut levyt tunnuslauseemme "hashilla", sinun on selvitettävä UUID tai ID - riippuen siitä, kuka on tottunut mihin ja mihin. Otamme tiedot hakemistosta /dev/disk/by-uuid ja by-id.

Seuraava vaihe on tiedostojen ja minikomentosarjojen valmistelu toimintoja varten, joita tarvitsemme, jatketaan:

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

Tiedoston ../decrypt sisältö

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

Tiedoston ../partcopy sisältö

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

jonkin verran lisää

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

Sisältö ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

ja viimeisenä, ennen update-initramfs, sinun on muokattava /etc/initramfs-tools/scripts/local-top/cryptroot-tiedostoa alkaen riviltä ~360, koodinpätkä alla.

Alkuperäinen


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

ja tuo se tähän muotoon

Muokattu


                # 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

Huomaa, että tässä voidaan käyttää joko UUID:tä tai ID:tä. Tärkeintä on, että HDD / SSD-laitteiden tarvittavat ajurit lisätään tiedostoon /etc/initramfs-tools/modules. Voit selvittää, mitä ohjainta käytetään komennolla udevadm info -a -n /dev/sdX | egrep 'looking|DRIVER'.

Nyt kun olemme valmiita ja kaikki tiedostot ovat paikoillaan, suorita update-initramfs -u -k all -v, hakkuissa ei pidä olla komentosarjajemme suoritusvirheet. Käynnistämme uudelleen, kirjoitamme tunnuslauseen ja odotamme hieman levyjen lukumäärästä riippuen. Seuraavaksi järjestelmä käynnistyy ja käynnistyksen viimeisessä vaiheessa, eli juuriosion "asennuksen" jälkeen, suoritetaan partprobe-komento - se etsii ja poimii kaikki luodut osiot LUKS-laitteilla ja matriiseilla, olipa kyseessä sitten ZFS tai mdadm, kootaan ilman ongelmia! Ja kaikki tämä ennen lataamista ydinpalvelut ja palvelut, jotka tarvitsevat näitä levyjä/ryhmiä.

päivitys 1: Miten huomatuksi AEP, tämä menetelmä toimii vain LUKS1:lle.

Lähde: will.com

Lisää kommentti