ืคืขื ื•ื— ืงื•ื ื˜ื™ื™ื ืจ LUKS ื‘ื–ืžืŸ ืืชื—ื•ืœ ื”ืžืขืจื›ืช

ื™ื•ื ื•ืœื™ืœื” ื˜ื•ื‘ ืœื›ื•ืœื! ืคื•ืกื˜ ื–ื” ื™ื”ื™ื” ืฉื™ืžื•ืฉื™ ืขื‘ื•ืจ ืืœื” ื”ืžืฉืชืžืฉื™ื ื‘ื”ืฆืคื ืช ื ืชื•ื ื™ื LUKS ื•ืจื•ืฆื™ื ืœืคืขื ื— ื“ื™ืกืงื™ื ืชื—ืช ืœื™ื ื•ืงืก (Debian, Ubuntu) ื‘- ืฉืœื‘ื™ ืคืขื ื•ื— ืžื—ื™ืฆืช ื”ืฉื•ืจืฉ. ื•ืœื ื”ืฆืœื—ืชื™ ืœืžืฆื•ื ืžื™ื“ืข ื›ื–ื” ื‘ืื™ื ื˜ืจื ื˜.

ืœืื—ืจื•ื ื”, ืขื ื”ื’ื™ื“ื•ืœ ื‘ืžืกืคืจ ื”ื“ื™ืกืงื™ื ื‘ืžื“ืคื™ื, ื ืชืงืœืชื™ ื‘ื‘ืขื™ื” ืฉืœ ืคืขื ื•ื— ื“ื™ืกืงื™ื ื‘ืฉื™ื˜ื” ื”ื™ื•ืชืจ ืžื•ื›ืจืช ื“ืจืš /etc/crypttab. ื‘ืื•ืคืŸ ืื™ืฉื™, ืื ื™ ืžื“ื’ื™ืฉ ื›ืžื” ื‘ืขื™ื•ืช ื‘ืฉื™ืžื•ืฉ ื‘ืฉื™ื˜ื” ื–ื•, ื›ืœื•ืžืจ ืฉื”ืงื•ื‘ืฅ ื ืงืจื ืจืง ืœืื—ืจ ื˜ืขื™ื ืช (ื”ืจ) ืืช ืžื—ื™ืฆืช ื”ืฉื•ืจืฉ, ืžื” ืฉืžืฉืคื™ืข ืœืจืขื” ืขืœ ื™ื™ื‘ื•ื โ€‹โ€‹ZFS, ื‘ืžื™ื•ื—ื“ ืื ื”ื ื ื‘ื ื• ืžืžื—ื™ืฆื•ืช ื‘ืžื›ืฉื™ืจ *_crypt, ืื• ืคืฉื™ื˜ื•ืช mdadm ืฉื ื‘ื ื• ื’ื ืžืžื—ื™ืฆื•ืช. ื›ื•ืœื ื• ื™ื•ื“ืขื™ื ืฉืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื—ืœื•ืงื” ืขืœ ืžื™ื›ืœื™ LUKS, ื ื›ื•ืŸ? ื•ื’ื ื”ื‘ืขื™ื” ืฉืœ ื”ืชื—ืœื” ืžื•ืงื“ืžืช ืฉืœ ืฉื™ืจื•ืชื™ื ืื—ืจื™ื, ื›ืฉืื™ืŸ ืขื“ื™ื™ืŸ ืžืขืจื›ื™ื, ืื‘ืœ ืฉื™ืžื•ืฉ ืื ื™ ื›ื‘ืจ ืฆืจื™ืš ืžืฉื”ื• (ืื ื™ ืขื•ื‘ื“ ืขื clustered Proxmox VE 5.x ื•-ZFS ืžืขืœ iSCSI).

ืงืฆืช ืขืœ ZFSoverISCSIiSCSI ืขื•ื‘ื“ ื‘ืฉื‘ื™ืœื™ ื“ืจืš LIO, ื•ืœืžืขืฉื”, ื›ืืฉืจ ื™ืขื“ ื”-iscsi ืžืชื—ื™ืœ ื•ืœื ืจื•ืื” ื”ืชืงื ื™ ZVOL, ื”ื•ื ืคืฉื•ื˜ ืžืกื™ืจ ืื•ืชื ืžื”ืงื•ื ืคื™ื’ื•ืจืฆื™ื”, ืžื” ืฉืžื•ื ืข ืžืžืขืจื›ื•ืช ืื•ืจื—ื•ืช ืœืืชื—ืœ. ืœืคื™ื›ืš, ืื• ืฉื—ื–ื•ืจ ื’ื™ื‘ื•ื™ ืฉืœ ืงื•ื‘ืฅ json, ืื• ื”ื•ืกืคืช ืžื›ืฉื™ืจื™ื ืขื ืžื–ื”ื™ื ื™ื“ื ื™ืช ืขื‘ื•ืจ ื›ืœ VM, ื•ื–ื” ืคืฉื•ื˜ ื ื•ืจื ื›ืืฉืจ ื™ืฉ ืขืฉืจื•ืช ืžื›ื•ื ื•ืช ื›ืืœื” ื•ืœื›ืœ ืชืฆื•ืจื” ื™ืฉ ื™ื•ืชืจ ืžื“ื™ืกืง ืื—ื“.

ื•ื”ืฉืืœื” ื”ืฉื ื™ื™ื” ืฉืืฉืงื•ืœ ื”ื™ื ื›ื™ืฆื“ ืœืคืขื ื— (ื–ื• ื ืงื•ื“ืช ื”ืžืคืชื— ืฉืœ ื”ืžืืžืจ). ื•ืขืœ ื–ื” ื ื“ื‘ืจ ืœื”ืœืŸ, ืœื›ื• ืžืชื—ืช ืœืกืฃ!

ืœืจื•ื‘, ื‘ืื™ื ื˜ืจื ื˜, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืงื•ื‘ืฅ ืžืคืชื— (ื”ื•ืกืคื” ืขืฆืžื™ืช ืœื—ืจื™ืฅ ืœืคื ื™ ื›ืŸ ืขืœ ื™ื“ื™ ื”ืคืงื•ื“ื” - cryptsetup luksAddKey), ืื• ื‘ื—ืจื™ื’ื™ื ื ื“ื™ืจื™ื (ื‘ืื™ื ื˜ืจื ื˜ ื‘ืฉืคื” ื”ืจื•ืกื™ืช ื™ืฉ ืžืขื˜ ืžืื•ื“ ืžื™ื“ืข) - ื”ืกืงืจื™ืคื˜ decrypt_derived ืžืžื•ืงื ื‘-/lib/cryptsetup/script/ (ื›ืžื•ื‘ืŸ, ื™ืฉ ื“ืจื›ื™ื ืื—ืจื•ืช, ืื‘ืœ ื”ืฉืชืžืฉืชื™ ื‘ืฉืชื™ ืืœื”, ืฉื”ื™ื•ื• ืืช ื”ื‘ืกื™ืก ืœืžืืžืจ). ื”ืฉืชื“ืœืชื™ ื’ื ืœื”ื›ืœืœื” ืื•ื˜ื•ื ื•ืžื™ืช ืžืœืื” ืœืื—ืจ ืืชื—ื•ืœื™ื, ืœืœื ืคืงื•ื“ื•ืช ื ื•ืกืคื•ืช ื‘ืงื•ื ืกื•ืœื”, ื›ืš ืฉื”ื›ืœ "ื™ืขืฃ" ืœื™ ื‘ื‘ืช ืื—ืช. ืœื›ืŸ, ืœืžื” ืœื—ื›ื•ืช? โ€”

ื‘ื•ื ื ืชื—ื™ืœ!

ื ื ื™ื— ืฉืžืขืจื›ืช, ื›ืžื• ื“ื‘ื™ืืŸ, ืžื•ืชืงื ืช ืขืœ ืžื—ื™ืฆืช ืงืจื™ืคื˜ื• sda3_crypt ื•ืชืจื™ืกืจ ื“ื™ืกืงื™ื ืžื•ื›ื ื™ื ืœื”ืฆืคื ื” ื•ืœื™ืฆื•ืจ ื›ืื•ื•ืช ื ืคืฉืš. ื™ืฉ ืœื ื• ื‘ื™ื˜ื•ื™ ืกื™ืกืžื” (ืกื™ืกืžื”) ืœืคืชื™ื—ืช ื”ื ืขื™ืœื” ืฉืœ sda3_crypt, ื•ืžืžื—ื™ืฆื” ื–ื• ื ืกื™ืจ ืืช ื”-"hash" ืžื”ืกื™ืกืžื” ื‘ืžืขืจื›ืช ื”ืคื•ืขืœืช (ืžืคื•ืขื ื—ืช) ื•ื ื•ืกื™ืฃ ืื•ืชื” ืœืฉืืจ ื”ื“ื™ืกืงื™ื. ื”ื›ืœ ืืœืžื ื˜ืจื™, ื‘ืงื•ื ืกื•ืœื” ืื ื• ืžื‘ืฆืขื™ื:

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

ื›ืืฉืจ X ื”ื•ื ื”ื“ื™ืกืงื™ื, ื”ืžื—ื™ืฆื•ืช ื•ื›ื•' ืฉืœื ื•.

ืœืื—ืจ ื”ืฆืคื ืช ื”ื“ื™ืกืงื™ื ื‘"hash" ืžื‘ื™ื˜ื•ื™ ื”ืกื™ืกืžื” ืฉืœื ื•, ืฆืจื™ืš ืœื‘ืจืจ ืืช ื”-UUID ืื• ื”ืžื–ื”ื” - ืชืœื•ื™ ืžื™ ืจื’ื™ืœ ืœืžื” ื•ืœืžื”. ืื ื• ืœื•ืงื—ื™ื ื ืชื•ื ื™ื ืž-/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 ืื• mdadm, ื™ื•ืจื›ื‘ ืœืœื ื‘ืขื™ื•ืช! ื•ื›ืœ ื–ื” ืœืคื ื™ ื”ื˜ืขื™ื ื” ืฉื™ืจื•ืชื™ ืœื™ื‘ื” ื•ืฉื™ืจื•ืชื™ื ื”ื–ืงื•ืงื™ื ืœื“ื™ืกืงื™ื/ืžืขืจื›ื™ื ืืœื•.

ืขื“ื›ื•ืŸ 1: ืื™ืš ืฉื ืœื‘ AEP, ืฉื™ื˜ื” ื–ื• ืคื•ืขืœืช ืจืง ืขื‘ื•ืจ LUKS1.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”