chroot

chrootهو أمر برمجي في سطر الأوامر ، ويُستخدم في أنظمة يونكس والأنظمة الشبيهة بها، لتغيير الدليل الجذر الظاهر للعملية الجارية والعمليات الفرعية التابعة لها . لا يستطيع البرنامج الذي يُشغَّل في هذه البيئة المُعدَّلة تسمية الملفات (وبالتالي لا يمكنه الوصول إليها عادةً) خارج شجرة الدليل المُحدَّدة. قد يُشير مصطلح chroot إلى استدعاء النظام chroot(2) أو أداة سطر الأوامر chroot(8) . تُسمى البيئة المُعدَّلة " سجن chroot" .

Chroot: من Gentoo إلى Ubuntu

تاريخ

تم تقديم استدعاء النظام chroot خلال تطوير الإصدار السابع من يونكس عام 1979. تشير إحدى المصادر إلى أن بيل جوي أضافه في 18 مارس 1982 - أي قبل 17 شهرًا من إصدار 4.2BSD - لاختبار نظام التثبيت والبناء الخاص به. [ 1 ] جميع إصدارات BSD التي تحتوي على نواة تتضمن chroot(2) . [ 2 ] [ 3 ] يعود الاستخدام المبكر لمصطلح "سجن" لوصف chroot إلى بيل تشيسويك الذي أنشأ نظامًا وهميًا لمراقبة أحد المخترقين عام 1991. [ 4 ]  

تمت مناقشة أول مقال حول كسر الحماية في عمود الأمن في موقع SunWorld Online الذي كتبته كارول فينلي؛ وتغطي إصدارات أغسطس 1999 ويناير 1999 معظم مواضيع chroot() . [ 5 ]

ولجعلها مفيدة للمحاكاة الافتراضية ، قام نظام FreeBSD بتوسيع المفهوم وقدم في إصداره 4.0 في عام 2000 أمر jail . [ 6 ]

بحلول عام 2002، وصف مقال فرنسي بقلم نيكولاس بويتيو كيفية إنشاء سجون على نظام لينكس. [ 7 ]

بحلول عام 2003، بدأ أول مزودي خدمات الإنترنت المصغرة الذين يستخدمون بيئات لينكس المعزولة بتقديم خدمات SaaS / PaaS (مثل حاويات shell، والوكيل، و ircd، و bots، وما إلى ذلك) يتم تحصيل رسومها مقابل الاستهلاك داخل البيئة المعزولة حسب الاستخدام. [ 8 ]

بحلول عام 2005، أصدرت شركة Sun برنامج Solaris Containers (المعروف أيضًا باسم Solaris Zones)، والذي وصف بأنه "chroot على المنشطات". [ 9 ]

بحلول عام 2008، اعتمدت LXC (التي تم بناء Docker عليها لاحقًا) مصطلح " الحاوية " [ 10 ] واكتسبت شعبية في عام 2013 بسبب تضمين مساحات أسماء المستخدم في نواة Linux 3.8 . [ 11 ]

الاستخدامات

يمكن استخدام بيئة chroot لإنشاء واستضافة نسخة افتراضية منفصلة من نظام البرمجيات. وهذا مفيد لما يلي:

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

القيود

لا تهدف آلية chroot إلى الحماية من التلاعب المتعمد من قِبل المستخدمين ذوي الصلاحيات (الجذر). ويُستثنى من ذلك نظام NetBSD ، حيث تُعتبر chroot آلية أمان ولا توجد ثغرات معروفة للاختراق. في معظم الأنظمة، لا تتراكم سياقات chroot بشكل صحيح، وقد تُجري البرامج المُقيدة بـ chroot والتي تتمتع بصلاحيات كافية عملية chroot ثانية [ 12 ] للخروج. وللحد من مخاطر هذا الضعف الأمني، ينبغي على البرامج المُقيدة بـ chroot التخلي عن صلاحيات الجذر في أسرع وقت ممكن بعد القيد، أو استخدام آليات أخرى  - مثل بيئات FreeBSD المعزولة - بدلاً من ذلك. تجدر الإشارة إلى أن بعض الأنظمة، مثل FreeBSD ، تتخذ احتياطات لمنع هجوم chroot ثانٍ. [ 13 ]

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

عند بدء التشغيل، تتوقع البرامج وجود مساحة تخزين مؤقتة ، وملفات تهيئة، وعُقد أجهزة ، ومكتبات مشتركة في مواقع محددة مسبقًا. لكي يبدأ برنامج معزول في بيئة chroot بنجاح، يجب أن يحتوي دليل chroot على الحد الأدنى من هذه الملفات. هذا قد يجعل استخدام chroot كآلية عزل عامة أمرًا صعبًا. يمكن لأدوات مثل Jailkit [ 14 ] أن تُسهّل هذه العملية وتُؤتمتها.

لا يمكن تنفيذ عملية chroot إلا بواسطة المستخدم الجذر . والهدف من ذلك هو منع المستخدمين من وضع برنامج setuid داخل بيئة chroot معزولة مصممة خصيصًا (على سبيل المثال، باستخدام ملفي /etc/passwd و /etc/shadow مزيفين ) مما قد يؤدي إلى خداع النظام ورفع مستوى صلاحياته .

تقدم بعض أنظمة يونكس امتدادات لآلية chroot لمعالجة بعض هذه القيود على الأقل (انظر تطبيقات تقنية المحاكاة الافتراضية على مستوى نظام التشغيل ).

تطبيقات رسومية على chroot

من الممكن تشغيل التطبيقات الرسومية في بيئة معزولة (chrooted)، باستخدام طرق مثل: [ 15 ] [ 16 ]

  • استخدم xhost (أو انسخ السر من ملف .Xauthority)
  • خوادم X المتداخلة مثل Xnest أو Xephyr الأكثر حداثة (أو بدء تشغيل خادم X حقيقي من داخل الحاوية).
  • الوصول إلى بيئة chroot عبر SSH باستخدام ميزة إعادة توجيه X11 ( ssh -X )
  • xchroot هو إصدار موسع من chroot للمستخدمين وإعادة توجيه Xorg/X11 (socat/mount).
  • خادم VNC X11 وتوصيل عميل VNC خارج البيئة.
  • Atoms هي أداة لإدارة بيئة chroot لنظام Linux بواجهة مستخدم رسومية سهلة الاستخدام. [ 17 ]

تطبيقات بارزة

قد يعمل وكيل نقل البريد Postfix كخط أنابيب لبرامج مساعدة معزولة بشكل فردي. [ 18 ]

كما هو الحال في نظام 4.2BSD السابق، تستخدم مزارع بناء الحزم الداخلية في دبيان وأوبونتو بيئات معزولة (chroots) على نطاق واسع لاكتشاف تبعيات البناء غير المقصودة بين الحزم. وتستخدم SUSE أسلوبًا مشابهًا في برنامج البناء الخاص بها. أما فيدورا وريد هات والعديد من التوزيعات الأخرى القائمة على RPM، فتبني جميع حزم RPM باستخدام أداة chroot مثل mock .

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

في حال تفعيل فصل الصلاحيات، يقوم برنامج OpenSSH الخفي بعزل عملية مساعدة غير مميزة في دليل فارغ لمعالجة حركة مرور الشبكة قبل المصادقة لكل عميل. كما يمكن للبرنامج الخفي عزل جلسات SFTP وجلسات shell في بيئة معزولة (من الإصدار 4.9p1 فصاعدًا). ​​[ 19 ]

يمكن لنظام التشغيل ChromeOS استخدام بيئة chroot لتشغيل نسخة من نظام Linux باستخدام Crouton ، [ 20 ] مما يتيح لنظام تشغيل بسيط الوصول إلى موارد الأجهزة. وتنطبق هنا الآثار الأمنية المذكورة في هذه المقالة.

أنظمة الملفات الافتراضية وملفات التكوين لنواة نظام التشغيل لينكس

لكي يكون لديك بيئة chroot فعالة في نظام Linux، يجب أيضًا تحميل/نسخ أنظمة الملفات الافتراضية للنواة وملفات التكوين من المضيف إلى chroot.

# تثبيت أنظمة الملفات الافتراضية لنواة النظام TARGETDIR = "/mnt/chroot" mount -t proc proc $TARGETDIR /proc mount -t sysfs sysfs $TARGETDIR /sys mount -t devtmpfs devtmpfs $TARGETDIR /dev mount -t tmpfs tmpfs $TARGETDIR /dev/shm mount -t devpts devpts $TARGETDIR /dev/pts# نسخ /etc/hosts /bin/cp -f /etc/hosts $TARGETDIR /etc/# نسخ الملف /etc/resolv.conf /bin/cp -f /etc/resolv.conf $TARGETDIR /etc/resolv.conf# إنشاء رابط /etc/mtab chroot $TARGETDIR rm /etc/mtab 2 > /dev/null chroot $TARGETDIR ln -s /proc/mounts /etc/mtab 

انظر أيضاً

مراجع

  1. "السجن، القسم 9" . docs.freebsd.org . مؤرشف من الأصل بتاريخ 2017-01-05 . تم الاطلاع عليه بتاريخ 2016-03-14 .
  2. لوش، وارنر (2 فبراير 2000). "مدونة وارنر العشوائية للاختراق: إلى أين يتجه chroot؟" . مؤرشف من الأصل في 28 يونيو 2020. تم الاطلاع عليه في 28 يونيو 2020 .
  3. "بنى تحتية للبيانات لبقية المستخدمين - الجزء الثالث - البرمجيات" . ١٧ مايو ٢٠٢٠. مؤرشف من الأصل بتاريخ ٣٠ يونيو ٢٠٢٠. تم الاطلاع عليه بتاريخ ٢٨ يونيو ٢٠٢٠ .
  4. تشيسويك، بيل (1991). "أمسية مع بيرفرد: حيث يتم استدراج شخص من الطبقة العاملة، وتحمله، ودراسته" (ملف PDF) . وقائع مؤتمر USENIX الصيفي، المجلد 1. USENIX . سان فرانسيسكو، كاليفورنيا: الجمعية. ص 163. مؤرشف (ملف PDF) من الأصل بتاريخ 2018-11-05 . تم الاسترجاع بتاريخ 2018-06-09 . 
  5. كارول فينلي. "حفل عشاء صيفي" . صن وورلد أونلاين . كارول فينلي. مؤرشف من الأصل في 28 سبتمبر 2021.
  6. ريونداتو، ماتيو. "دليل FreeBSD، فصل "السجون"" . freebsd.org . مشروع FreeBSD. مؤرشف من الأصل بتاريخ 15 أغسطس 2014. تم الاطلاع عليه بتاريخ 30 أكتوبر 2018 .
  7. نيكولاس بويتيو. "chroot shell" . lycos.fr (بالفرنسية). نيكولاس بويتيو. مؤرشف من الأصل بتاريخ 14 أكتوبر 2002. تم الاطلاع عليه بتاريخ 24 مارس 2018 .
  8. "Girafon" . girafon.org . girafon. مؤرشف من الأصل بتاريخ 12-06-2004 . تم الاطلاع عليه بتاريخ 24 مارس 2018 .
  9. شميدت، كلاوس (2006-09-02). التوافر العالي والتعافي من الكوارث: المفاهيم والتصميم والتنفيذ . سبرينغر ساينس آند بيزنس ميديا. ص 186. ISBN  9783540345824أُرشف من المصدر الأصلي بتاريخ 20 فبراير 2023. تم الاطلاع عليه بتاريخ 21 أغسطس 2014 .
  10. "ملفات تنزيل SourceForge LXC" . sourceforge.net . مؤرشف من الأصل بتاريخ 19-08-2014 . تم الاطلاع عليه بتاريخ 21-08-2014 .
  11. روزن، رامي (26 مارس 2014). "حاويات لينكس والحوسبة السحابية المستقبلية" (ملف PDF) . مؤرشف (ملف PDF) من الأصل بتاريخ 18 أبريل 2016. تم الاطلاع عليه بتاريخ 21 أغسطس 2014 .
  12. سايمز. "كيفية الخروج من بيئة chroot المعزولة" . BPFH . مؤرشف من الأصل في 27 يناير 2016.
  13. "chroot(2)" . www.freebsd.org . مؤرشف من الأصل بتاريخ 18-09-2020 . تم الاطلاع عليه بتاريخ 02-12-2020 .
  14. "Jailkit - أدوات chroot لعزل النظام" . olivier.sessink.nl . مؤرشف من الأصل في 12 مارس 2026.
  15. "التطوير/كيفية/Chroot" . ويكي ماندريفا . 25 يوليو 2011. مؤرشف من الأصل في 26 مارس 2014.
  16. "كيفية تشغيل startx في بيئة معزولة (chroot)" . ويكي جنتو . مؤرشف من الأصل بتاريخ 31 أغسطس 2011. تم الاطلاع عليه بتاريخ 13 أكتوبر 2011 .
  17. ديفيد، ريدفيلد (10 أكتوبر 2023). "Atoms هي أداة إدارة Chroot لنظام Linux بواجهة مستخدم رسومية سهلة الاستخدام" .
  18. "التكوين الأساسي لـ Postfix" . الصفحة الرئيسية لـ Postfix . تم الاطلاع عليه بتاريخ 17-02-2025 .
  19. صفحة دليل "sshd_config(5)" . 26-10-2017. مؤرشف من الأصل في 05-02-2018 . تم الاطلاع عليه في 04-02-2018 .
  20. "بيئة Chroot العالمية لنظام التشغيل Chromium OS (على GitHub)" . GitHub . مؤرشف من الأصل بتاريخ 25 نوفمبر 2016. تم الاطلاع عليه بتاريخ 17 ديسمبر 2016 .