Dadgryptio cynhwysydd LUKS ar amser cychwyn y system

Dydd a nos da pawb! Bydd y swydd hon yn ddefnyddiol i'r rhai sy'n defnyddio amgryptio data LUKS ac sydd am ddadgryptio disgiau o dan Linux (Debian, Ubuntu) ar cam dadgryptio'r rhaniad gwraidd. Ac ni allwn ddod o hyd i wybodaeth o'r fath ar y Rhyngrwyd.

Yn eithaf diweddar, gyda chynnydd yn nifer y disgiau yn y silffoedd, deuthum ar draws y broblem o ddadgryptio disgiau gan ddefnyddio'r dull mwy nag adnabyddus trwy /etc/crypttab. Yn bersonol, rwy'n tynnu sylw at ychydig o broblemau gyda defnyddio'r dull hwn, sef bod y ffeil yn cael ei darllen dim ond ar Γ΄l llwytho (mowntio) y rhaniad gwraidd, sy'n effeithio'n negyddol ar fewnforion ZFS, yn enwedig pe baent yn cael eu casglu o raniad ar ddyfais *_crypt, neu gyrchoedd mdadm hefyd yn cael eu casglu o barwydydd. Rydyn ni i gyd yn gwybod y gallwch chi ddefnyddio parted ar gynwysyddion LUKS, iawn? A hefyd y broblem o ddechrau gwasanaethau eraill yn gynnar, pan nad oes unrhyw araeau eto, a defnyddiwch Dwi angen rhywbeth yn barod (rwy'n gweithio gyda chlystyru Proxmox VE 5.x a ZFS dros iSCSI).

Ychydig am ZFSoverISCSIMae iSCSI yn gweithio i mi trwy LIO, ac mewn gwirionedd, pan fydd y targed iscsi yn dechrau ac nad yw'n gweld dyfeisiau ZVOL, mae'n syml yn eu tynnu o'r ffurfweddiad, sy'n atal systemau gwesteion rhag cychwyn. Felly, naill ai adfer y ffeil json wrth gefn, neu ychwanegu dyfeisiau Γ’ llaw gyda dynodwyr pob VM, sy'n syml ofnadwy pan fo dwsinau o beiriannau o'r fath a bod gan bob ffurfwedd fwy nag 1 ddisg.

A'r ail gwestiwn y byddaf yn ei ystyried yw sut i ddadgryptio (dyma bwynt allweddol yr erthygl). A byddwn yn siarad am hyn isod, ewch i'r toriad!

Yn fwyaf aml ar y Rhyngrwyd maent yn defnyddio ffeil allweddol (a ychwanegwyd yn awtomatig at y slot gyda'r gorchymyn - cryptsetup luksAddKey), neu mewn eithriadau prin (ychydig iawn o wybodaeth sydd ar y Rhyngrwyd Rwsieg) - y sgript decrypt_derived, wedi'i leoli yn /lib/cryptsetup/script/ (wrth gwrs, mae yna ffyrdd eraill, ond defnyddiais y ddau hyn, a oedd yn sail i'r erthygl). Fe wnes i ymdrechu hefyd i gael actifadu ymreolaethol llawn ar Γ΄l ailgychwyn, heb unrhyw orchmynion ychwanegol yn y consol, fel y byddai popeth yn β€œcymryd i ffwrdd” i mi ar unwaith. Felly, pam aros? -

Gadewch i ni ddechrau!

Rydym yn tybio system, er enghraifft Debian, wedi'i gosod ar y rhaniad crypto sda3_crypt a dwsin o ddisgiau yn barod i'w hamgryptio a chreu beth bynnag y mae eich calon yn ei ddymuno. Mae gennym ymadrodd allweddol (cyfrinair) i ddatgloi sda3_crypt ac o'r adran hon y byddwn yn dileu'r β€œhash” o'r cyfrinair ar system sy'n rhedeg (dadgryptio) a'i ychwanegu at ddisgiau eraill. Mae popeth yn elfennol, yn y consol rydyn ni'n ei weithredu:

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

lle X yw ein disgiau, rhaniadau, ac ati.

Ar Γ΄l amgryptio'r disgiau gyda hash o'n hymadrodd allweddol, mae angen i chi ddarganfod yr UUID neu'r ID - yn dibynnu ar bwy sydd wedi arfer Γ’ beth. Rydym yn cymryd data o /dev/disk/by-uuid a by-id, yn y drefn honno.

Y cam nesaf yw paratoi ffeiliau a sgriptiau bach ar gyfer y swyddogaethau y mae angen i ni weithio, gadewch inni symud ymlaen:

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/

pellach

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

Cynnwys ../decrypt

#!/bin/sh

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

pellach

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

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

ychydig mwy

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

Cynnwys ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

ac yn olaf, cyn diweddaru-initramfs, mae angen i chi olygu'r ffeil /etc/initramfs-tools/scripts/local-top/cryptroot, gan ddechrau o linell ~360, darn o god isod

Gwreiddiol


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

a dod ag ef i'r ffurf hon

Golygwyd


                # 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

Sylwch y gellir defnyddio naill ai UUID neu ID yma. Y prif beth yw bod y gyrwyr angenrheidiol ar gyfer dyfeisiau HDD / SSD yn cael eu hychwanegu at /etc/initramfs-tools/modules. Gallwch ddarganfod pa yrrwr sy'n cael ei ddefnyddio gyda'r gorchymyn gwybodaeth udevadm -a -n /dev/sdX | egrep 'edrych | GYRRWR'.

Nawr ein bod ni wedi gorffen a'r holl ffeiliau yn eu lle, rydyn ni'n rhedeg diweddaru-initramfs -u -k holl -v, mewn logio rhaid peidio Γ’ bod gwallau wrth gyflawni ein sgriptiau. Rydyn ni'n ailgychwyn, yn nodi'r ymadrodd allweddol ac yn aros ychydig, yn dibynnu ar nifer y disgiau. Nesaf, bydd y system yn cychwyn ac ar gam olaf y cychwyn, sef ar Γ΄l β€œmowntio” y rhaniad gwraidd, bydd y gorchymyn partprobe yn cael ei weithredu - bydd yn canfod ac yn codi'r holl raniad a grΓ«wyd ar ddyfeisiau LUKS ac unrhyw araeau, boed yn ZFS neu mdadm, yn cael ei ymgynnull heb broblemau! A hyn i gyd cyn llwytho y prif wasanaethau sydd angen y disgiau/araeau hyn.

diweddariad1: Sut sylwi AEP, dim ond ar gyfer LUKS1 y mae'r dull hwn yn gweithio.

Ffynhonnell: hab.com

Ychwanegu sylw