Π Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ° LUKS ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы

ВсСм Π΄ΠΎΠ±Ρ€ΠΎΠ³ΠΎ дня, Π½ΠΎΡ‡ΠΈ! Π­Ρ‚ΠΎΡ‚ пост Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… LUKS ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ decryptΠ΄Π΅ΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΡƒ дисков ΠΏΠΎΠ΄ Linux (Debian, Ubuntu) Π½Π° стадии Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ root Ρ€Π°Π·Π΄Π΅Π»Π°. И Ρ‚Π°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ я Π½Π°ΠΉΡ‚ΠΈ Π½Π΅ смог.

БовсСм Π½Π΅Π΄Π°Π²Π½ΠΎ с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ количСства дисков Π² ΠΏΠΎΠ»ΠΊΠ°Ρ…, столкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ дисков с использованиСм Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ извСстного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· /etc/crypttab. Π›ΠΈΡ‡Π½ΠΎ я Π²Ρ‹Π΄Π΅Π»ΡΡŽ нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ использования этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» читаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (mount) root-Ρ€Π°Π·Π΄Π΅Π»Π°, Ρ‡Ρ‚ΠΎ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ сказываСтся Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ ZFS, Π² частности Ссли ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ собраны ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π½Π° *_crypt устройствС, ΠΈΠ»ΠΈ ΠΆΠ΅ mdadm Ρ€Π΅ΠΉΠ΄Ρ‹, собранныС Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². ΠœΡ‹ ΠΆΠ΅ всС Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ parted Π½Π° LUKS ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…? И Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π°Π½Π½Π΅Π³ΠΎ старта Π΄Ρ€ΡƒΠ³ΠΈΡ… слуТб, ΠΊΠΎΠ³Π΄Π° массивов Π΅Ρ‰Π΅ Π½Π΅Ρ‚, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π°Π΄ΠΎ (я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ с кластСризованным Proxmox VE 5.x ΠΈ ZFS over iSCSI).

НСмного ΠΎ ZFSoverISCSIiSCSI Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρƒ мСня Ρ‡Π΅Ρ€Π΅Π· LIO, ΠΈ собствСнно ΠΊΠΎΠ³Π΄Π° стартуСт iscsi-Ρ‚Π°Ρ€Π³Π΅Ρ‚ ΠΈ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ZVOL устройств, ΠΎΠ½ ΠΈΡ… просто-напросто удаляСт ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π΄Π°Π΅Ρ‚ возмоТности Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ гостСвым систСмам. ΠžΡ‚ΡΡŽΠ΄Π° Π»ΠΈΠ±ΠΎ восстановлСниС бэкапа json Ρ„Π°ΠΉΠ»Π°, Π»ΠΈΠ±ΠΎ Ρ€ΡƒΡ‡Π½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ устройств с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ VM, Ρ‡Ρ‚ΠΎ просто уТас, ΠΊΠΎΠ³Π΄Π° Ρ‚Π°ΠΊΠΈΡ… машин дСсятки ΠΈ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ 1 диска.

И Π²Ρ‚ΠΎΡ€ΠΎΠΉ вопрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ, это Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΡƒ (это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡΡ‚Π°Ρ‚ΡŒΠΈ). И ΠΎΠ± этом ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½ΠΈΠΆΠ΅, Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚!

Π§Π°Ρ‰Π΅ всСго Π½Π° просторах ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ» (само-собой Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π΄ этим Π² слот ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ β€” cryptsetup luksAddKey), Π»ΠΈΠ±ΠΎ Π² Ρ€Π΅Π΄ΠΊΠΈΡ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… (Π² русско-язычном ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΎΡ‡Π΅Π½ΡŒ скудная информация) β€” скрипт decrypt_derived, Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π² /lib/cryptsetup/script/ (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ способы, Π½ΠΎ я использовал ΠΈΠΌΠ΅Π½Π½ΠΎ эти Π΄Π²Π°, Ρ‡Ρ‚ΠΎ ΠΈ Π»Π΅Π³Π»ΠΎ Π² основу ΡΡ‚Π°Ρ‚ΡŒΠΈ). Π’Π°ΠΊ ΠΆΠ΅ я стрСмился ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌΡƒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ, Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ… Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ Π² консоли, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ мСня всё Β«Π²Π·Π»Π΅Ρ‚Π°Π»ΠΎΒ» сразу. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π·Π°Ρ‡Π΅ΠΌ ΠΆΠ΄Π°Ρ‚ΡŒ? β€”

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Π΅ΠΌ!

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ систСму, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Debian, ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Π½Π° crypto-Ρ€Π°Π·Π΄Π΅Π» sda3_crypt ΠΈ дСсяток дисков, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ созданию Ρ‡Π΅Π³ΠΎ Π΄ΡƒΡˆΠ΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. ΠœΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ„Ρ€Π°Π·Ρƒ (passphrase) для Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ 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 ‘looking|DRIVER’.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ ΠΈ всС Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° мСстС, запускаСм update-initramfs -u -k all -v, Π² Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ошибок выполнСния Π½Π°ΡˆΠΈΡ… скриптов. ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡΡ, Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ-Ρ„Ρ€Π°Π·Ρƒ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΆΠ΄Ρ‘ΠΌ, Π² зависимости ΠΎΡ‚ количСства дисков. Π”Π°Π»Π΅Π΅ систСма запустится ΠΈ Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ стадии запуска, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ послС Β«ΠΌΠ°ΡƒΠ½Ρ‚ΠΈΠ½Π³Π°Β» root-Ρ€Π°Π·Π΄Π΅Π»Π°, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° partprobe β€” ΠΎΠ½Π° Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΈ ΠΏΠΎΠ΄Ρ†Π΅ΠΏΠΈΡ‚ всС созданныС Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Π½Π° LUKS устройствах ΠΈ Π»ΡŽΠ±Ρ‹Π΅ массивы, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ZFS ΠΈΠ»ΠΈ mdadm собСрутся Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ! И всё это Π΄ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ основных слуТб ΠΈ сСрвисов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½Ρ‹ эти диски/массивы.

update1: Как Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» AEP, Π΄Π°Π½Π½Ρ‹ΠΉ способ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для LUKS1.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com