فك تشفير LUKS عن بُعد عبر SSH: dropbear-initramfs وcryptroot-unlock
افتح جذر LUKS على خادم بعيد أثناء الإقلاع: ثبّت dropbear-initramfs، وأضف مفتاحك، واضبط المنفذ وعنوان IP، وأعد بناء initramfs، ثم ادخل عبر SSH وشغّل cryptroot-unlock.
باختصار: ثبّت `dropbear-initramfs`، وضع مفتاح SSH العام الخاص بك في `/etc/dropbear/initramfs/authorized_keys` (Debian 12/13 وUbuntu 24.04)، وامنح initramfs إعدادات شبكة، وشغّل `update-initramfs -u` وأعد التشغيل. بينما ينتظر الخادم عبارة المرور، ادخل عبر SSH إلى خادم Dropbear الصغير على منفذه الخاص وشغّل `cryptroot-unlock`؛ بعدها يكمل الإقلاع بشكل طبيعي.
يفترض هذا الدليل أن نظام ملفات الجذر موجود أصلاً على LUKS، كما في دليل تشفير الجذر بـ LUKS، وأن `/boot` غير مشفر، وهو الإعداد الافتراضي في مثبّتَي Debian وUbuntu. يعمل على أي VPS بتقنية KVM تتحكم فيه بالنواة وinitramfs، وهو أساس معقول قبل أن تضع على القرص خدمات مثل تلك الموجودة في حزمة استضافة ذاتية على VPS صغير.
كيف يعمل فك التشفير عن بُعد
في نظام بجذر مشفر، تحمّل النواة أولاً initramfs، وهو نظام ملفات جذر مؤقت صغير مخزّن دون تشفير في `/boot`. مهمته العثور على جهاز LUKS، وطلب عبارة المرور، وفتحه، ثم تسليم التحكم إلى الجذر الحقيقي. عادةً لا يظهر الطلب إلا على وحدة التحكم المحلية.
تضيف حزمة `dropbear-initramfs` ثلاثة أشياء إلى initramfs: خادم Dropbear SSH، وخطوة إعداد الشبكة، والأداة المساعدة `cryptroot-unlock`. يبدأ Dropbear قبل طلب عبارة المرور، ولا يقبل إلا تسجيلات الدخول بالمفتاح العام من المفاتيح التي ضمّنتها، وتمرر `cryptroot-unlock` عبارة المرور إلى طلب `cryptsetup` المنتظر. بعد فتح الجذر، يُنهي initramfs عمل Dropbear ويبدأ خادم OpenSSH الحقيقي كالمعتاد.
مسارات الملفات تختلف بين الإصدارات
انتقل مجلد الإعدادات مع وصول Dropbear 2022.83. كثير من الشروحات القديمة لا تزال تعرض المسار القديم، والمفتاح الموضوع هناك يُتجاهل بصمت في الإصدارات الحالية. تحقق من إصدارك قبل نسخ الأوامر.
Note · ملف الخيارات هو `dropbear.conf` في المجلد نفسه في كل الإصدارات. ومفاتيح المضيف الخاصة بـ initramfs موجودة هناك أيضاً (`dropbear_ed25519_host_key` وأخواتها) وهي منفصلة عن مفاتيح مضيف OpenSSH في النظام العامل.
| الإصدار | مجلد الإعدادات | ملف المفاتيح |
|---|---|---|
| Debian 13 (trixie) | `/etc/dropbear/initramfs/` | `/etc/dropbear/initramfs/authorized_keys` |
| Debian 12 (bookworm) | `/etc/dropbear/initramfs/` | `/etc/dropbear/initramfs/authorized_keys` |
| Ubuntu 24.04 (noble) | `/etc/dropbear/initramfs/` | `/etc/dropbear/initramfs/authorized_keys` |
| Debian 11 وUbuntu 22.04 والأقدم | `/etc/dropbear-initramfs/` | `/etc/dropbear-initramfs/authorized_keys` |
الإعداد خطوة بخطوة على Debian 12/13 وUbuntu 24.04
- 01.ثبّت الحزمة: `apt install dropbear-initramfs`. ظهور تحذير بشأن ملف `authorized_keys` مفقود أو غير صالح في هذه المرحلة أمر متوقع.
- 02.أضف مفتاحك العام، ويفضّل أن يكون مفتاح Ed25519 مخصصاً، إلى `/etc/dropbear/initramfs/authorized_keys`، مفتاحاً واحداً في كل سطر، وقيّده بحيث لا يستطيع فعل شيء سوى فك التشفير.
- 03.اضبط خيارات Dropbear في `/etc/dropbear/initramfs/dropbear.conf`، بما فيها منفذ غير افتراضي كي لا يتعارض مفتاح مضيف initramfs مع مفتاح مضيف SSH العادي في `known_hosts`.
- 04.اضبط شبكة initramfs عبر معامل النواة `ip=` (ثابت) أو اعتمد على DHCP إن كانت شبكة الـ VPS تدعمه.
- 05.أعد بناء initramfs بالأمر `update-initramfs -u`، وإن غيّرت سطر أوامر النواة فشغّل `update-grub`.
- 06.أعد التشغيل مع إبقاء الوصول إلى وحدة التحكم مفتوحاً كخطة بديلة، ثم اتصل وشغّل `cryptroot-unlock`.
apt install dropbear-initramfs
# 1. Key (forced command: the key can only unlock)
echo 'no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/cryptroot-unlock" ssh-ed25519 AAAA...yourkey unlock@laptop' \
> /etc/dropbear/initramfs/authorized_keys
chmod 600 /etc/dropbear/initramfs/authorized_keys
# 2. Options in /etc/dropbear/initramfs/dropbear.conf
# -p 2222 listen on port 2222
# -s disable password logins
# -j -k no local/remote port forwarding
# -I 300 drop idle sessions after 300 s
DROPBEAR_OPTIONS="-p 2222 -s -j -k -I 300"
# 3. Rebuild
update-initramfs -uإعداد الشبكة في initramfs
لا يقرأ initramfs ملف `/etc/network/interfaces` ولا netplan ولا systemd-networkd. بل يستخدم معامل النواة `ip=`، أو سطر `IP=` في `/etc/initramfs-tools/initramfs.conf`. إن لم يُضبط أي منهما، يحاول DHCP على كل الواجهات، وهذا يعمل في كثير من السحابات لكنه غير مضمون على VPS بعنوان ثابت.
الصيغة هي `ip=<client-ip>::<gateway-ip>:<netmask>:<hostname>:<device>:off`. استخدم القيم من `ip -4 addr` و`ip route` في النظام العامل. اسم الواجهة داخل initramfs عادةً هو الاسم المتوقع نفسه (مثل `ens3` أو `eth0`)؛ وإن لم تكن متأكداً، فاترك حقل الجهاز فارغاً فتُستخدم الواجهة الأولى. IPv4 هو الخيار الموثوق هنا، لأن دعم IPv6 في خطوة شبكة initramfs محدود.
# /etc/default/grub (static IPv4 example, documentation addresses)
GRUB_CMDLINE_LINUX="ip=203.0.113.10::203.0.113.1:255.255.255.0::ens3:off"
update-grub
update-initramfs -u
# From your workstation after reboot:
ssh -p 2222 [email protected]
# without the forced command, type: cryptroot-unlockفك التشفير والاستخدام اليومي
بعد إعادة التشغيل، انتظر حتى يستجيب الخادم على المنفذ 2222، ثم اتصل بالمستخدم `root`. مع الأمر الإجباري من خطوة الإعداد، يبدأ `cryptroot-unlock` فوراً ويطلب عبارة مرور LUKS؛ ومن دونه تحصل على صدفة BusyBox وتكتب `cryptroot-unlock` بنفسك. عند النجاح تُغلق الجلسة، ويكمل initramfs الإقلاع، وبعد دقيقة يستجيب خادم SSH العادي على المنفذ 22، محصّناً كما في دليل تحصين SSH.
استخدم مدخلاً منفصلاً في `known_hosts` لمنفذ فك التشفير، مثل كتلة `Host myserver-unlock` في `~/.ssh/config` مع `Port 2222` و`HostKeyAlias myserver-unlock`. في كل تحديث للنواة، يعيد Debian وUbuntu توليد initramfs ويحتفظان بمفتاح Dropbear وخياراته، لكن اختبر إعادة تشغيل واحدة بعد الترقيات الكبرى.
- ▹الاتصال مرفوض: إعدادات الشبكة خاطئة؛ تحقق من قيم `ip=` على وحدة التحكم.
- ▹تحذير مفتاح المضيف: أنت تصل إلى مفتاح مضيف initramfs تحت الاسم المستعار العادي؛ استخدم الاسم المستعار المنفصل.
- ▹يقول `cryptroot-unlock` إنه لا توجد أجهزة منتظرة: النظام أقلع بالفعل، أو أن `/etc/crypttab` يفتقد مدخل الجذر.
- ▹تغييرات المفاتيح بلا أثر: عدّلت المسار القديم `/etc/dropbear-initramfs/` أو نسيت `update-initramfs -u`.
نموذج التهديد: ما الذي يحميه فك التشفير عن بُعد وما لا يحميه
LUKS مع فك التشفير عن بُعد يحمي البيانات الساكنة. القرص المطفأ، أو صورة القرص المنسوخة، أو القرص المُخرج من الخدمة، أو الخادم المصادَر وهو مطفأ، لا يكشف إلا نصاً مشفراً. وهذا ضمان حقيقي ومفيد لأي VPS.
لكنه لا يحمي الخادم العامل ممن يتحكم بالمضيف. فـ initramfs والنواة في `/boot` غير مشفرين، لذا يستطيع من لديه وصول إلى المشرف الافتراضي أو وحدة التحكم تعديلهما لتسجيل عبارة مرورك في الإقلاع التالي، ويمكن قراءة ذاكرة الآلة الافتراضية العاملة، بما فيها المفتاح الرئيسي لـ LUKS، من المضيف. تعامل مع فك التشفير عن بُعد كحماية من المصادرة وتسرب الأقراص، لا من مشرف افتراضي معادٍ. والشذوذات عند الإقلاع، مثل تغيّر مفتاح مضيف Dropbear، تستحق التحقيق.
Note · على VPS من NoctisNode تحصل على صلاحيات root كاملة على KVM مع صور Debian 13/12 وUbuntu 24.04، فيعمل هذا الإعداد كما هو موصوف. والحد نفسه ينطبق هنا كما في كل مكان: التشفير يحمي القرص، لا الضيف العامل. راجع شرح VPS بلا سجلات لمعرفة ما يسجله جانب المزوّد وما لا يسجله.
الأسئلة الشائعة
Qأين ملف authorized_keys الخاص بـ dropbear initramfs على Debian 12؟
Aعلى Debian 12 و13 وعلى Ubuntu 24.04 هو `/etc/dropbear/initramfs/authorized_keys`. أما Debian 11 وUbuntu 22.04 فكانا يستخدمان `/etc/dropbear-initramfs/authorized_keys`. شغّل `update-initramfs -u` بعد أي تغيير.
Qماذا يفعل cryptroot-unlock؟
A`cryptroot-unlock` أداة مساعدة داخل initramfs تعثر على طلب عبارة مرور LUKS المعلّق وتمرر إليه العبارة التي تكتبها. بمجرد فتح الجهاز، يكمل الإقلاع وتنتهي جلسة Dropbear.
Qكيف أغيّر منفذ SSH في dropbear-initramfs؟
Aاضبط `DROPBEAR_OPTIONS="-p 2222"` (مع أي خيارات أخرى) في `/etc/dropbear/initramfs/dropbear.conf`، ثم شغّل `update-initramfs -u` وأعد التشغيل.
Qهل فك تشفير LUKS عن بُعد عبر SSH آمن على VPS؟
Aيحمي البيانات على قرص مطفأ أو منسوخ. ولا يستطيع الحماية ممن لديه وصول إلى المشرف الافتراضي، إذ يمكنه تعديل initramfs غير المشفر أو قراءة ذاكرة الآلة الافتراضية العاملة.
Qهل يمكنني استخدام LUKS2 مع dropbear-initramfs؟
Aنعم. يجري فك التشفير في مساحة مستخدم Linux بواسطة `cryptsetup`، لذا يعمل LUKS2 مع Argon2id؛ راجع LUKS2 مقابل LUKS1 لفروق الصيغة.