فك الحاوية حاوية في وقت التمهيد

يوم جيد ، ليلة! ستكون هذه المشاركة مفيدة لأولئك الذين يستخدمون تشفير بيانات LUKS ويريدون فك تشفير فك تشفير الأقراص تحت Linux (Debian، Ubuntu) في مرحلة فك تشفير القسم الجذر . ولم أتمكن من العثور على هذه المعلومات على الإنترنت.

في الآونة الأخيرة ، مع زيادة عدد الأقراص في الأرفف ، واجهت مشكلة فك تشفير الأقراص باستخدام أكثر من طريقة معروفة عبر / etc / crypttab. شخصياً ، أسلط الضوء على العديد من المشكلات التي تستخدم هذه الطريقة ، أي أن الملف يتم قراءته فقط بعد تثبيت قسم الجذر (التحميل) ، مما يؤثر سلبًا على استيراد ZFS ، خاصة إذا تم جمعها من أقسام على جهاز * _crypt أو غارات mdadm جمعت أيضا من الأقسام. نعلم جميعا أنه يمكنك استخدام افترقوا في حاويات LUKS؟ وأيضًا مشكلة البدء المبكر للخدمات الأخرى في حالة عدم وجود صفائف بعد ، ولكن يجب استخدام شيء ما (أعمل مع Proxmox VE 5.x و ZFS عبر iSCSI المجمعة).

قليلا عن ZFSoverISCSI
يعمل iSCSI من خلال LIO ، وفي الواقع عندما يبدأ هدف iscsi ولا يرى أجهزة ZVOL ، فإنه يزيلها ببساطة من التكوين ، مما يمنع أنظمة الضيف من التحميل. وبالتالي ، إما استعادة نسخة احتياطية من ملف json ، أو إضافة الأجهزة يدويًا مع معرفات كل جهاز VM ، وهو أمر فظيع للغاية عندما يكون هناك العشرات من هذه الأجهزة وهناك أكثر من قرص واحد في تكوين كل منها.

والسؤال الثاني الذي سأدرسه هو كيفية فك تشفير (هذه هي النقطة الرئيسية في المقال). وسوف نتحدث عن هذا أدناه ، انتقل تحت خفض!

في أغلب الأحيان ، على الإنترنت ، يستخدمون ملف مفتاح (الأمر 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 

المحتوى .. / نسخة
 #!/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 

المحتوى .. / الطرف
 #!/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 -a -n / dev / sdX | egrep 'looking | DRIVER' .

الآن وبعد أن انتهينا وجميع الملفات في مكانها ، وقم بتشغيل update-initramfs -u -k all -v ، يجب ألا تكون هناك أخطاء في تنفيذ البرامج النصية الخاصة بنا في التسجيل. نقوم بإعادة التشغيل ، وأدخل عبارة المرور وننتظر قليلاً ، اعتمادًا على عدد الأقراص. بعد ذلك ، سيبدأ النظام وفي المرحلة النهائية من بدء التشغيل ، أي بعد "تركيب" قسم الجذر ، سيتم تنفيذ أمر partprobe - سيجد وينتقل كل الأقسام التي تم إنشاؤها على أجهزة LUKS وأي صفائف ، سواء ZFS أو mdadm ، سيتم تجميعها دون مشاكل! وكل هذا قبل تحميل الخدمات والخدمات الأساسية التي تحتاج إلى هذه الأقراص / المصفوفات.

update1 : كما لاحظ AEP ، تعمل هذه الطريقة فقط مع LUKS1.

Source: https://habr.com/ru/post/ar457260/


All Articles