์‹œ์Šคํ…œ ๋ถ€ํŒ… ์‹œ LUKS ์ปจํ…Œ์ด๋„ˆ ์•”ํ˜ธ ํ•ด๋…

์ข‹์€ ๋ฐค๋‚ฎ ๋ชจ๋‘! ์ด ๊ฒŒ์‹œ๋ฌผ์€ LUKS ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  Linux(Debian, Ubuntu)์—์„œ ๋””์Šคํฌ๋ฅผ ํ•ด๋…ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ ํŒŒํ‹ฐ์…˜์„ ํ•ด๋…ํ•˜๋Š” ๋‹จ๊ณ„. ๊ทธ๋ฆฌ๊ณ  ์ธํ„ฐ๋„ท์—์„œ ๊ทธ๋Ÿฐ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์—๋Š” ์„ ๋ฐ˜์˜ ๋””์Šคํฌ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ /etc/crypttab์„ ํ†ตํ•ด ์ž˜ ์•Œ๋ ค์ง„ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋””์Šคํฌ๋ฅผ ํ•ด๋…ํ•˜๋Š” ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๋•Œ์˜ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ์ , ์ฆ‰ ํŒŒ์ผ์„ ์ฝ๋Š” ์ค‘์ž„์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํŠธ ํŒŒํ‹ฐ์…˜์„ ๋กœ๋“œ(๋งˆ์šดํŠธ)ํ•œ ํ›„์—๋งŒ, ํŠนํžˆ *_crypt ์žฅ์น˜์˜ ํŒŒํ‹ฐ์…˜์—์„œ ๋นŒ๋“œ๋œ ๊ฒฝ์šฐ ๋˜๋Š” ํŒŒํ‹ฐ์…˜์—์„œ ๋นŒ๋“œ๋œ mdadm raid์—์„œ๋„ ZFS ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” LUKS ์ปจํ…Œ์ด๋„ˆ์—์„œ parted๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ? ๋˜ํ•œ ์•„์ง ์–ด๋ ˆ์ด๊ฐ€ ์—†์ง€๋งŒ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ์ดˆ๊ธฐ ์‹œ์ž‘ ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ด๋ฏธ ํ•„์š”ํ•œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค(ํด๋Ÿฌ์Šคํ„ฐ๋ง๋œ Proxmox VE 5.x ๋ฐ ZFS over iSCSI๋กœ ์ž‘์—…).

ZFSoverISCSI์— ๋Œ€ํ•ด ์กฐ๊ธˆiSCSI๋Š” LIO๋ฅผ ํ†ตํ•ด ์ž‘๋™ํ•˜๋ฉฐ ์‹ค์ œ๋กœ iscsi ๋Œ€์ƒ์ด ์‹œ์ž‘๋˜๊ณ  ZVOL ์žฅ์น˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ๊ตฌ์„ฑ์—์„œ ํ•ด๋‹น ์žฅ์น˜๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๊ฒŒ์ŠคํŠธ ์‹œ์Šคํ…œ์ด ๋ถ€ํŒ…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ json ํŒŒ์ผ ๋ฐฑ์—…์„ ๋ณต์›ํ•˜๊ฑฐ๋‚˜ ๊ฐ VM์— ๋Œ€ํ•œ ์‹๋ณ„์ž๊ฐ€ ์žˆ๋Š” ์žฅ์น˜๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ์ด ์ˆ˜์‹ญ ๊ฐœ ์žˆ๊ณ  ๊ฐ ๊ตฌ์„ฑ์— ๋””์Šคํฌ๊ฐ€ 1๊ฐœ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋”์ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ๊ณ ๋ คํ•  ๋‘ ๋ฒˆ์งธ ์งˆ๋ฌธ์€ ํ•ด๋…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค (์ด ๊ธฐ์‚ฌ์˜ ์š”์ ์ž…๋‹ˆ๋‹ค). ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์•„๋ž˜์—์„œ ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปท ์•„๋ž˜๋กœ ๊ฐ€์‹ญ์‹œ์˜ค!

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ธํ„ฐ๋„ท์—์„œ ํ‚ค ํŒŒ์ผ์ด ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜(cryptsetup luksAddKey ๋ช…๋ น์— ์˜ํ•ด ์ด์ „ ์Šฌ๋กฏ์— ์ž์ฒด ์ถ”๊ฐ€๋จ), ๋“œ๋ฌธ ๊ฒฝ์šฐ(๋Ÿฌ์‹œ์•„์–ด ์ธํ„ฐ๋„ท์—์„œ๋Š” ์ •๋ณด๊ฐ€ ๊ฑฐ์˜ ์—†์Œ) - decrypt_derived ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. /lib/cryptsetup/script/์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ํ•œ ๋ฒˆ์— "๋‚ ์•„๊ฐˆ" ์ˆ˜ ์žˆ๋„๋ก ์ฝ˜์†”์—์„œ ์ถ”๊ฐ€ ๋ช…๋ น ์—†์ด ์žฌ๋ถ€ํŒ… ํ›„ ์™„์ „ํ•œ ์ž์œจ์  ํฌํ•จ์„ ์œ„ํ•ด ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์™œ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๊นŒ? โ€”

์‹œ์ž‘ํ•ฉ์‹œ๋‹ค!

Debian๊ณผ ๊ฐ™์€ ์‹œ์Šคํ…œ์ด sda3_crypt ์•”ํ˜ธํ™” ํŒŒํ‹ฐ์…˜์— ์„ค์น˜๋˜์–ด ์žˆ๊ณ  ๋งˆ์Œ๊ป ์•”ํ˜ธํ™”ํ•˜๊ณ  ์ƒ์„ฑํ•  ์ค€๋น„๊ฐ€ ๋œ 3๊ฐœ์˜ ๋””์Šคํฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” sdaXNUMX_crypt์˜ ์ž ๊ธˆ์„ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•œ ์•”ํ˜ธ(passphrase)๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด ํŒŒํ‹ฐ์…˜์—์„œ ์‹คํ–‰ ์ค‘์ธ(์•”ํ˜ธ ํ•ด๋…๋œ) ์‹œ์Šคํ…œ์˜ ์•”ํ˜ธ์—์„œ "ํ•ด์‹œ"๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋””์Šคํฌ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๊ธฐ๋ณธ์ด๋ฉฐ ์ฝ˜์†”์—์„œ ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

/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 ์ •๋ณด -a -n /dev/sdX | egrep '๋ณด๊ณ |๋“œ๋ผ์ด๋ฒ„'.

์ด์ œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ณ  ๋ชจ๋“  ํŒŒ์ผ์ด ์ค€๋น„๋˜์—ˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ-initramfs -u -k ๋ชจ๋‘ -v, ๋กœ๊ทธ์ธ ์ค‘ ~ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์šฐ๋ฆฌ ์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰ ์˜ค๋ฅ˜. ์žฌ๋ถ€ํŒ…ํ•˜๊ณ  ์•”ํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋””์Šคํฌ ์ˆ˜์— ๋”ฐ๋ผ ์กฐ๊ธˆ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์‹œ์Šคํ…œ์ด ์‹œ์ž‘๋˜๊ณ  ์‹คํ–‰์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„, ์ฆ‰ ๋ฃจํŠธ ํŒŒํ‹ฐ์…˜์„ "๋งˆ์šดํŠธ"ํ•œ ํ›„ partprobe ๋ช…๋ น์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. LUKS ์žฅ์น˜ ๋ฐ ๋ชจ๋“  ์–ด๋ ˆ์ด์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ํŒŒํ‹ฐ์…˜์„ ์ฐพ์•„์„œ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. mdadm, ๋ฌธ์ œ ์—†์ด ์กฐ๋ฆฝ๋ฉ๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ์ด ๋ชจ๋“  ๊ฒƒ ๋กœ๋“œํ•˜๊ธฐ ์ „์— ํ•ต์‹ฌ ์„œ๋น„์Šค ๋ฐ ์ด๋Ÿฌํ•œ ๋””์Šคํฌ/์–ด๋ ˆ์ด๊ฐ€ ํ•„์š”ํ•œ ์„œ๋น„์Šค.

update1: ์–ด๋–ป๊ฒŒ ์•Œ์•„ ์ฐจ ๋ ธ๋˜ AEP, ์ด ๋ฐฉ๋ฒ•์€ LUKS1์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€