دليل أمر chroot في أوبونتو: عزل الملفات وإنقاذ النظام

نظرة عامة

تُعد أداة chroot إحدى الآليات الجوهرية في أنظمة لينكس لإعادة تعيين الدليل الجذري الظاهري للعمليات الجارية، مما يُنشئ حاجزاً وقائياً يمنع تجاوز المسار المحدد. يستعرض هذا الدليل التطبيقي كيفية توظيف هذه التقنية لبناء مساحات اختبار مصغرة (Sandboxes)، واستخدامها كأداة حاسمة في عمليات الإنقاذ الطارئ للأنظمة المعطوبة عبر وسائط الإقلاع الحي، بالإضافة إلى تأمين اتصالات SFTP وحصر وصول المستخدمين داخل نطاق جغرافي محدد لملفاتهم.

المبادئ الأساسية لـ chroot وبناء سجن خفيف باستخدام BusyBox

لتجهيز أدنى بيئة تشغيلية مكتفية ذاتياً دون الحاجة إلى التعامل مع تشابك المكتبات المشتركة، نعتمد على حزمة BusyBox المبنية بربط ساكن (Statically Linked) عبر تنفيذ:

sudo apt-get update -qq && sudo apt-get install -y busybox-static

تثبيت حزمة busybox-static المستقلة

تتطلب البيئة المعزولة هيكلية مجلدات خاصة بها؛ لذا نقوم بإنشاء المسار المخصص لاحتواء الملفات التنفيذية داخل السجن التجريبي:

sudo mkdir -p /opt/mini-jail/bin

إنشاء الهيكل الدليلي للبيئة المصغرة

نقوم بعد ذلك بنسخ الملف التنفيذي الموحد إلى مسار السجن لتوفير صدفة الأوامر وأدوات إدارة الملفات الأساسية:

sudo cp /bin/busybox /opt/mini-jail/bin/

نسخ الملف الثنائي لأداة BusyBox

تقوم فكرة chroot على إيهام العملية بأن المسار الممرر إليها هو الجذر المطلق (/)، ما يقطع أي صلة بالهيكل الدليلي للنظام المضيف.
عند إطلاق الصدفة داخل /opt/mini-jail، يعرض استعراض الملفات محتويات هذا المجلد فقط باعتباره قمة الشجرة، مما يثبت نجاح العزل التام:

⚙️ [خيارات تشغيلية متقدمة]

--userspec=USER:GROUP : تحديد هوية المستخدم والمجموعة التي ستُسند إليها العمليات داخل البيئة المقيدة.
--groups=G_LIST : إسناد صلاحيات المجموعات الإضافية مفصولة بفواصل للعملية المنفذة.
--skip-chdir : منع التغيير التلقائي لدليل العمل الحالي إلى الجذر الجديد عند الدخول.

تنفيذ الصدفة واختبار استعراض الملفات داخل سجن BusyBox

بناء بيئة معزولة متكاملة لصدفة Bash مع استيفاء تبعيات ldd

عند الرغبة في تشغيل صدفة Bash القياسية مع أدوات النظام الاعتيادية، يتوجب توفير المكتبات المشتركة التي تعتمد عليها. نبدأ أولاً بإنشاء الشجرة الدليلية المطابقة لاحتياجات النظام:

sudo mkdir -p /opt/bash-jail/{bin,lib,lib64}

تجهيز مجلدات النظام ومكتبات الربط الديناميكي

ننقل البرمجيات المطلوبة مثل صدفة bash وأمر استعراض المجلدات ls إلى دليل البرامج الخاص بالبيئة:

sudo cp /bin/bash /bin/ls /opt/bash-jail/bin/

توفير الأدوات الأساسية داخل سجن Bash

نظراً لبناء هذه البرامج عبر الربط الديناميكي، ننسخ حزم المكتبات الأساسية لضمان عمل التعليمات البرمجية دون أخطاء:

sudo cp -a /lib/x86_64-linux-gnu /opt/bash-jail/lib/

نقل المكتبات المشتركة لمعمارية x86_64

نستكمل المتطلبات بنسخ المترجم الديناميكي (Dynamic Linker/Loader) والمكتبات المحورية ذات الصلة بمعمارية 64 بت:

sudo cp -a /lib64/* /opt/bash-jail/lib64/

إدراج الرابط الديناميكي ومكتبات lib64

نختبر الآن الدخول إلى البيئة المعزولة وتشغيل صدفة Bash مع فحص الدليل الجذري:

sudo chroot /opt/bash-jail /bin/bash -c "ls -la /"

توضح النتائج أن الصدفة تعمل في مساحة مستقلة تماماً؛ حيث تقتصر الرؤية على مجلدات bin وlib وlib64 الخاصة بالسجن، مؤكدةً تلبية جميع التبعيات بنجاح.

التحقق من تشغيل Bash المستقل داخل بيئة العزل

ربط أنظمة الملفات الافتراضية وصيانة الأنظمة المعطوبة

تعتمد عمليات استعادة الأنظمة العاجزة عن الإقلاع أو إصلاح مدير الإقلاع GRUB على وصل أقسام التخزين ثم الدخول إليها عبر chroot. ننشئ أولاً نقطة التثبيت المخصصة:

sudo mkdir -p /mnt/sysroot

إنشاء مسار تركيب نظام الملفات المراد صيانته

نقوم بربط نظام الملفات المستهدف على نقطة التثبيت المجهزة (في هذا المثال يتم ربط الجذر لغرض المحاكاة):

sudo mount --bind / /mnt/sysroot

ربط القسم المستهدف بنقطة التثبيت

لتوفير وصول مباشر للعتاد والأقسام التخزينية أثناء إجراءات الإصلاح، نربط شجرة أجهزة النواة من المضيف:

sudo mount --bind /dev /mnt/sysroot/dev

تمرير مجلد الأجهزة الافتراضي dev

تحتاج أدوات إدارة العمليات ومعلومات النواة للوصول إلى نظام الملفات المؤقت proc، فنقوم بربطه كالتالي:

sudo mount --bind /proc /mnt/sysroot/proc

ربط نظام الملفات الإجرائي proc داخل مسار الصيانة

ننقل واجهة تفاعل النواة ومعلومات تعريفات العتاد عبر ربط نظام sysfs:

sudo mount --bind /sys /mnt/sysroot/sys

تمرير واجهة sysfs الافتراضية إلى البيئة المستهدفة

ندخل الآن إلى البيئة بعد اكتمال ربط الأنظمة الحيوية ونفحص استجابة النواة والمساحة التخزينية:

sudo chroot /mnt/sysroot /bin/bash -c "uname -a && df -h /"

يؤكد المخرج قدرة أدوات الصيانة على قراءة مواصفات النواة ومساحات الأقسام بدقة، مما يتيح مباشرة تثبيت الحزم أو تعديل تكوينات الإقلاع بأمان.

التحقق من جاهزية بيئة الإنقاذ ومعلومات النظام

بعد إنهاء المهام، ينبغي فصل المسارات بترتيب عكسي لتفادي بقاء العمليات عالقة أو تضرر البيانات:

sudo umount /mnt/sysroot/sys /mnt/sysroot/proc /mnt/sysroot/dev /mnt/sysroot

إلغاء تثبيت أنظمة الملفات الافتراضية بنجاح وبترتيب عكسي

ضبط صلاحيات وأمان خادم SFTP عبر حصر المستخدمين بـ chroot

يساعد تقييد مستخدمي نقل الملفات داخل أدلتهم الشخصية في حماية ملفات الخادم الحساسة. نبدأ بإنشاء حساب مخصص لنقل الملفات مع تعطيل إمكانية فتح صدفة تفاعلية:

sudo id -u jailuser &>/dev/null || sudo useradd -m -d /home/jailuser -s /bin/false jailuser

إضافة حساب مقيد ومخصص لنقل الملفات

نخصص مجلداً فرعياً يستطيع العميل إيداع الملفات داخله، إذ تحظر معايير OpenSSH الكتابة المباشرة على جذر العزل:

sudo mkdir -p /home/jailuser/uploads

إنشاء مسار رفع الملفات للمستخدم

تفرض خدمة OpenSSH شرطاً أمنياً صارماً لمنع اختراق بيئة chroot؛ حيث يجب أن تعود ملكية الدليل المقيد بالكامل للمستخدم الخارق root مع ضبط صلاحيات مقيدة:

sudo chown root:root /home/jailuser && sudo chmod 755 /home/jailuser

تعيين ملكية الدليل الجذري لحساب root وتأمينه بصلاحية 755

نمنح الحساب صلاحية التحكم الكامل في مجلد الرفع المخصص فقط:

sudo chown jailuser:jailuser /home/jailuser/uploads

إسناد ملكية مجلد الرفع uploads للمستخدم المعزول

نتحقق من صحة مصفوفة الصلاحيات المطبقة على المسارين:

ls -ld /home/jailuser /home/jailuser/uploads

توضح النتائج أن المسار الرئيسي محمي بواسطة root:root بصلاحيات drwxr-xr-x، في حين يخضع المجلد الداخلي uploads لملكية jailuser:jailuser، محققاً بذلك المتطلبات المعيارية لأمان SFTP Chroot Jail.

معاينة أذونات الدليلين والتأكد من انطباق شروط الأمان

يوفر إتقان أداة chroot في أوبونتو ركيزة متينة للمهندسين ومديري النظم، سواء لإنشاء بيئات تشغيل معزولة واختبار التطبيقات، أو لاستعادة كفاءة الخوادم المتعثرة وحماية خدمات نقل الملفات بكفاءة واحترافية.