கணினி துவக்க நேரத்தில் LUKS கண்டெய்னரை மறைகுறியாக்குகிறது

அனைவருக்கும் நல்ல இரவும் பகலும்! LUKS தரவு குறியாக்கத்தைப் பயன்படுத்துபவர்களுக்கும், Linux (Debian, Ubuntu) இன் கீழ் வட்டுகளை மறைகுறியாக்க விரும்புபவர்களுக்கும் இந்த இடுகை பயனுள்ளதாக இருக்கும். ரூட் பகிர்வின் மறைகுறியாக்கத்தின் நிலை. மேலும் இதுபோன்ற தகவல்களை இணையத்தில் என்னால் கண்டுபிடிக்க முடியவில்லை.

மிக சமீபத்தில், அலமாரிகளில் உள்ள வட்டுகளின் எண்ணிக்கையில் அதிகரிப்புடன், /etc/crypttab வழியாக நன்கு அறியப்பட்ட முறையைப் பயன்படுத்தி வட்டுகளை மறைகுறியாக்குவதில் சிக்கலை எதிர்கொண்டேன். தனிப்பட்ட முறையில், இந்த முறையைப் பயன்படுத்துவதில் சில சிக்கல்களை நான் முன்னிலைப்படுத்துகிறேன், அதாவது கோப்பு படிக்கப்படுகிறது ரூட் பகிர்வை ஏற்றிய பிறகு (மவுண்ட்), இது ZFS இறக்குமதிகளை எதிர்மறையாக பாதிக்கிறது, குறிப்பாக அவை *_crypt சாதனத்தில் உள்ள பகிர்வுகளிலிருந்து சேகரிக்கப்பட்டிருந்தால் அல்லது பகிர்வுகளிலிருந்து சேகரிக்கப்பட்ட mdadm ரெய்டுகள். LUKS கன்டெய்னர்களில் பிரித்ததைப் பயன்படுத்தலாம் என்பதை நாங்கள் அனைவரும் அறிவோம், இல்லையா? மேலும், இன்னும் வரிசைகள் இல்லாதபோது, ​​பிற சேவைகளை முன்கூட்டியே தொடங்குவதில் சிக்கல், மற்றும் பயன்படுத்த எனக்கு ஏற்கனவே ஏதாவது தேவை (நான் iSCSI மூலம் கிளஸ்டர்டு Proxmox VE 5.x மற்றும் ZFS உடன் பணிபுரிகிறேன்).

ZFSoverISCSI பற்றி கொஞ்சம்iSCSI LIO வழியாக எனக்காக வேலை செய்கிறது, உண்மையில், iscsi இலக்கு தொடங்கும் போது ZVOL சாதனங்களைப் பார்க்கவில்லை, அது அவற்றை உள்ளமைவில் இருந்து நீக்குகிறது, இது விருந்தினர் அமைப்புகளை பூட் செய்வதைத் தடுக்கிறது. எனவே, காப்பு json கோப்பை மீட்டமைத்தல், அல்லது ஒவ்வொரு VM இன் அடையாளங்காட்டிகளுடன் சாதனங்களை கைமுறையாகச் சேர்ப்பது, இது போன்ற டஜன் கணக்கான இயந்திரங்கள் மற்றும் ஒவ்வொரு கட்டமைப்பிலும் 1 வட்டுக்கு மேல் இருக்கும் போது இது மிகவும் பயங்கரமானது.

நான் கருத்தில் கொள்ளும் இரண்டாவது கேள்வி எப்படி மறைகுறியாக்கம் செய்வது (இது கட்டுரையின் முக்கிய புள்ளி). இதைப் பற்றி கீழே பேசுவோம், வெட்டுக்குச் செல்லுங்கள்!

பெரும்பாலும் இணையத்தில் அவர்கள் ஒரு முக்கிய கோப்பைப் பயன்படுத்துகிறார்கள் (இது தானாகவே ஸ்லாட்டில் கட்டளையுடன் சேர்க்கப்பட்டது - cryptsetup luksAddKey), அல்லது அரிதான விதிவிலக்குகளில் (ரஷ்ய மொழி இணையத்தில் மிகக் குறைந்த தகவல்கள் உள்ளன) - decrypt_derived script, அமைந்துள்ளது /lib/cryptsetup/script/ (நிச்சயமாக, வேறு வழிகள் உள்ளன, ஆனால் நான் இந்த இரண்டையும் பயன்படுத்தினேன், இது கட்டுரையின் அடிப்படையை உருவாக்கியது). மறுதொடக்கத்திற்குப் பிறகு, கன்சோலில் கூடுதல் கட்டளைகள் இல்லாமல் முழு தன்னாட்சி செயல்படுத்துவதற்கும் நான் பாடுபட்டேன், இதனால் எல்லாம் எனக்கு இப்போதே "எடுத்துவிடும்". எனவே, ஏன் காத்திருக்க வேண்டும்? —

தொடங்குவோம்!

எடுத்துக்காட்டாக டெபியன், sda3_crypt கிரிப்டோ பகிர்வில் நிறுவப்பட்ட ஒரு அமைப்பு மற்றும் உங்கள் இதயம் விரும்பும் அனைத்தையும் குறியாக்கம் செய்து உருவாக்க ஒரு டஜன் வட்டுகள் தயாராக இருப்பதாக நாங்கள் கருதுகிறோம். sda3_crypt ஐ திறக்க எங்களிடம் ஒரு முக்கிய சொற்றொடர் (கடவுச்சொற்றொடர்) உள்ளது, மேலும் இந்த பிரிவில் இருந்து இயங்கும் (மறைகுறியாக்கப்பட்ட) கணினியில் கடவுச்சொல்லின் "ஹாஷ்" ஐ அகற்றி மற்ற வட்டுகளில் சேர்ப்போம். எல்லாம் ஆரம்பமானது, கன்சோலில் நாங்கள் செயல்படுத்துகிறோம்:

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

X என்பது நமது வட்டுகள், பகிர்வுகள் போன்றவை.

எங்கள் முக்கிய சொற்றொடரில் இருந்து ஒரு ஹாஷ் மூலம் வட்டுகளை குறியாக்கம் செய்த பிறகு, நீங்கள் 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

../டிக்ரிப்ட் இன் உள்ளடக்கங்கள்

#!/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 info -a -n /dev/sdX | எக்ரேப் 'தோற்றம்|டிரைவர்'.

இப்போது நாங்கள் முடித்து, அனைத்து கோப்புகளும் இடத்தில் உள்ளன, நாங்கள் இயக்குகிறோம் update-initramfs -u -k அனைத்து -வி, பதிவு செய்வதில் இருக்கக்கூடாது எங்கள் ஸ்கிரிப்ட்களை செயல்படுத்துவதில் பிழைகள். நாங்கள் மறுதொடக்கம் செய்கிறோம், முக்கிய சொற்றொடரை உள்ளிட்டு, வட்டுகளின் எண்ணிக்கையைப் பொறுத்து சிறிது காத்திருக்கவும். அடுத்து, கணினி தொடங்கும் மற்றும் தொடக்கத்தின் இறுதி கட்டத்தில், அதாவது ரூட் பகிர்வை “மவுன்ட்” செய்த பிறகு, பார்ட்ப்ரோப் கட்டளை செயல்படுத்தப்படும் - இது LUKS சாதனங்களில் உருவாக்கப்பட்ட அனைத்து பகிர்வுகளையும் மற்றும் ZFS அல்லது எந்த வரிசையாக இருந்தாலும் அதைக் கண்டுபிடித்து எடுக்கும். mdadm, பிரச்சனைகள் இல்லாமல் கூடியிருக்கும்! மற்றும் இவை அனைத்தும் ஏற்றுவதற்கு முன் இந்த வட்டுகள்/வரிசைகள் தேவைப்படும் முக்கிய சேவைகள்.

புதுப்பிப்பு 1: எப்படி கவனிக்கப்பட்டார் AEP, இந்த முறை LUKS1 க்கு மட்டுமே வேலை செய்கிறது.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்