์ข์ ๋ฐค๋ฎ ๋ชจ๋! ์ด ๊ฒ์๋ฌผ์ 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: ์ด๋ป๊ฒ
์ถ์ฒ : habr.com