ال chroot
يمكن أن يؤدي الأمر إلى إرسالك إلى السجن، أو عزل بيئات التطوير أو الاختبار الخاصة بك، أو تحسين أمان نظامك. سنعرض لك أسهل طريقة لاستخدامه.
ما هو chroot، وما هو سجن chroot؟
يمكنك استخدام chroot
للإعداد و تشغيل البرامج أو الأصداف التفاعلية مثل Bash في نظام ملفات مغلف يمنعه من التفاعل مع نظام الملفات العادي لديك. كل شيء داخل chroot
البيئة محصورة ومغلقة. لا يوجد شيء في chroot
يمكن للبيئة أن ترى ما هو أبعد من دليل الجذر الخاص بها دون التصعيد إلى امتيازات الجذر. وهذا ما جعل هذا النوع من البيئة يلقب بـ chroot
السجن. لا ينبغي الخلط بين مصطلح “السجن” و FreeBSD’sjail
الأمر الذي ينشئ chroot
بيئة وهذا أكثر أمنا من المعتاد chroot
بيئة.
إذا حاولت قياس مدى فائدة أمر ما، فيجب أن تأخذ في الاعتبار الوظيفة التي يوفرها وسهولة استخدامه. إذا كان الأمر معقدًا للغاية بحيث لا يستطيع الناس استخدامه أو طويلًا للغاية بحيث لا يرغبون في محاولة استخدامه، فقد تكون الوظيفة صفرًا. إذا لم يستخدمه أحد، فهو لا يوفر أي وظيفة.
في المناقشات مع مستخدمي Linux — شخصيًا وعلى المنتديات — يبدو أن chroot
الأمر هو أمر يصعب استخدامه أو أنه صعب للغاية وممل في الإعداد. ويبدو أن هذه الأداة المساعدة الرائعة لا يتم استخدامها بالقدر الذي ينبغي أن تكون عليه.
ولكن في الواقع، هناك طريقة مباشرة جدًا لاستخدام chroot
وسنقدم لك مثالاً محددًا لكيفية استخدام chroot. نحن نستخدم أوامر Linux العادية التي ستعمل على جميع التوزيعات. تحتوي بعض توزيعات Linux على أدوات مخصصة لإعداد chroot
البيئات، مثل إلغاء تثبيت برنامج التشغيل بالنسبة لأوبونتو، لكننا لا نهتم بالتوزيع هنا.
متى يجب عليك استخدام chroot؟
أ chroot
توفر البيئة وظائف مماثلة لتلك الموجودة في الآلة الافتراضية، لكنها حل أخف. لا يحتاج النظام الأسير إلى تثبيت وتكوين برنامج تشغيل افتراضي، مثل فيرتوالبوكس أو مدير الآلة الافتراضيةولا يلزم أيضًا تثبيت نواة في النظام الأسير. يشترك النظام الأسير في نواة النظام الموجودة لديك.
في بعض النواحي، chroot
البيئات أقرب إلى الحاويات مثل ال اكس سي إن هذه الأجهزة خفيفة الوزن، وسريعة النشر، ويمكن أتمتة إنشائها وتشغيلها. ومثل الحاويات، فإن إحدى الطرق الملائمة لتكوينها هي تثبيت ما يكفي من نظام التشغيل لإنجاز ما هو مطلوب. تتم الإجابة على سؤال “ما هو المطلوب” من خلال النظر في كيفية استخدامك لجهازك. chroot
بيئة.
بعض الاستخدامات الشائعة هي:
تطوير البرمجيات والتحقق من المنتجيكتب المطورون البرامج ويقوم فريق التحقق من المنتج (PV) باختبارها. وفي بعض الأحيان يكتشف فريق التحقق من المنتج مشكلات لا يمكن تكرارها على جهاز الكمبيوتر الخاص بالمطور. ويمتلك المطور جميع أنواع الأدوات والمكتبات المثبتة على جهاز الكمبيوتر الخاص بالتطوير والتي لن يمتلكها المستخدم العادي — وفريق التحقق من المنتج — غالبًا. وغالبًا ما يتبين أن البرامج الجديدة التي تعمل لصالح المطور ولكنها لا تعمل لصالح الآخرين تستخدم موردًا على جهاز الكمبيوتر الخاص بالمطور لم يتم تضمينه في الإصدار التجريبي للبرنامج. chroot
يتيح للمطورين الحصول على بيئة أسيرة عادية على أجهزة الكمبيوتر الخاصة بهم حيث يمكنهم وضع البرنامج فيها قبل تسليمه إلى PV. يمكن تكوين البيئة الأسيرة بالحد الأدنى من التبعيات التي يتطلبها البرنامج.
الحد من مخاطر التنميةيمكن للمطور إنشاء بيئة تطوير مخصصة بحيث لا يحدث فيها أي شيء يمكن أن يؤدي إلى إفساد جهاز الكمبيوتر الفعلي الخاص به.
تشغيل البرامج القديمةفي بعض الأحيان، عليك فقط تشغيل إصدار قديم من شيء ما. إذا كان البرنامج القديم يحتوي على متطلبات قد تتعارض مع إصدار Linux الخاص بك أو تكون غير متوافقة معه، فيمكنك chroot
بيئة للبرمجيات المشكلة.
الاسترداد وترقيات نظام الملفات:إذا أصبح تثبيت Linux غير قابل للتشغيل، فيمكنك استخدام chroot
لتثبيت نظام الملفات التالف على نقطة تثبيت على قرص مضغوط مباشر. يتيح لك هذا العمل في النظام التالف ومحاولة إصلاحه كما لو كان مثبتًا بشكل طبيعي في الجذر /. وهذا يعني أن مسارات الملفات المتوقعة داخل النظام التالف سيتم الرجوع إليها بشكل صحيح من الدليل الجذر، وليس من نقطة تثبيت القرص المضغوط المباشر. تم استخدام تقنية مماثلة في المقالة التي تصف كيفية ترحيل نظام ملفات Linux من ext2 أو ext3 إلى ext4.
تطبيقات السياج الدائري. تشغيل خادم FTP أو أي جهاز آخر متصل بالإنترنت داخل chroot
تحد البيئة من الضرر الذي يمكن أن يلحقه المهاجم الخارجي. يمكن أن تكون هذه خطوة قيمة في تعزيز أمان نظامك.
إنشاء بيئة chroot
نحن بحاجة إلى دليل ليكون بمثابة الدليل الجذر لـ chroot
البيئة. حتى يكون لدينا طريقة مختصرة للإشارة إلى هذا الدليل، سننشئ متغيرًا ونخزن اسم الدليل فيه. هنا نقوم بإعداد متغير لتخزين مسار إلى دليل “testroot”. لا يهم إذا لم يكن هذا الدليل موجودًا بعد، فسنقوم بإنشائه قريبًا. إذا كان الدليل موجودًا، فيجب أن يكون فارغًا.
chr=/home/dave/testroot
إذا لم يكن الدليل موجودًا، فيتعين علينا إنشاؤه. يمكننا القيام بذلك باستخدام هذا الأمر. -p
يضمن خيار (الآباء) إنشاء أي أدلة رئيسية مفقودة في نفس الوقت:
mkdir -p $chr
نحن بحاجة إلى إنشاء أدلة لحمل أجزاء نظام التشغيل لدينا chroot
سوف تتطلب البيئة ذلك. سنقوم بإعداد بيئة Linux بسيطة تستخدم Bash كغلاف تفاعلي. سنقوم أيضًا بتضمين touch
, rm
، و ls
الأوامر. سيسمح لنا ذلك باستخدام جميع أوامر Bash المضمنة touch
, rm
، و ls
سنكون قادرين على إنشاء الملفات وإدراجها وإزالتها واستخدام Bash. وفي هذا المثال البسيط، هذا كل شيء.
قم بإدراج الدلائل التي تحتاج إلى إنشائها داخل {}
توسيع الدعامة.
mkdir -p $chr/{bin,lib,lib64}
الآن سوف نقوم بتغيير الدليل إلى دليل الجذر الجديد لدينا.
cd $chr
دعنا ننسخ الثنائيات التي نحتاجها في بيئة Linux البسيطة لدينا من دليل “/bin” العادي إلى chroot
دليل “/bin”. -v
خيار (مطول) يجعل cp
أخبرنا بما يفعله أثناء تنفيذ كل عملية نسخ.
cp -v /bin/{bash,touch,ls,rm} $chr/bin
تم نسخ الملفات لنا:
ستكون لهذه الثنائيات تبعيات. نحتاج إلى اكتشاف ماهيتها ونسخ هذه الملفات إلى بيئتنا أيضًا، وإلا bash
, touch
, rm
، و ls
لن تتمكن من العمل. نحتاج إلى القيام بذلك بالتناوب لكل من الأوامر التي اخترناها. سنفعل Bash أولاً. ldd
الأمر سوف قائمة التبعيات بالنسبة لنا.
ldd /bin/bash
يتم تحديد التبعيات وإدراجها في نافذة المحطة الطرفية:
نحن بحاجة إلى نسخ هذه الملفات إلى بيئتنا الجديدة. إن اختيار التفاصيل من هذه القائمة ونسخها واحدة تلو الأخرى سوف يستغرق وقتًا طويلاً وسوف يكون عرضة للخطأ.
لحسن الحظ، يمكننا أتمتة هذه العملية جزئيًا. سنسرد التبعيات مرة أخرى، وهذه المرة سنشكل قائمة. ثم سنكرر عملية نسخ الملفات عبر القائمة.
نحن هنا نستخدم ldd
لإدراج التبعيات وإرسال النتائج عبر أنبوب إلى egrep
. استخدام egrep
هو نفس استخدام grep
مع -E
(الخيار (تعبيرات منتظمة ممتدة)). -o
يحد خيار (المطابقة فقط) من الإخراج إلى الأجزاء المطابقة من الأسطر. نحن نبحث عن ملفات مكتبة مطابقة تنتهي برقم (0-9)
.
list="$(ldd /bin/bash | egrep -o '/lib.*\.(0-9)')"
يمكننا التحقق من محتويات القائمة باستخدام echo
:
echo $list
الآن بعد أن أصبح لدينا القائمة، يمكننا الانتقال خلالها باستخدام الحلقة التالية، ونسخ الملفات واحدًا تلو الآخر. نحن نستخدم المتغير i
للتنقل عبر القائمة. لكل عضو في القائمة، نقوم بنسخ الملف إلى chroot
الدليل الجذر الذي يحتوي على القيمة الموجودة فيه $chr
.
ال -v
يؤدي خيار (verbose) إلى cp
للإعلان عن كل نسخة أثناء أدائها. --parents
يضمن الخيار إنشاء أي أدلة رئيسية مفقودة في chroot
بيئة.
for i in $list; do cp -v --parents "$i" "${chr}"; done
وهذا هو الناتج:
سنستخدم هذه التقنية لالتقاط التبعيات لكل أمر آخر. وسنستخدم تقنية الحلقة لإجراء النسخ الفعلي. والخبر السار هو أننا نحتاج فقط إلى إجراء تعديل بسيط على الأمر الذي يجمع التبعيات.
يمكننا استرجاع الأمر من سجل الأوامر لدينا عن طريق الضغط على Up Arrow
اضغط على المفتاح عدة مرات ثم قم بإجراء التعديل. لا يلزم تغيير أمر النسخ المتكرر على الإطلاق.
لقد استخدمنا هنا Up Arrow
مفتاح للعثور على الأمر، وقد قمنا بتحريره ليقول touch
بدلاً من bash
.
list="$(ldd /bin/touch | egrep -o '/lib.*\.(0-9)')"
يمكننا الآن تكرار نفس أمر الحلقة تمامًا كما في السابق:
for i in $list; do cp -v --parents "$i" "${chr}"; done
ويتم نسخ ملفاتنا لنا:
يمكننا الآن تحرير list
سطر الأوامر ل ls
:
list="$(ldd /bin/ls | egrep -o '/lib.*\.(0-9)')"
مرة أخرى، سنستخدم نفس أمر الحلقة. فهو لا يهتم بالملفات الموجودة في القائمة. فهو يعمل بشكل عشوائي من خلال القائمة وينسخ الملفات نيابة عنا.
for i in $list; do cp -v --parents "$i" "${chr}"; done
والتبعيات ل ls
تم نسخها لنا:
نحن نقوم بتحرير list
سطر الأوامر للمرة الأخيرة، مما يجعله يعمل من أجل rm
:
list="$(ldd /bin/ls | egrep -o '/lib.*\.(0-9)')"
نستخدم أمر النسخ المتكرر للمرة الأخيرة:
for i in $list; do cp -v --parents "$i" "${chr}"; done
يتم نسخ آخر التبعيات لدينا إلى chroot
البيئة. نحن مستعدون أخيرًا لاستخدام chroot
الأمر. هذا الأمر يحدد جذر chroot
البيئة، وتحدد التطبيق الذي سيتم تشغيله كغلاف.
sudo chroot $chr /bin/bash
ملكنا chroot
البيئة نشطة الآن. تم تغيير موجه نافذة المحطة الطرفية، ويتم التعامل مع الغلاف التفاعلي بواسطة bash
القشرة في بيئتنا.
يمكننا تجربة الأوامر التي أدخلناها إلى البيئة.
ls
ls /home/dave/Documents
ال ls
يعمل الأمر كما نتوقع عندما نستخدمه داخل البيئة. عندما نحاول الوصول إلى دليل خارج البيئة، يفشل الأمر.
يمكننا أن نستخدم touch
لإنشاء ملف، ls
لإدراجها، و rm
لإزالته.
touch sample_file.txt
ls
rm sample_file.txt
ls
بالطبع، يمكننا أيضًا استخدام الأوامر المضمنة التي يوفرها غلاف Bash. إذا كتبت help
في سطر الأوامر، سوف يقوم Bash بإدراجها لك.
help
استخدم الخروج لمغادرة chroot
بيئة:
exit
إذا كنت تريد إزالة chroot
البيئة، يمكنك ببساطة حذفها:
rm -r testroot/
سيؤدي هذا إلى حذف الملفات والدلائل بشكل متكرر في chroot
بيئة.
أتمتة عملية chroot لتوفير الراحة
إذا كنت تفكر في ذلك chroot
قد تكون البيئات مفيدة لك، ولكن إعدادها أمر صعب بعض الشيء، تذكر أنه يمكنك دائمًا تخفيف الضغط والمخاطرة من المهام المتكررة باستخدام الأسماء المستعارة والوظائف والبرامج النصية.