يعد CHRoot على أنظمة تشغيل UNIX عملية يغير دليل الجذر الظاهر لعملية التشغيل الحالية وأطفالها. لا يمكن للبرامج التي تعمل في هذه البيئة المعدلة الوصول إلى الملفات خارج شجرة الدليل المحددة. هذا يحد بشكل أساسي من وصولهم إلى شجرة الدليل وبالتالي يحصلون على اسم "سجن chroot".
الفكرة هي أنك تقوم بإنشاء شجرة دليل حيث تقوم بنسخ أو ربط في جميع ملفات النظام اللازمة لتشغيل العملية. يمكنك بعد ذلك استخدام استدعاء نظام chroot لتغيير دليل الجذر ليكون في قاعدة هذه الشجرة الجديدة وبدء العملية التي تعمل في تلك البيئة المحفوظة. نظرًا لأنه لا يمكن في الواقع الرجوع إلى المسارات خارج الجذر المعدل ، فلا يمكن القراءة أو الكتابة بشكل ضار إلى تلك المواقع.
لماذا هو مطلوب وكيف يختلف عن الأجهزة الافتراضية؟
هذا هو المحاكاة الافتراضية على مستوى النظام ، وغالبًا ما يتم استخدامها بدلاً من الأجهزة الافتراضية لإنشاء مثيلات معزولة متعددة لنظام التشغيل المضيف. هذا هو المحاكاة الافتراضية على مستوى النواة وليس لها عمليا أي عام بالمقارنة مع الأجهزة الافتراضية التي هي المحاكاة الافتراضية لطبقة التطبيق كنتيجة ، فإنه يوفر طريقة جيدة جدًا لإنشاء مثيلات معزولة متعددة على نفس الأجهزة. الجهاز الظاهري (VM) هو تطبيق برنامج لجهاز ما ، وغالبًا ما يستغل ما يعرف باسم المحاكاة الافتراضية للأجهزة لتقديم صورة افتراضية لنظام التشغيل.
كيفية استخدام سجن chroot
الأمر الأساسي لإنشاء سجن chroot هو كما يلي:
chroot /path/to/new/root command
OR
chroot /path/to/new/root /path/to/server
OR
chroot [options] /path/to/new/root /path/to/server
ملاحظة: يمكن لمستخدم جذر/متميز فقط استخدام مكالمة نظام chroot. يمكن للمستخدم غير المحدد مع الوصول إلى الأمر تجاوز سجن Chroot.
خطوات لإنشاء جيل صغير لقيام "باش" و "LS"
1. إنشاء دليل سيكون بمثابة جذر الأمر.
$ mkdir jailed
$ cd jailed
2. قم بإنشاء جميع الدلائل الأساسية للأمر لتشغيلها: اعتمادًا على نظام التشغيل الخاص بك ، قد تتغير الدلائل المطلوبة. منطقيا نقوم بإنشاء كل هذه الدلائل للحفاظ على نسخة من المكتبات المطلوبة. لمعرفة ما هي الدلائل المطلوبة انظر الخطوة 4.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu3. أمر الأمر "الذي": قم بتشغيل أمر "الذي" للعثور على موقع LS و Bash Command.afring الذي يقوم بإجراء قيادة تلك الثنائيات في دليل "Bin" في سجننا. تأكد من عدم وجود أي من هذه الأوامر المستعارة. من الآن فصاعدًا ، سنشير إلى دليلنا "سجن" دليل للراحة.
جافا الميراث
$ unalias ls # Required only if you have aliased ls command
$ unalias bash # Required only if you have aliased bash command
$ cp $(which ls) ./bin/
$ cp $(which bash) ./bin/
4. انسخ المكتبات/الكائنات المناسبة : بالنسبة للعاملين التنفيذيين في سجن دليل للعمل ، نحتاج إلى نسخ المكتبات/الكائنات المناسبة في الدليل المسجون. افتراضيًا ، ينظر القابل للتنفيذ إلى المواقع التي تبدأ بـ '/'. للعثور على التبعيات ، نستخدم الأمر "LDD"
$ ldd $(which bash)
linux-vdso.so.1 => (0x00007ffc75dd4000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f6577768000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6577564000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f657719a000)
/lib64/ld-linux-x86-64.so.2 (0x000055979f3fd000)
تشغيل الأوامر التالية لإنشاء الدلائل المناسبة.
$ cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/
$ cp /lib64/ld-linux-x86-64.so.2 lib64/
وبالمثل ل LS
$ ldd $(which ls)
linux-vdso.so.1 => (0x00007fff4f05d000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9a2fd07000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9a2f93e000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9a2f6cd000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9a2f4c9000)
/lib64/ld-linux-x86-64.so.2 (0x000055e836c69000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9a2f2ac000)
$ cp /lib/x86_64-linux-gnu/libselinux.so.1 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libpcre.so.3 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/
$ cp /lib64/ld-linux-x86-64.so.2 lib64/
$ cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/x86_64-linux-gnu/
يجب أن يكون هيكل الدليل النهائي مشابهًا لهذا

5. سودو كروت: قم بتشغيل هذا الأمر لتغيير الجذر إلى الدليل السجن مع المسار إلى القشرة. بشكل افتراضي ، سيحاول تحميل/bin/sh 'قذيفة.
$ cd ..
$ sudo chroot jailed /bin/bash
قد تواجه هذا الخطأ أثناء تشغيل الأمر chroot
chroot: failed to run command `/bin/bash': No such file or directoryقد يكون هذا بسبب سببين إما أن الملف غير موجود (وهو أمر واضح) أو عندما تفشل مكتبة التحميل أو غير متوفر. تحقق مزدوجًا إذا كانت المكتبات في الموقع الصحيح.
6. يجب أن تظهر قذيفة جديدة: انها لدينا باش السجن. لدينا حاليا اثنين فقط من أوامر تثبيت bash و ls. لحسن الحظ ، تم تصميم الأقراص المضغوطة و PWD في أوامر باش شل ، وبالتالي يمكنك استخدامها أيضًا.
تجول حول الدليل حاول الوصول إلى "CD /../" أو شيء مشابه. حاول كسر السجن ربما لن تتمكن من ذلك. سائدا
للخروج من السجن
$ exitالجزء الأكثر أهمية والمثيرة هو أنه عند الركض
$ ps auxوابحث عن العملية التي ستجد أن هناك عملية واحدة فقط
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bashمن المثير للاهتمام أن العمليات في القشرة المسجونة تعمل كعملية طفل بسيطة لهذه القشرة. جميع العمليات الموجودة داخل البيئة المسجونة هي مجرد عملية بسيطة على مستوى المستخدم في نظام التشغيل المضيف ، وهي معزولة بواسطة مساحات الأسماء التي توفرها kernel وبالتالي هناك الحد الأدنى من النفقات العامة وكفائدة إضافية نحصل عليها.
وبالمثل ، يمكنك إضافة المزيد من الأوامر لك بيئة سجن افتراضية. لإضافة برامج أكثر تعقيدًا ، قد تحتاج إلى إنشاء المزيد من الدلائل مثل "/Proc" و "/Dev". هذه تزيد من تعقيد العملية. نأمل ألا نطلب ذلك لغرضنا.
هذا كل ما تحتاج إلى معرفته عن chroot وسجن الدلائل. هدفنا النهائي هو فهم الحاويات وكيف هي خدمات مثل AMS (Amazon Web Services) Google Cloud و Docker قادرة على توفير العديد من الحالات الافتراضية لأنظمة التشغيل عند الطلب. أيضًا كيف تعمل Sys-Admin على العديد من الخدمات على الويب لمجالات متعددة على جهاز فعلي واحد. كانت هذه مجرد خطوة واحدة نحو فهمها