Системаны жүктөө учурунда LUKS контейнерин чечмелөө

Баарыңарга жакшы күн жана түн! Бул пост LUKS маалыматтарды шифрлөөсүн колдонгондор жана Linux (Debian, Ubuntu) астында дисктердин шифрин чечүүнү каалагандар үчүн пайдалуу болот. тамыр бөлүмүн чечмелөө этаптары. Анан интернеттен андай маалыматты таба алган жокмун.

Жакында, текчелердеги дисктердин санынын көбөйүшү менен, мен /etc/crypttab аркылуу белгилүү эмес ыкманы колдонуп, дисктерди чечмелөө көйгөйүнө туш болдум. Жеке мен бул ыкманы колдонууда бир нече көйгөйлөрдү белгилейм, атап айтканда, файл окулуп жатат тамыр бөлүктү жүктөөдөн (монтаждоодон) кийин гана, бул ZFS импортуна терс таасирин тийгизет, атап айтканда, алар *_crypt түзмөгүндөгү бөлүмдөрдөн курулган болсо, же бөлүмдөрдөн курулган mdadm рейддери. LUKS контейнерлеринде parted колдонсоңуз болорун баарыбыз билебиз, туурабы? Жана ошондой эле башка кызматтарды эрте баштоо маселеси, массивдер жок болгондо, бирок колдонуу үчүн Мага мурунтан эле бир нерсе керек (мен iSCSI аркылуу кластердик Proxmox VE 5.x жана ZFS менен иштейм).

ZFSoverISCSI жөнүндө бир азiSCSI мен үчүн LIO аркылуу иштейт жана чындыгында, iscsi максаттуу иштетилип, ZVOL түзмөктөрүн көрбөй калганда, аларды жөн гана конфигурациядан алып салат, бул конок системаларынын жүктөлүшүнө жол бербейт. Демек, же json файлынын камдык көчүрмөсүн калыбына келтирүү, же ар бир VM үчүн идентификаторлору бар түзмөктөрдү кол менен кошуу, бул ондогон мындай машиналар жана ар бир конфигурацияда 1ден ашык диск болгондо коркунучтуу.

Ал эми мен карап чыга турган экинчи суроо - бул кантип чечмелөө керек (бул макаланын негизги пункту). Ал эми биз төмөндө бул жөнүндө сүйлөшөбүз, кесилген астына өт!

Көбүнчө, Интернетте ачкыч файлы колдонулат (буга чейин слотко өз алдынча кошулган - cryptsetup luksAddKey) же сейрек учурларда (орус тилдүү Интернетте маалымат абдан аз) - деcrypt_derived скрипт. /lib/cryptsetup/script/ жайгашкан (албетте, башка жолдору бар, бирок мен макаланын негизин түзгөн бул экөөнү колдондум). Мен ошондой эле кайра жүктөөдөн кийин, консолдо эч кандай кошумча буйруктарсыз толук автономдуу кошууга аракет кылдым, ошондо баары мен үчүн бир заматта "учуп" калат. Ошондуктан, эмне үчүн күтүү? —

Кел, баштайлы!

Келгиле, Debian сыяктуу sda3_crypt крипто бөлүгүнө орнотулган системаны жана шифрлөөгө жана жүрөгүңүздүн мазмунуна ылайык түзүүгө даяр ондогон дисктерди дейли. Бизде sda3_crypt кулпусун ачуу үчүн купуя сөз айкашы (пароль фразасы) бар жана дал ушул бөлүмдөн биз иштеп жаткан (дешифрленген) системадагы сырсөздөн “хэшти” алып салып, калган дисктерге кошобуз. Баары жөнөкөй, консолдо биз аткарабыз:

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

бул жерде X биздин дисктер, бөлүмдөр, ж.б.

Дисктерди биздин купуя сөз айкашынан "хэш" менен шифрлегенден кийин, ким эмнеге жана эмнеге көнүп калганына жараша UUID же ID табышыңыз керек. Биз /dev/disk/by-uuid жана by-idден маалыматтарды алабыз.

Кийинки кадам - ​​бул бизге керектүү функциялар үчүн файлдарды жана мини-скрипттерди даярдоо, уланталы:

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

Мазмуну ../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

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

Мазмун ../partprobe

#!/bin/sh

$DESTDIR/bin/partprobe

жана акыркысы, update-initramfs алдында, сиз /etc/initramfs-tools/scripts/local-top/cryptroot файлын, ~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

Бул жерде UUID же ID колдонулушу мүмкүн экенин эске алыңыз. Эң негизгиси, HDD / SSD түзмөктөрү үчүн керектүү драйверлер /etc/initramfs-tools/modules кошулган. Буйрук менен кайсы драйвер колдонулуп жатканын биле аласыз udevadm info -a -n /dev/sdX | egrep 'карап жаткан|АЙДООЧУ'.

Эми биз бүтүп, бардык файлдар ордунда, иштетиңиз update-initramfs -u -k all -v, журналда болбошу керек биздин скрипттерди аткаруу каталары. Биз кайра жүктөйбүз, купуя сөздү киргизип, дисктердин санына жараша бир аз күтөбүз. Андан кийин, система иштей баштайт жана ишке киргизүүнүн акыркы этабында, тактап айтканда, тамыр бөлүмүн "монтаждоодон" кийин, partprobe буйругу аткарылат - ал LUKS түзмөктөрүндө жана ZFS болобу, бардык массивдердеги бардык түзүлгөн бөлүмдөрдү таап, тандап алат. мдадм, проблемасыз монтаждалады! Жана мунун баары жүктөө алдында бул дисктерге/массивдерге муктаж болгон негизги кызматтар жана кызматтар.

жаңыртуу1: Кантип байкаган AEP, бул ыкма LUKS1 үчүн гана иштейт.

Source: www.habr.com

Комментарий кошуу