ಸಿಸ್ಟಮ್ ಬೂಟ್ ಸಮಯದಲ್ಲಿ LUKS ಕಂಟೇನರ್ ಅನ್ನು ಡೀಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ

ಎಲ್ಲರಿಗೂ ಶುಭ ಹಗಲು ರಾತ್ರಿ! LUKS ಡೇಟಾ ಗೂಢಲಿಪೀಕರಣವನ್ನು ಬಳಸುವವರಿಗೆ ಮತ್ತು Linux (Debian, Ubuntu) ಅಡಿಯಲ್ಲಿ ಡಿಸ್ಕ್‌ಗಳನ್ನು ಡೀಕ್ರಿಪ್ಟ್ ಮಾಡಲು ಬಯಸುವವರಿಗೆ ಈ ಪೋಸ್ಟ್ ಉಪಯುಕ್ತವಾಗಿರುತ್ತದೆ. ಮೂಲ ವಿಭಾಗವನ್ನು ಡೀಕ್ರಿಪ್ಟ್ ಮಾಡುವ ಹಂತಗಳು. ಮತ್ತು ಇಂಟರ್ನೆಟ್ನಲ್ಲಿ ಅಂತಹ ಮಾಹಿತಿಯನ್ನು ನಾನು ಕಂಡುಹಿಡಿಯಲಾಗಲಿಲ್ಲ.

ತೀರಾ ಇತ್ತೀಚೆಗೆ, ಶೆಲ್ಫ್‌ಗಳಲ್ಲಿ ಡಿಸ್ಕ್‌ಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿನ ಹೆಚ್ಚಳದೊಂದಿಗೆ, ನಾನು /etc/crypttab ಮೂಲಕ ಹೆಚ್ಚು ತಿಳಿದಿರುವ ವಿಧಾನವನ್ನು ಬಳಸಿಕೊಂಡು ಡಿಸ್ಕ್‌ಗಳನ್ನು ಡೀಕ್ರಿಪ್ಟ್ ಮಾಡುವ ಸಮಸ್ಯೆಯನ್ನು ಎದುರಿಸಿದೆ. ವೈಯಕ್ತಿಕವಾಗಿ, ಈ ವಿಧಾನವನ್ನು ಬಳಸುವಲ್ಲಿ ನಾನು ಕೆಲವು ಸಮಸ್ಯೆಗಳನ್ನು ಹೈಲೈಟ್ ಮಾಡುತ್ತೇನೆ, ಅವುಗಳೆಂದರೆ ಫೈಲ್ ಅನ್ನು ಓದಲಾಗುತ್ತಿದೆ ರೂಟ್ ವಿಭಾಗವನ್ನು ಲೋಡ್ ಮಾಡಿದ ನಂತರ (ಮೌಂಟ್) ಮಾತ್ರ, ಇದು ZFS ಆಮದುಗಳ ಮೇಲೆ ಋಣಾತ್ಮಕ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ, ನಿರ್ದಿಷ್ಟವಾಗಿ ಅವುಗಳನ್ನು *_crypt ಸಾಧನದಲ್ಲಿನ ವಿಭಾಗಗಳಿಂದ ನಿರ್ಮಿಸಿದ್ದರೆ ಅಥವಾ ವಿಭಾಗಗಳಿಂದ ನಿರ್ಮಿಸಲಾದ mdadm ದಾಳಿಗಳು. ನೀವು LUKS ಕಂಟೈನರ್‌ಗಳಲ್ಲಿ ಪಾರ್ಟೆಡ್ ಅನ್ನು ಬಳಸಬಹುದು ಎಂದು ನಮಗೆಲ್ಲರಿಗೂ ತಿಳಿದಿದೆ, ಸರಿ? ಮತ್ತು ಇತರ ಸೇವೆಗಳ ಆರಂಭಿಕ ಪ್ರಾರಂಭದ ಸಮಸ್ಯೆ, ಇನ್ನೂ ಯಾವುದೇ ಸರಣಿಗಳಿಲ್ಲದಿದ್ದಾಗ, ಆದರೆ ಬಳಕೆ ನನಗೆ ಈಗಾಗಲೇ ಏನಾದರೂ ಅಗತ್ಯವಿದೆ (ನಾನು ಕ್ಲಸ್ಟರ್ಡ್ Proxmox VE 5.x ಮತ್ತು ZFS ಜೊತೆಗೆ iSCSI ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತೇನೆ).

ZFSoverISCSI ಬಗ್ಗೆ ಸ್ವಲ್ಪiSCSI LIO ಮೂಲಕ ನನಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ, ಮತ್ತು ವಾಸ್ತವವಾಗಿ, iscsi ಗುರಿಯು ಪ್ರಾರಂಭವಾದಾಗ ಮತ್ತು ZVOL ಸಾಧನಗಳನ್ನು ನೋಡದಿದ್ದಾಗ, ಅದು ಅವುಗಳನ್ನು ಕಾನ್ಫಿಗರೇಶನ್‌ನಿಂದ ಸರಳವಾಗಿ ತೆಗೆದುಹಾಕುತ್ತದೆ, ಇದು ಅತಿಥಿ ವ್ಯವಸ್ಥೆಗಳನ್ನು ಬೂಟ್ ಮಾಡುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ಆದ್ದರಿಂದ, json ಫೈಲ್ ಬ್ಯಾಕಪ್ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸುವುದು ಅಥವಾ ಪ್ರತಿ VM ಗಾಗಿ ಗುರುತಿಸುವಿಕೆಗಳೊಂದಿಗೆ ಸಾಧನಗಳನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಸೇರಿಸುವುದು, ಅಂತಹ ಹಲವಾರು ಯಂತ್ರಗಳು ಮತ್ತು ಪ್ರತಿ ಕಾನ್ಫಿಗರೇಶನ್ 1 ಕ್ಕಿಂತ ಹೆಚ್ಚು ಡಿಸ್ಕ್‌ಗಳನ್ನು ಹೊಂದಿರುವಾಗ ಸರಳವಾಗಿ ಭಯಾನಕವಾಗಿದೆ.

ಮತ್ತು ನಾನು ಪರಿಗಣಿಸುವ ಎರಡನೇ ಪ್ರಶ್ನೆ ಡೀಕ್ರಿಪ್ಟ್ ಮಾಡುವುದು ಹೇಗೆ (ಇದು ಲೇಖನದ ಪ್ರಮುಖ ಅಂಶವಾಗಿದೆ). ಮತ್ತು ನಾವು ಈ ಕೆಳಗೆ ಮಾತನಾಡುತ್ತೇವೆ, ಕಟ್ ಅಡಿಯಲ್ಲಿ ಹೋಗಿ!

ಹೆಚ್ಚಾಗಿ, ಇಂಟರ್ನೆಟ್‌ನಲ್ಲಿ, ಒಂದು ಪ್ರಮುಖ ಫೈಲ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ (ಈ ಮೊದಲು ಸ್ಲಾಟ್‌ಗೆ ಸ್ವಯಂ-ಕ್ರಿಪ್ಟ್ಸೆಟಪ್ ಲುಕ್ಸ್‌ಆಡ್‌ಕೆ ಆಜ್ಞೆಯಿಂದ ಸ್ವಯಂ-ಸೇರಿಸಲಾಗಿದೆ), ಅಥವಾ ಅಪರೂಪದ ವಿನಾಯಿತಿಗಳಲ್ಲಿ (ರಷ್ಯನ್ ಭಾಷೆಯ ಇಂಟರ್ನೆಟ್‌ನಲ್ಲಿ ಬಹಳ ಕಡಿಮೆ ಮಾಹಿತಿ ಇದೆ) - ಡಿಕ್ರಿಪ್ಟ್_ಡೆರೈವ್ಡ್ ಸ್ಕ್ರಿಪ್ಟ್ /lib/cryptsetup/script/ ನಲ್ಲಿ ಇದೆ (ಸಹಜವಾಗಿ, ಇತರ ಮಾರ್ಗಗಳಿವೆ, ಆದರೆ ನಾನು ಈ ಎರಡನ್ನು ಬಳಸಿದ್ದೇನೆ, ಅದು ಲೇಖನದ ಆಧಾರವಾಗಿದೆ). ಕನ್ಸೋಲ್‌ನಲ್ಲಿ ಯಾವುದೇ ಹೆಚ್ಚುವರಿ ಆಜ್ಞೆಗಳಿಲ್ಲದೆ, ರೀಬೂಟ್ ಮಾಡಿದ ನಂತರ ಪೂರ್ಣ ಸ್ವಾಯತ್ತ ಸೇರ್ಪಡೆಗಾಗಿ ನಾನು ಪ್ರಯತ್ನಿಸಿದೆ, ಇದರಿಂದ ಎಲ್ಲವೂ ನನಗೆ ಒಂದೇ ಬಾರಿಗೆ "ಫ್ಲೈ ಅಪ್" ಆಗುತ್ತದೆ. ಆದ್ದರಿಂದ, ಏಕೆ ನಿರೀಕ್ಷಿಸಿ? -

ಪ್ರಾರಂಭಿಸೋಣ!

sda3_crypt ಕ್ರಿಪ್ಟೋ ವಿಭಾಗದಲ್ಲಿ ಸ್ಥಾಪಿಸಲಾದ Debian ನಂತಹ ಸಿಸ್ಟಮ್ ಮತ್ತು ನಿಮ್ಮ ಹೃದಯದ ವಿಷಯಕ್ಕೆ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲು ಮತ್ತು ರಚಿಸಲು ಒಂದು ಡಜನ್ ಡಿಸ್ಕ್ ಸಿದ್ಧವಾಗಿದೆ ಎಂದು ಭಾವಿಸೋಣ. 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

../ಡಿಕ್ರಿಪ್ಟ್ ನ ವಿಷಯಗಳು

#!/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

../ಪಾರ್ಟ್‌ಕಾಪಿಯ ವಿಷಯಗಳು

#!/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 | ಎಗ್ರೆಪ್ 'ಲುಕಿಂಗ್|ಡ್ರೈವರ್'.

ಈಗ ನಾವು ಮುಗಿಸಿದ್ದೇವೆ ಮತ್ತು ಎಲ್ಲಾ ಫೈಲ್‌ಗಳು ಸ್ಥಳದಲ್ಲಿವೆ, ರನ್ ಮಾಡಿ update-initramfs -u -k ಎಲ್ಲಾ -v, ಲಾಗಿಂಗ್ನಲ್ಲಿ ಇರಬಾರದು ನಮ್ಮ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳ ಎಕ್ಸಿಕ್ಯೂಶನ್ ದೋಷಗಳು. ನಾವು ರೀಬೂಟ್ ಮಾಡುತ್ತೇವೆ, ಪಾಸ್ಫ್ರೇಸ್ ಅನ್ನು ನಮೂದಿಸಿ ಮತ್ತು ಡಿಸ್ಕ್ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಅವಲಂಬಿಸಿ ಸ್ವಲ್ಪ ನಿರೀಕ್ಷಿಸಿ. ಮುಂದೆ, ಸಿಸ್ಟಮ್ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ ಮತ್ತು ಉಡಾವಣೆಯ ಅಂತಿಮ ಹಂತದಲ್ಲಿ, ಅಂದರೆ ರೂಟ್ ವಿಭಾಗವನ್ನು "ಆರೋಹಿಸುವ" ನಂತರ, ಪಾರ್ಟ್‌ಪ್ರೋಬ್ ಆಜ್ಞೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗುತ್ತದೆ - ಇದು LUKS ಸಾಧನಗಳಲ್ಲಿ ಮತ್ತು ಯಾವುದೇ ರಚನೆಗಳಲ್ಲಿ ರಚಿಸಲಾದ ಎಲ್ಲಾ ವಿಭಾಗಗಳನ್ನು ಹುಡುಕುತ್ತದೆ ಮತ್ತು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ, ಅದು ZFS ಅಥವಾ mdadm, ಸಮಸ್ಯೆಗಳಿಲ್ಲದೆ ಜೋಡಿಸಲಾಗುವುದು! ಮತ್ತು ಇದೆಲ್ಲವೂ ಲೋಡ್ ಮಾಡುವ ಮೊದಲು ಈ ಡಿಸ್ಕ್/ಅರೇಗಳ ಅಗತ್ಯವಿರುವ ಕೋರ್ ಸೇವೆಗಳು ಮತ್ತು ಸೇವೆಗಳು.

ಅಪ್ಡೇಟ್ 1: ಹೇಗೆ ಗಮನಿಸಲಾಗಿದೆ ಎಇಪಿ, ಈ ವಿಧಾನವು LUKS1 ಗೆ ಮಾತ್ರ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ