Menyahsulit bekas LUKS pada masa but sistem

Selamat siang dan malam semua! Siaran ini berguna kepada mereka yang menggunakan penyulitan data LUKS dan ingin menyahsulit cakera di bawah Linux (Debian, Ubuntu) pada peringkat penyahsulitan partition akar. Dan saya tidak dapat mencari maklumat sedemikian di Internet.

Baru-baru ini, dengan peningkatan bilangan cakera dalam rak, saya menghadapi masalah menyahsulit cakera menggunakan kaedah yang lebih terkenal melalui /etc/crypttab. Secara peribadi, saya menyerlahkan beberapa masalah dengan menggunakan kaedah ini, iaitu fail dibaca hanya selepas memuatkan (memasang) partition root, yang memberi kesan negatif terhadap import ZFS, khususnya jika ia dikumpul daripada sekatan pada peranti *_crypt, atau serbuan mdadm juga dikumpulkan daripada sekatan. Kita semua tahu bahawa anda boleh menggunakan parted pada bekas LUKS, bukan? Dan juga masalah permulaan awal perkhidmatan lain, apabila tiada tatasusunan lagi, dan gunakan Saya sudah memerlukan sesuatu (saya sedang bekerja dengan Proxmox VE 5.x dan ZFS berkelompok melalui iSCSI).

Sedikit tentang ZFSoverISCSIiSCSI berfungsi untuk saya melalui LIO, dan sebenarnya, apabila sasaran iscsi bermula dan tidak melihat peranti ZVOL, ia hanya mengalih keluarnya daripada konfigurasi, yang menghalang sistem tetamu daripada boot. Oleh itu, sama ada memulihkan fail json sandaran, atau menambah peranti secara manual dengan pengecam setiap VM, yang amat mengerikan apabila terdapat berpuluh-puluh mesin sedemikian dan setiap konfigurasi mempunyai lebih daripada 1 cakera.

Dan soalan kedua yang akan saya pertimbangkan ialah bagaimana untuk menyahsulit (ini adalah perkara utama artikel). Dan kita akan bercakap tentang perkara ini di bawah, pergi ke potongan!

Selalunya di Internet mereka menggunakan fail utama (yang ditambahkan secara automatik pada slot dengan arahan - cryptsetup luksAddKey), atau dalam pengecualian yang jarang berlaku (terdapat sedikit maklumat mengenai Internet bahasa Rusia) - skrip decrypt_derived, terletak di /lib/cryptsetup/script/ (sudah tentu, terdapat cara lain, tetapi saya menggunakan kedua-dua ini, yang membentuk asas artikel). Saya juga berusaha untuk pengaktifan autonomi penuh selepas but semula, tanpa sebarang arahan tambahan dalam konsol, supaya semuanya akan "berlepas" untuk saya serta-merta. Oleh itu, mengapa menunggu? β€”

Mari mulakan!

Kami menganggap sistem, contohnya Debian, dipasang pada partition crypto sda3_crypt dan sedozen cakera sedia untuk menyulitkan dan mencipta apa sahaja yang anda inginkan. Kami mempunyai frasa utama (frasa laluan) untuk membuka kunci sda3_crypt dan dari bahagian ini kami akan mengalih keluar "cincang" kata laluan pada sistem yang sedang berjalan (disulitkan) dan menambahnya pada cakera lain. Segala-galanya adalah asas, dalam konsol kami laksanakan:

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

di mana X ialah cakera, partition, dsb.

Selepas menyulitkan cakera dengan cincang daripada frasa utama kami, anda perlu mengetahui UUID atau ID - bergantung pada siapa yang terbiasa dengan apa. Kami mengambil data dari /dev/disk/by-uuid dan by-id, masing-masing.

Peringkat seterusnya ialah menyediakan fail dan skrip mini untuk fungsi yang perlu kita kerjakan, mari teruskan:

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

Kandungan ../decrypt

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

Kandungan ../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"

sedikit lagi

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

Kandungan ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

dan akhir sekali, sebelum kemas kini-initramfs, anda perlu mengedit fail /etc/initramfs-tools/scripts/local-top/cryptroot, bermula dari baris ~360, sekeping kod di bawah

Asal


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

dan bawa ke borang ini

disunting


                # 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

Ambil perhatian bahawa sama ada UUID atau ID boleh digunakan di sini. Perkara utama ialah pemacu yang diperlukan untuk peranti HDD/SSD ditambahkan pada /etc/initramfs-tools/modules. Anda boleh mengetahui pemandu mana yang digunakan dengan arahan maklumat udevadm -a -n /dev/sdX | egrep 'kelihatan|PEMANDU'.

Sekarang setelah kami selesai dan semua fail sudah tersedia, kami jalankan kemas kini-initramfs -u -k semua -v, dalam pembalakan mesti tak jadi kesilapan dalam pelaksanaan skrip kami. Kami but semula, masukkan frasa utama dan tunggu sedikit, bergantung pada bilangan cakera. Seterusnya, sistem akan bermula dan pada peringkat akhir permulaan, iaitu selepas "memasang" partition root, arahan partprobe akan dilaksanakan - ia akan mencari dan mengambil semua partition yang dibuat pada peranti LUKS dan mana-mana tatasusunan, sama ada ZFS atau mdadm, akan dipasang tanpa masalah! Dan semua ini sebelum memuatkan perkhidmatan utama yang memerlukan cakera/susunan ini.

kemas kini1: Bagaimana perasan AEP, kaedah ini hanya berfungsi untuk LUKS1.

Sumber: www.habr.com

Tambah komen