Decrypting un containeru LUKS à u tempu di boot di u sistema

Bon ghjornu è notte à tutti ! Questu post serà utile per quelli chì utilizanu a criptografia di dati LUKS è volenu decifrare i dischi sottu Linux (Debian, Ubuntu) in fasi di decrypting a partizione root. È ùn pudia truvà tali informazioni in Internet.

Più ricenti, cù l'aumentu di u nùmeru di dischi in i scaffali, aghju avutu u prublema di decifrare i dischi utilizendu u metudu più cunnisciutu da /etc/crypttab. In modu persunale, aghju evidenziatu uni pochi di prublemi cù l'usu di stu metudu, à dì chì u schedariu hè lettu solu dopu à carica (muntà) a partizione radicali, chì affetta negativamente l'impurtazioni ZFS, in particulare s'ellu sò stati custruiti da partizioni in u dispositivu * _crypt, o mdadm raids custruitu da partizioni ancu. Tutti sapemu chì pudete aduprà parted nantu à i cuntenituri LUKS, nò? È ancu u prublema di u principiu di l'iniziu di l'altri servizii, quandu ùn ci sò ancu arrays, ma usu Aghju digià bisognu di qualcosa (travagliu cù clustered Proxmox VE 5.x è ZFS sopra iSCSI).

Un pocu di ZFSoverISCSIiSCSI travaglia per mè attraversu LIO, è in fattu, quandu u target iscsi principia è ùn vede micca i dispositi ZVOL, li sguassate solu da a cunfigurazione, chì impedisce à i sistemi invitati di boot. Dunque, sia restaurà una copia di salvezza di file json, sia aghjunghje manualmente i dispositi cù identificatori per ogni VM, chì hè simplicemente terribili quandu ci sò decine di tali macchine è ogni cunfigurazione hà più di 1 discu.

È a seconda quistione chì vi cunsiderà hè cumu decrypt (questu hè u puntu chjave di l'articulu). È parleremu quì sottu, andate sottu à u cut !

A maiò spessu, in Internet, un schedariu chjave hè utilizatu (auto-aghjuntu à u slot prima di questu da u cumandimu - cryptsetup luksAddKey), o in rari eccezzioni (in Internet in lingua russa ci hè pocu infurmazione) - u script decrypt_derived. situatu in /lib/cryptsetup/script/ (di sicuru, ci sò altre manere, ma aghju utilizatu sti dui, chì formanu a basa di l'articulu). Aghju ancu struitu per l'inclusione autonoma cumpleta dopu à reboots, senza cumandamenti supplementari in a cunsola, per chì tuttu "volava" per mè in una volta. Dunque, perchè aspittà? —

Principiemu!

Assumimu un sistema, cum'è Debian, installatu nantu à una partizione criptografica sda3_crypt è una decina di dischi pronti per esse criptati è creati à u cuntenutu di u vostru core. Avemu una passphrase (passphrase) per sbloccare sda3_crypt, è hè da questa partizione chì sguassate u "hash" da a password in u sistema in esecuzione (decrypted) è aghjunghje à u restu di i dischi. Tuttu hè elementariu, in a cunsola eseguimu:

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

induve X hè i nostri dischi, partizioni, etc.

Dopu avè criptatu i dischi cù un "hash" da a nostra passphrase, avete bisognu di scopre l'UUID o l'ID - secondu quale hè utilizatu à ciò chì è ciò chì. Pigliemu dati da /dev/disk/by-uuid è by-id rispettivamente.

U prossimu passu hè di preparà i fugliali è i mini-scripts per e funzioni chì avemu bisognu, procedemu:

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/

più

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

Cuntenutu di ../decrypt

#!/bin/sh

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

più

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

U cuntenutu di ../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"

un pocu di più

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

Cuntenutu ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

è l'ultimu, prima di update-initramfs, avete bisognu di edità u file /etc/initramfs-tools/scripts/local-top/cryptroot, partendu da a linea ~ 360, snippet di codice sottu.

Originale


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

è purtate à sta forma

Editatu


                # 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

Nota chì sia UUID o ID pò esse usatu quì. A cosa principal hè chì i drivers necessarii per i dispositi HDD / SSD sò aghjuntu à /etc/initramfs-tools/modules. Pudete scopre quale driver hè utilizatu cù u cumandamentu udevadm info -a -n /dev/sdX | egrep 'cerca|DRIVER'.

Avà chì avemu fattu è tutti i schedari sò in u locu, curriri update-initramfs -u -k all -v, in logging ùn deve esse errori di esecuzione di i nostri scripts. Reboot, inserite a passphrase è aspittemu un pocu, secondu u numeru di discu. In seguitu, u sistema hà da principià è in a tappa finale di u lanciamentu, vale à dì dopu à "muntà" a partizione radicali, u cumandamentu partprobe serà eseguitu - truvarà è ripiglià tutte e partizioni create nantu à i dispositi LUKS è qualsiasi array, sia ZFS o. mdadm, serà assemblatu senza prublemi! È tuttu questu prima di carica servizii core è servizii chì necessitanu sti dischi / arrays.

aghjurnamentu1: Cumu nutatu AEP, Stu metudu funziona solu per LUKS1.

Source: www.habr.com

Add a comment