
كل نظام هو حل وسط بين الأمن وسهولة الاستخدام.
في NAS المدمج ، كانت هناك مشكلة خطيرة: كان من المستحيل إعادة تشغيل النظام دون وجوده ، مما قلل من مستوى توفر البيانات.
لم تكن هذه المشكلة حرجة ، حتى اللحظة التي بدأوا فيها بإيقاف طوارئ الكهرباء: لمدة ثلاثة أشهر ، مرتين لعدة ساعات. تم تصميم UPS للخلل على المدى القصير وليس من المفترض أن يعمل على البطاريات لأكثر من نصف ساعة (على الرغم من أنها في الحقيقة حوالي ساعة) ، ومع كل إغلاق من هذا القبيل ، من أجل إعادة تشغيل النظام ، اضطررت للذهاب إلى مدينة أخرى.
بفضل تلميح من ValdikSS ، تم حل هذه المشكلة. لكن ...

كنت بحاجة إلى ربط الواجهة وفتح SSH عن بعد. ولم أجد دليلًا يمكن تنفيذه على الفور حتى يعمل كما أحتاج.
لذلك ، أحمل الإصدار الخاص بي من الحل مع الترابط و IP الديناميكي ، حيث يمكن فتح النظام ، محليًا وعن بُعد.
أذكرك أنه من أجل تنفيذ هذه الإعدادات ، يجب أن يكون لديك وصول مادي محلي إلى قدرات NAS والتمهيد الاحتياطي.
الترابط في initramfs
نظرًا لأنه في NAS ، يتم الجمع بين واجهتين في قناة واحدة ، فقد تقرر أيضًا القيام بذلك عند التمهيد.
من السؤال "استخدام NFS-root مع واجهات مرتبطة" أخذت النص. ساعدت المقالة "كيفية إدارة ارتباط لينكس دون ifenslave باستخدام sysfs" في إنشاء الترابط.
تحتاج أولاً إلى تضمين الوحدات النمطية في initramfs المستخدمة لتشغيل الشبكة. يتم ذلك باستخدام الأمر التالي:
while read m _; do /sbin/modinfo -F filename "$m"; done </proc/modules | sed -nr "s@^/lib/modules/`uname -r`/kernel/drivers/net(/.*)?/([^/]+)\.ko\$@\2@p" >> /etc/initramfs-tools/modules
الآن نسخ النصين إلى /etc/initramfs-tools/scripts/
.
الأول مطلوب من أجل رفع الواجهات في الترابط:
/ etc / initramfs-tools / scripts / init-premount / 00_bonding_init والثاني هو تعطيل واجهة الترابط بينما يستمر التحميل:
/ etc / initramfs-tools / scripts / init-bottom / iface_down إذا لم يتم ذلك ، فلن تعمل الشبكة بعد التمهيد.
لا تنس إعطاء الإذن بتنفيذ النصوص البرمجية:
chmod +x /etc/initramfs-tools/scripts/init-premount/00_bonding_init /etc/initramfs-tools/scripts/init-bottom/iface_down
يبقى فقط لتعيين الواجهات التي سيتم تضمينها في الترابط والمعلمات للحصول على العنوان.
سيتم الحصول على العنوان عبر DHCP ، لأنه سيكون للربط نفس MAC كما هو الحال بعد التمهيد ، لأن جهاز التوجيه سيصدر عنوان IP ثابتًا ويعيد توجيه المنافذ.
أحصل على الواجهات تلقائيًا من تلك المضمنة في السندات 0 أثناء تشغيل NAS:
sed -i "s/\(GRUB_CMDLINE_LINUX_DEFAULT=\)\"\(.*\)\"/\1\"\2 $(echo -n ip=:::::bond0:dhcp bondslaves=$(sed -e 's/ /,/' /sys/class/net/bond0/bonding/slaves))\"/" /etc/default/grub
أخيرًا ، حدّث تهيئة GRUB وصورة initramfs:
update-grub update-initramfs -u -k $(uname -r)
هذا كل شيء. إذا تم تكوين كل شيء بشكل صحيح ، بعد إعادة التشغيل وبدء البرنامج النصي لبدء التشغيل في initrmafs ، ستبدأ عمليات ping على IP NAS ، على الرغم من حقيقة أن نظام التشغيل لم يتم تحميله بعد.
ألاحظ أن إعداد الترابط في Dracut أصبح أسهل كثيرًا ، نظرًا لوجود نصوص برمجية بالفعل في التسليم .
خادم SSH في initramfs
قم بتثبيت الحزمة لتمكين Dropbear SSH في initramfs:
apt-get install dropbear-initramfs
سيتم تضمين Dropbear SSH في initrmafs تلقائيًا ، وسيبدأ إذا تم رفع واجهة شبكة واحدة على الأقل بعنوان IP في مرحلة مبكرة من التمهيد.
بعد ذلك ، قم بتحويل مفتاح Dropbear إلى تنسيق OpenSSH وأغلقه بكلمة مرور:
/usr/lib/dropbear/dropbearconvert dropbear openssh \ /etc/dropbear/dropbear_rsa_host_key \ id_rsa dropbearkey -y -f /etc/dropbear/dropbear_rsa_host_key | \ grep "^ssh-rsa " > id_rsa.pub ssh-keygen -p -f id_rsa
يتم id_rsa
مفتاح id_rsa
إلى الجهاز الذي سيتم تنفيذ إلغاء القفل به. سأفترض أنه سيتم نسخه إلى دليل ~/.ssh/dropbear
.
في /etc/dropbear-initramfs/authorized_keys
، يجب تحديد بصمات المفتاح والمعلمات لكل مفتاح.
في الوقت الحالي ، ما عليك سوى إضافة بصمة مفتاح واحد ، والتي تحتاج إلى تشغيل الأمر التالي لها:
echo 'no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/unlock"' $(cat id_rsa.pub) >> /etc/dropbear-initramfs/authorized_keys
ليست هناك حاجة إلى أغلفة مذكورة في المقالات ، /bin/unlock
- البرنامج النصي للنظام (cryptroot-unlock).
هذا هو شكل /etc/dropbear-initramfs/authorized_keys
في النهاية:
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/unlock" ssh-rsa AAAA...XDa root@nas
تحديث صورة GRUB config و initramfs وإعادة التشغيل:
update-grub update-initramfs -u -k $(uname -r) reboot
من الجهاز الذي نسخت المفتاح ، أصبح من الممكن الآن الاتصال بـ NAS وفتح:
$ ssh -i .ssh/dropbear/id_rsa_initram -o UserKnownHostsFile=.ssh/dropbear/known_hosts root@nas.NAS.cloudns.cc Enter passphrase for key '.ssh/dropbear/id_rsa_initram': X11 forwarding request failed on channel 0 Please unlock disk root_crypt1 (/dev/disk/by-id/ata-Samsung_SSD_850_PRO_256GB-part3):
بعد ذلك ، ستحصل وحدة التحكم باستمرار على خطأ حول عدم وجود حجة ( ash: -gt: argument expected
) ، ولكن سيتم إلغاء القفل. هذا خطأ في البرنامج النصي لإلغاء تأمين النظام ولا يؤثر على أي شيء (يتم تصحيح الخطأ بسهولة ، ولكن لا تعالجه الأغلفة).
يمكن العثور على مزيد من التفاصيل في هذه المقالات:
تصحيح الأخطاء
للتصحيح ، يمكنك إدراج مكالمة إلى /bin/sh
في البرنامج النصي 00_bonding_init
بعد:
case $1 in prereqs) echo "${PREREQS}"; exit 0;; esac
عندما يتم حل مشكلات الربط ، استبدل command="/bin/unlock"
command="/bin/sh"
في command="/bin/sh"
authorized_keys
.
بعد الاتصال عبر SSH ، سيظهر لك غلاف يمكنك استخدامه لتصحيح الأخطاء.