Дешифровање ЛУКС контејнера при покретању система

Добар дан и ноћ свима! Овај пост ће бити користан за оне који користе ЛУКС шифровање података и желе да дешифрују дискове под Линуком (Дебиан, Убунту) на фазе дешифровања коренске партиције. А такве информације нисам могао да нађем на интернету.

Недавно, са повећањем броја дискова на полицама, наишао сам на проблем дешифровања дискова коришћењем више него добро познатог метода преко /етц/црипттаб. Лично, истичем неколико проблема са коришћењем ове методе, односно да се датотека чита тек након учитавања (монтаже) роот партиције, што негативно утиче на увоз ЗФС-а, посебно ако су направљене од партиција на *_црипт уређају, или мдадм раидова такође направљених од партиција. Сви знамо да можете користити партед на ЛУКС контејнерима, зар не? А такође и проблем раног покретања других сервиса, када још нема низова, али користите Нешто ми већ треба (радим са кластеризованим Прокмок ВЕ 5.к и ЗФС преко иСЦСИ).

Мало о ЗФСоверИСЦСИиСЦСИ ми ради преко ЛИО-а, а у ствари, када се исцси циљ покрене и не види ЗВОЛ уређаје, једноставно их уклања из конфигурације, што спречава покретање система за госте. Дакле, или враћање резервне копије јсон датотеке, или ручно додавање уређаја са идентификаторима за сваки ВМ, што је једноставно страшно када постоји на десетине таквих машина и свака конфигурација има више од 1 диска.

И друго питање које ћу размотрити је како дешифровати (ово је кључна тачка чланка). И о овоме ћемо причати у наставку, идите испод реза!

Најчешће се на Интернету користи кључна датотека (само-додата у слот пре тога командом - цриптсетуп луксАддКеи), или у ретким изузецима (на руском језику постоји врло мало информација) - скрипта децрипт_деривед налази се у /либ/цриптсетуп/сцрипт/ (наравно, постоје и други начини, али ја сам користио ова два, која су била основа чланка). Такође сам тежио потпуном аутономном укључивању након рестартовања, без икаквих додатних команди у конзоли, како би ми све „одлетело“ одједном. Дакле, зашто чекати? —

Почнимо!

Претпоставимо да је систем, као што је Дебиан, инсталиран на сда3_црипт крипто партицији и десетак дискова спремних за шифровање и креирање до миле воље. Имамо приступну фразу (пасспхрасе) за откључавање сда3_црипт, и са ове партиције ћемо уклонити „хаш“ из лозинке на покренутом (дешифрованом) систему и додати га на остале дискове. Све је елементарно, у конзоли извршавамо:

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

где је Кс наши дискови, партиције итд.

Након шифровања дискова помоћу „хеша“ из наше приступне фразе, потребно је да сазнате УУИД или ИД – у зависности од тога ко је на шта навикао и на шта. Узимамо податке са /дев/диск/би-ууид и би-ид.

Следећи корак је припрема датотека и мини скрипти за функције које су нам потребне за рад, наставимо:

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

Садржај ../децрипт

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

Садржај ../партцопи

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

још мало

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

Садржај ../партпробе

#!/bin/sh

$DESTDIR/bin/partprobe

и последње, пре упдате-инитрамфс, потребно је да уредите /етц/инитрамфс-тоолс/сцриптс/лоцал-топ/цриптроот датотеку, почевши од реда ~360, исечак кода испод

Оригинал


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

и довести га у овај облик

Едитед


                # 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

Имајте на уму да се овде може користити или УУИД или ИД. Главна ствар је да се потребни драјвери за ХДД / ССД уређаје додају у /етц/инитрамфс-тоолс/модулес. Можете сазнати који драјвер се користи са командом удевадм инфо -а -н /дев/сдКс | егреп 'тражи|ДРИВЕР'.

Сада када смо завршили и све датотеке су на месту, покрените упдате-инитрамфс -у -к све -в, у логовању Не сме бити грешке у извршавању наших скрипти. Поново покрећемо систем, уносимо приступну фразу и чекамо мало, у зависности од броја дискова. Следеће, систем ће се покренути и у завршној фази покретања, наиме, након „монтаже“ роот партиције, биће извршена команда партпробе - она ​​ће пронаћи и покупити све креиране партиције на ЛУКС уређајима и свим низовима, било да се ради о ЗФС или мдадм, биће састављено без проблема! И све ово пре утовара основне услуге и услуге којима су потребни ови дискови/низови.

упдате1: Како приметио АЕП, овај метод ради само за ЛУКС1.

Извор: ввв.хабр.цом

Додај коментар