سسٹم بوٹ کے وقت LUKS کنٹینر کو ڈکرپٹ کرنا

شب بخیر سب کو! یہ پوسٹ ان لوگوں کے لیے کارآمد ہو گی جو LUKS ڈیٹا انکرپشن کا استعمال کرتے ہیں اور لینکس (Debian، Ubuntu) کے تحت ڈسک کو ڈکرپٹ کرنا چاہتے ہیں۔ روٹ پارٹیشن کو ڈکرپٹ کرنے کے مراحل. اور مجھے انٹرنیٹ پر ایسی معلومات نہیں مل سکیں۔

ابھی حال ہی میں، شیلفوں میں ڈسکوں کی تعداد میں اضافے کے ساتھ، میں /etc/crypttab کے ذریعے زیادہ معروف طریقہ استعمال کرتے ہوئے ڈسکوں کو ڈکرپٹ کرنے کے مسئلے کا سامنا کرنا پڑا۔ ذاتی طور پر، میں اس طریقہ کو استعمال کرنے میں چند مسائل کو اجاگر کرتا ہوں، یعنی فائل پڑھی جا رہی ہے۔ روٹ پارٹیشن کو لوڈ کرنے (ماؤنٹ) کے بعد ہی، جو ZFS کی درآمدات کو منفی طور پر متاثر کرتا ہے، خاص طور پر اگر وہ *_crypt ڈیوائس پر پارٹیشنز سے بنائے گئے ہوں، یا mdadm raids بھی پارٹیشنز سے بنائے گئے ہوں۔ ہم سب جانتے ہیں کہ آپ LUKS کنٹینرز پر پارٹڈ استعمال کر سکتے ہیں، ٹھیک ہے؟ اور دیگر خدمات کے جلد آغاز کا بھی مسئلہ، جب ابھی تک کوئی صفیں نہیں ہیں، لیکن استعمال کریں مجھے پہلے ہی کسی چیز کی ضرورت ہے (میں کلسٹرڈ Proxmox VE 5.x اور ZFS کے ساتھ iSCSI پر کام کرتا ہوں)۔

ZFSoverISCSI کے بارے میں تھوڑا ساiSCSI میرے لیے LIO کے ذریعے کام کرتا ہے، اور اصل میں جب iscsi ٹارگٹ شروع ہوتا ہے اور ZVOL ڈیوائسز کو نہیں دیکھتا ہے، تو یہ انہیں صرف کنفیگریشن سے ہٹا دیتا ہے، جو گیسٹ سسٹم کو بوٹنگ سے روکتا ہے۔ اس لیے، یا تو json فائل کا بیک اپ بحال کرنا، یا دستی طور پر ہر VM کے لیے شناخت کنندگان کے ساتھ ڈیوائسز شامل کرنا، جو اس وقت خوفناک ہوتا ہے جب ایسی درجنوں مشینیں ہوں اور ہر کنفیگریشن میں 1 سے زیادہ ڈسک ہو۔

اور دوسرا سوال جس پر میں غور کروں گا وہ یہ ہے کہ ڈکرپٹ کیسے کیا جائے (یہ مضمون کا اہم نکتہ ہے)۔ اور ہم ذیل میں اس کے بارے میں بات کریں گے، کٹ کے نیچے جائیں!

اکثر، انٹرنیٹ پر، ایک کلیدی فائل کا استعمال کیا جاتا ہے (اس سے پہلے سلاٹ میں خود شامل کیا جاتا ہے کمانڈ - cryptsetup luksAddKey)، یا غیر معمولی استثناء میں (روسی زبان کے انٹرنیٹ پر بہت کم معلومات ہوتی ہیں) - decrypt_derived اسکرپٹ میں واقع ہے /lib/cryptsetup/script/ (یقینا، اور بھی طریقے ہیں، لیکن میں نے ان دونوں کو استعمال کیا، جس نے مضمون کی بنیاد بنائی)۔ میں نے کنسول میں کسی اضافی کمانڈ کے بغیر، ریبوٹس کے بعد مکمل خود مختار شمولیت کے لیے بھی کوشش کی، تاکہ سب کچھ میرے لیے ایک ساتھ "اُڑ" جائے۔ لہذا، کیوں انتظار کریں؟ -

آو شروع کریں!

آئیے فرض کریں کہ ڈیبیان کی طرح ایک سسٹم، sda3_crypt کرپٹو پارٹیشن پر انسٹال ہوا ہے اور درجن بھر ڈسکیں جو آپ کے دل کے مواد کے مطابق انکرپٹ اور تخلیق کرنے کے لیے تیار ہیں۔ ہمارے پاس 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

../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

اور آخری، اپ ڈیٹ-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 'دیکھ رہا ہے | ڈرائیور'.

اب جب کہ ہم کام کر چکے ہیں اور تمام فائلیں اپنی جگہ پر ہیں، چلائیں۔ اپ ڈیٹ-initramfs -u -k all -v، لاگنگ میں نہیں ہونا چاہئے ہماری اسکرپٹس پر عملدرآمد کی غلطیاں۔ ہم ریبوٹ کرتے ہیں، پاس فریز داخل کرتے ہیں اور ڈسک کی تعداد کے لحاظ سے تھوڑا انتظار کرتے ہیں۔ اس کے بعد، سسٹم شروع ہو گا اور لانچ کے آخری مرحلے پر، یعنی روٹ پارٹیشن کو "ماؤنٹ کرنے" کے بعد، پارٹ پروب کمانڈ کو عمل میں لایا جائے گا - یہ LUKS ڈیوائسز اور کسی بھی arrays پر بنائے گئے تمام پارٹیشنز کو تلاش کرے گا اور اٹھا لے گا، چاہے وہ ZFS ہو یا mdadm، مسائل کے بغیر جمع کیا جائے گا! اور یہ سب لوڈ کرنے سے پہلے بنیادی خدمات اور خدمات جن کو ان ڈسکوں / صفوں کی ضرورت ہے۔

اپ ڈیٹ 1: کیسے دیکھا AEPیہ طریقہ صرف LUKS1 کے لیے کام کرتا ہے۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں