Tere päevast või ööst kõigile! See postitus on kasulik neile, kes kasutavad LUKS andmete krüpteerimist ja soovivad dekrüpteerida kettasid Linuxis (Debian, Ubuntu) root jaotise dekrüptimise etapis. Sellist teavet ei suutnud ma internetist leida.
Hiljuti, arvestades riiulitel olevate kettaste arvu suurenemist, seisin silmitsi probleemiga kettaste dekrüpteerimisel tuntud meetodi abil läbi /etc/crypttab. Mina isiklikult eristaksin mitmeid selle meetodi kasutamise probleeme, nimelt see, et fail loetakse ainult pärast root jaotuse laadimist, mis mõjutab negatiivselt ZFS importi, eriti kui need on loodud *_crypt seadme jaotustest või mdadm RAID'idest, mis on samuti loodud jaotustest. Me kõik teame, et parted'i saab kasutada LUKS konteinerite jaoks? Ja samuti on probleem varajaste muude teenuste käivitamisega, kui massiive veel pole, kuid kasutada juba on midagi vajalik (töötan klasterdatud Proxmox VE 5.x ja ZFS üle iSCSI).
Natuke ZFS üle iSCSI-stiSCSI töötab mul läbi LIO, ja kui iscsi-maa käivitub ja ei näe ZVOL seadmeid, siis eemaldab ta need lihtsalt konfigureerimisest, mis ei luba külalisüsteemidel käivituda. Seega tuleb kas taastada json faili varukoopia või manuaalselt lisada seadmed iga VM-i identifikaatoritega, mis on lihtsalt kohutav, kui selliseid masinasi on kümneid ja igas konfiguratsioonis on rohkem kui 1 ketas.
Ja teine küsimus, mida vaatan, on see, kuidas dekrüpteerimist teha (see on artikli võtmepunkt). Räägime sellest allpool, tulge ja vaadake!
Enamasti kasutatakse internetis võtme faili (loomulikult lisatud enne seda slotiga käsu — cryptsetup luksAddKey), või harvadel eranditel (Venekeelses internetis on väga napp informatsioon) — skripti decrypt_derived, mis asub /lib/cryptsetup/script/ (loomulikult on ka teisi viise, kuid olen kasutanud just neid kaht, mis said artikli aluseks). samuti püüdsin saavutada täielikku iseseisvat käivitamist pärast taaskäivitusi, ilma lisakäskudeta konsoolis, et kõik „töötaks” kohe. Nii et miks oodata? —
Alustame!
Eeldame, et süsteem on näiteks Debian, mis on installitud krüpteeritud partitsioonile sda3_crypt ja meil on kümme ketast, mis on krüpteerimiseks valmis ja millele saame luua mida iganes soovime. Meil on võti (passphrase), et dekodeerida sda3_crypt ja just sellelt partitsioonilt saame töötava (dekodeeritud) süsteemi parooli "hash"'i võtta ning lisada see ülejäänud ketastele. Kõik on elementaarne, sisestame konsoolis:
/lib/cryptsetup/scripts/decrypt_derived sda3_crypt | cryptsetup luksFormat /dev/sdXkus X — need on meie kettad, partitsioonid jne.
Pärast ketaste krüpteerimist meie võtme fraasiga on vajalik teada UUID-d või ID-d — sõltuvalt sellest, kes ja millega harjunud on. Saame andmed /dev/disk/by-uuid ja by-id vastavalt.
Järgmine etapp on vajalikud failid ja mini-skriptid töötamiseks ette valmistada, alustame:
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/edasi
touch /etc/initramfs-tools/hooks/decrypt && chmod +x /etc/initramfs-tools/hooks/decryptSisu .. /decrypt
#!/bin/sh
cp -p /lib/cryptsetup/scripts/decrypt_derived "$DESTDIR/bin/decrypt_derived"edasi
touch /etc/initramfs-tools/hooks/partcopy && chmod +x /etc/initramfs-tools/hooks/partcopySisu .. /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"veel natuke
touch /etc/initramfs-tools/scripts/local-bottom/partprobe && chmod +x /etc/initramfs-tools/scripts/local-bottom/partprobeSisu .. /partprobe
#!/bin/sh
$DESTDIR/bin/partprobeJa viimane, enne update-initramfs'i, tuleb redigeerida faili /etc/initramfs-tools/scripts/local-top/cryptroot, alates rea ~360, koodilõik allpool
Originaal
# decrease $count by 1, apparently last try was successful.
count=$(( $count - 1 ))
message "cryptsetup ($crypttarget): set up successfully"
break
ja viima sellisesse vormi
Redigeeritud
# 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"
breakPange tähele, et siin saab kasutada kas UUID-d või ID-d. Peamine on see, et vajalikud draiverid HDD/SSD seadmete jaoks oleksid lisatud /etc/initramfs-tools/modules. Kasutatava draiveri saate teada käsuga udevadm info -a -n /dev/sdX | egrep 'looking|DRIVER'.
Nüüd, kui oleme lõpetanud ja kõik failid on paigas, käivitame update-initramfs -u -k all -v, logimisel ei tohiks olla meie skriptide täitmise vigu. Taaskäivitame, sisestame võtmefraasi ja ootame veidi, olenevalt ketaste arvust. Edasi käivitub süsteem ja käivitamise lõppfaasis, täpsemalt pärast root-partitsiooni «mountimist», täidetakse käsk partprobe — see leiab ja ühendab kõik loodud partitsioonid LUKS seadmetes ning kõik massiivid, olgu need ZFS või mdadm, kogunevad probleemideta! Ja kõik see enne põhiteenusete ja teenuste laadimist, mis vajavad neid kettaid/massiive. peamiste teenuste ja teenuste, mille jaoks neid kettasid/mahte on vaja.
update1: Kuidas , see meetod töötab ainult LUKS1 jaoks.
Allikas: habr.com
