اصطلاح chroot jail که به سال ۱۹۹۲ میلادی برمیگردد، امروزه کاربرد زیادی پیدا کرده است. در این مطلب به دنبال مفهوم این اصطلاح هستیم و اینکه عملیات chroot jail برای چه منظوری استفاده میشود. با ما همراه باشید.
در این آموزش، اساس استفاده از عملیات chroot jail را بررسی خواهیم کرد و نحوه تنظیم یکی از آنها را به شما نشان خواهیم داد.
پیشنیازها
- یک سیستم با اجرای سیستمعامل لینوکس یا یونیکس
- حساب کاربری با دسترسیهای سطح sudo
- دسترسی به خط فرمان یا ترمینال
chroot jail چیست؟
chroot که مخفف دو واژه انگلیسی “change root” محسوب میشود، یک عملیات یونیکس است که دایرکتوری روت نمایشی را به چیزی که کاربر تعیین کرده، تغییر میدهد. هر فرآیند دیگری که پس از عملیاتchroot اجرا میکنید، باید به دایرکتوری روت جدید و همینطور زیرشاخههای آن دسترسی داشته باشد. این عملیات اغلب با عنوان chroot jail یا «زندان چروت» یاد میشود. دلیل این موضوع این است که این فرآیندها نمیتواند از خارج از دایرکتوری، نوشته و یا خوانده شوند.
کاربرد عملیات chroot jail چیست؟
chroot jail برای ایجاد یک محدوده آزمایشی برای اجرای یک فرآیند به کار برده میشود. به این معنا که یک فرآیند نمیتواند به صورت ناخواسته، دادههای خارج از دایرکتوری تعریفشده را تغییر دهد.
کاربرد دیگر عملیات chroot jail در کاربرده به عنوان جایگزین ماشینهای مجازی است. این روش با عنوان «مجازیسازی سطح هسته» شناخته میشود و به میزان منابع کمتری نسبت به ماشینهای مجازی نیاز دارد. در نتیجه، کاربران میتوانند چندین فرآیند ایزوله را در یک سیستم اجرا کنند.
نحوه استفاده از chroot jail
در مثالی که در ادامه میآید، ایجاد و تنظیمات عملیات chroot jail را برای اجرای فرمانهای bash و ls بررسی میکنیم. مراحل زیر را دنبال کنید.
۱) یک دایرکتوری جدید با نام “chroot jail” ایجاد کنید.
1 | mkdir chroot_jail |
اگر بخواهیم chroot را در این دایرکتوری جدید انجام دهید، با خروجی زیر مواجه خواهیم شد.

عدم موفقیت عملیات chroot jail
قبل از اینکه بتوانید chroot را در دایرکتوری جدید انجام دهید، باید ابتدا فرمان bash را فعال نمایید. این موضوع نیازمند کپیکردن فایل فرمان و تمام کتابخانههای مربوطه به دایرکتوری روت جدید است.
۲) یک سری زیرشاخه جدید درون دایرکتوری chroot_jail ایجاد کنید.
1 | mkdir -p chroot_jail/bin chroot_jail/lib64/x86_64-linux-gnu chroot_jail/lib/x86_64-linux-gnu |
این زیرشاخهها تمام موارد لازم در ارتباط با فرمانهای bash و ls را در خود ذخیره خواهند کرد.
۳) با استفاده از فرمان cp همراه با فرمان which، فرمانهای bash و ls را بدون نیاز به مشخص کردن مسیر منبع، کپی کنید. برای این منظور داریم:
1 2 3 | cp $(which ls) chroot_jail/bin/ cp $(which bash) chroot_jail/bin/ |
نکته: اگر فرمانهای ls یا bash دارای عنوان جایگزین بودند، ابتدا آنها را از این وضعیت خارج کنید. برای این منظور، از فرمان unalias [command] استفاده کنید؛ جایی که [command] همان فرمانی است که میخواهید آن را از وضعیت جایگزین خارج کنید.
۴) برای اینکه فرمانهای bash و ls در پوشه روت جدید کارآیی داشته باشند، باید تمام کتابخانههای مربوطه را به مسیر chroot_jail/libraries انتقال دهید. برای این منظور، از فرمان ldd در کنار فرمان which برای پیدا کردن کتابخانههای مرتبط استفاده میکنیم.
1 2 3 | ldd $(which bash) ldd $(which ls) |

لیست کتابخانههای مرتبط با فرمانهای bash و ls
۵) کپیکردن کتابخانههای مناسب به زیرشاخههای lib و lib64 دایرکتوری chroot_jail
برای فرمان bash داریم:
1 2 3 4 5 6 7 | cp /lib/x86_64-linux-gnu/libtinfo.so.6 chroot_jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libdl.so.2 chroot_jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libc.so.6 chroot_jail/lib/x86_64-linux-gnu/ cp /lib64/ld-linux-x86-64.so.2 chroot_jail/lib64/ |
همچنین برای فرمان ls:
1 2 3 4 5 6 7 8 9 10 11 | cp /lib/x86_64-linux-gnu/libselinux.so.1 chroot_jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libc.so.6 chroot_jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libpcre2-8.so.0 chroot_jail/lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libdl.so.2 chroot_jail/lib/x86_64-linux-gnu/ cp /lib64/ld-linux-x86-64.so.2 chroot_jail/lib64/ cp /lib/x86_64-linux-gnu/libpthread.so.0 chroot_jail/lib/x86_64-linux-gnu/ |
۶) از فرمان chroot برای تغییر مسیر روت به دایرکتوری chroot_jail استفاده کنید.
1 | sudo chroot chroot_jail |

در نتیجه عملیات chroot jail با موفقیت برای دایرکتوری روت جدید انجام شد.
نکته: تغییر روت به دایرکتوری chroot_jail باعث راهاندازی یک bash shell جدید میشود.
با استفاده از فرمان ls لیستی از تمام فایلها و دایرکتوریهای موجود در مسیر روت جدید ایجاد کنید.
1 | ls -R |

لیست تمام فایلها و فولدرهای دایرکتوری روت جدید
۷) وقتی کارتان با فولدر روت جدید تمام شد، shell را ببندید.
1 | exit |
جمعبندی
امیدواریم که این آموزش نیز مورد توجه شما قرار گرفته باشد. پس از دنبالکردن این آموزش، شما قادر خواهید بود که یک عملیات chroot jail را تنظیم کنید و همینطور منابع لازم را برای اجرای فرآیندها و فرمانهای در دایرکتوری جدید به کار بگیرید.