Tizimni yuklash vaqtida LUKS konteynerining shifrini ochish

Hammaga xayrli kun va tun! Ushbu post LUKS ma'lumotlar shifrlashdan foydalanadigan va Linux (Debian, Ubuntu) ostida disklarni shifrlashni xohlaydiganlar uchun foydali bo'ladi. ildiz bo'limining shifrini ochish bosqichi. Va men Internetda bunday ma'lumotni topa olmadim.

Yaqinda javonlardagi disklar sonining ko'payishi bilan men /etc/crypttab orqali ko'proq ma'lum bo'lgan usuldan foydalangan holda disklarni shifrlash muammosiga duch keldim. Shaxsan men ushbu usuldan foydalanish bilan bog'liq bir nechta muammolarni, ya'ni faylni o'qishni ta'kidlayman faqat ildiz qismini yuklagandan (o'rnatishdan) keyin, bu ZFS importiga salbiy ta'sir qiladi, xususan, agar ular *_crypt qurilmasidagi bo'limlardan yig'ilgan bo'lsa yoki bo'limlardan to'plangan mdadm reydlari ham. LUKS konteynerlarida parted ishlatishingiz mumkinligini hammamiz bilamiz, to'g'rimi? Va shuningdek, boshqa xizmatlarni erta boshlash muammosi, hali massivlar mavjud bo'lmaganda va foydalanish Menga allaqachon biror narsa kerak (men iSCSI orqali klasterlangan Proxmox VE 5.x va ZFS bilan ishlayapman).

ZFSoverISCSI haqida bir oziSCSI men uchun LIO orqali ishlaydi va aslida, iscsi nishoni ishga tushirilganda va ZVOL qurilmalarini ko'rmasa, u ularni konfiguratsiyadan olib tashlaydi, bu esa mehmon tizimlarining yuklanishiga to'sqinlik qiladi. Shunday qilib, json faylining zaxira nusxasini tiklash yoki har bir VM identifikatoriga ega qurilmalarni qo'lda qo'shish, bu o'nlab bunday mashinalar mavjud bo'lganda va har bir konfiguratsiyada 1 dan ortiq disk bo'lsa, bu dahshatli.

Va men ko'rib chiqadigan ikkinchi savol - shifrni qanday ochish kerak (bu maqolaning asosiy nuqtasi). Va biz bu haqda quyida gaplashamiz, kesishga o'ting!

Ko'pincha Internetda ular kalit fayldan foydalanadilar (u avtomatik ravishda cryptsetup luksAddKey buyrug'i bilan slotga qo'shiladi) yoki kamdan-kam hollarda (rus tilidagi Internetda juda kam ma'lumot mavjud) - shifrlangan skriptdan foydalanadilar. /lib/cryptsetup/script/ (albatta, boshqa yo'llar ham bor, lekin men maqolaga asos bo'lgan bu ikkitasidan foydalandim). Men qayta ishga tushirilgandan so'ng, konsolda qo'shimcha buyruqlarsiz to'liq avtonom faollashtirishga harakat qildim, shunda hamma narsa men uchun darhol "uchib ketadi". Shuning uchun, nima uchun kutish kerak? β€”

Qani boshladik!

Biz sda3_crypt kripto bo'limiga o'rnatilgan Debian kabi tizim va yuragingiz xohlagan narsani shifrlash va yaratishga tayyor o'nlab disklarni taxmin qilamiz. Bizda sda3_crypt qulfini ochish uchun kalit ibora (parol iborasi) mavjud va aynan shu bo'limdan biz ishlayotgan (deshifrlangan) tizimdagi parolning "xesh"ini olib tashlaymiz va uni boshqa disklarga qo'shamiz. Hammasi oddiy, konsolda biz bajaramiz:

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

bu erda X bizning disklarimiz, bo'limlarimiz va boshqalar.

Disklarni bizning kalit iboramizdan xesh bilan shifrlagandan so'ng, kim nimaga o'rganganiga qarab UUID yoki ID ni bilib olishingiz kerak. Biz mos ravishda /dev/disk/by-uuid va by-id dan ma'lumotlarni olamiz.

Keyingi bosqich - biz ishlashimiz kerak bo'lgan funktsiyalar uchun fayllar va mini-skriptlarni tayyorlash, keling:

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/

yanada

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"

yanada

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

Tarkib ../nusxasi

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

yana ozgina

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

Tarkib ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

va nihoyat, update-initramfs-dan oldin, faylni tahrirlashingiz kerak /etc/initramfs-tools/scripts/local-top/cryptroot, ~360-satrdan boshlab, quyida joylashgan kod parchasi.

Original


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

va uni ushbu shaklga keltiring

Tahrirlangan


                # 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

Bu erda UUID yoki ID dan foydalanish mumkinligini unutmang. Asosiysi, HDD/SSD qurilmalari uchun kerakli drayverlar /etc/initramfs-tools/modules-ga qo'shilgan. Buyruq bilan qaysi drayverdan foydalanilganligini bilib olishingiz mumkin udevadm info -a -n /dev/sdX | egrep 'qarash|haydovchi'.

Endi biz tugatdik va barcha fayllar joyida, biz ishga tushamiz update-initramfs -u -k all -v, jurnalga kirishda bo'lmasligi kerak skriptlarimizni bajarishdagi xatolar. Biz qayta ishga tushiramiz, asosiy iborani kiritamiz va disklar soniga qarab biroz kutamiz. Keyinchalik, tizim ishga tushadi va ishga tushirishning yakuniy bosqichida, ya'ni ildiz bo'limi "o'rnatilgandan" keyin partprobe buyrug'i bajariladi - u LUKS qurilmalarida va ZFS yoki ZFS bo'lsin, barcha yaratilgan bo'limlarni topadi va oladi. mdadm, muammosiz yig'iladi! Va bularning barchasi yuklashdan oldin ushbu disklar/massivlarga muhtoj bo'lgan asosiy xizmatlar.

yangilash1: Qanaqasiga payqadi AEP, bu usul faqat LUKS1 uchun ishlaydi.

Manba: www.habr.com

a Izoh qo'shish