دستور chroot با تغییر دایرکتوری ریشه برای تمام فرآیندهای در حال اجرا، یک محیط ایزوله در لینوکس ایجاد می کند.
آیا به دنبال اجرای برنامه ها یا خدمات در یک فضای ایزوله در لینوکس هستید؟ یا شاید بخواهید برنامه ای را بدون تداخل با بقیه سیستم شما تست و اشکال زدایی کنید؟ اگر چنین است، می خواهید در مورد chroot، مکانیزم قدرتمندی که در لینوکس تعبیه شده است که به شما اجازه می دهد یک محیط مجزا در سیستم خود ایجاد کنید، بیاموزید.
بیایید chroot را با جزئیات بررسی کنیم، در مورد مزایای آن، موارد استفاده، نحوه تنظیم آن در یک سیستم لینوکس، و در صورت نیاز، نحوه فرار از آن بیاموزیم.
chroot در لینوکس چیست؟
chroot یا change-root مسلماً یکی از سادهترین و قدیمیترین اشکال نرمافزار کانتینریسازی است که به کاربر اجازه میدهد تا بهطور ایمن برنامهها و سرویسهای sandbox را انجام دهد. Sandboxing، در اصطلاح محاسباتی، فرآیند جداسازی یک برنامه در یک فضای محدود با منابع از پیش تعریف شده است.
اگر با Docker و نحوه عملکرد آن آشنا هستید، می توانید chroot را به عنوان یک نسخه کاملاً حذف شده از آن در نظر بگیرید. chroot با تغییر دایرکتوری ریشه یک برنامه، محدود کردن دسترسی و دید، و در نتیجه ایجاد یک لایه اضافی از ایزوله و امنیت کار می کند.
در اصل، شما یک دایرکتوری جداگانه ایجاد می کنید، تمام وابستگی های برنامه را در فهرست جدید کپی می کنید و سپس دستور chroot را اجرا می کنید. این اجازه می دهد تا برنامه به درستی کار کند در حالی که به سیستم فایل پایه دسترسی ندارد.
chrooting یک برنامه یک راه عالی برای آزمایش قابلیت اطمینان آن در یک فضای امن بدون تغییر فایل های سیستم واقعی است. علاوه بر این، شما همچنین می توانید خطر امنیتی ناشی از یک بسته در معرض خطر را کاهش دهید زیرا در یک محیط chrooted، بسته در معرض خطر قادر به دسترسی و اصلاح فایل های حساس سیستم نخواهد بود.
این برنامه فقط میتواند به فایلهای وارد شده به دایرکتوری chroot شده دسترسی داشته باشد و آنها را مشاهده کند، که در غیر این صورت به عنوان “chroot jail” شناخته میشود. این مانع از تداخل برنامه و فرآیندهای فرعی آن با سیستم پایه می شود.
chroot Jail چیست؟
زندان chroot یک محیط ایزوله است که برنامه های chroot در آن قرار دارند و اجرا می شوند. اصطلاح chroot jail از این مفهوم گرفته شده است که فرآیند و فرآیندهای فرعی آن در محیط chrooted هیچ دسترسی یا دیدی به سیستم فایل پایه ندارند و در محدوده chroot با منابع از پیش تعیین شده به دام افتاده اند.
اکنون که مفهوم chroot برای شما روشن شده است، بیایید دست به کار شویم و بیاموزیم که چگونه می توانید یک زندان chroot ایجاد کنید و فرآیندهای ایجاد شده در آن را ایجاد کنید.
چگونه یک chroot Jail بسازیم و برنامه ها را در آن اجرا کنیم
زندان chroot اساساً دایرکتوری است که شامل تمام منابع، فایلها، فایلهای باینری و سایر وابستگیهایی است که یک برنامه برای عملکرد صحیح به آن نیاز دارد.
با این حال، بر خلاف یک محیط لینوکس معمولی، محیط chroot jail بسیار محدود است و برنامه نمی تواند به فایل ها و منابع سیستم خارجی یا اضافی دسترسی داشته باشد.
به عنوان مثال، برای اجرای پوسته Bash در زندان chroot، باید روی باینری Bash و تمام وابستگیهای آن در فهرست chroot کپی کنید.
در اینجا مراحل ایجاد زندان chroot و ایجاد پوسته Bash آمده است:
- برای اجرای موفقیت آمیز یک برنامه، باید تمام وابستگی های آن را در دایرکتوری chrooted کپی کنید. بیایید باینری، در این مورد، Bash، و مکان تمام وابستگی های آن را با استفاده از دستورات which و ldd پیدا کنیم: which bashldd /usr/bin/bash
- اکنون که مکانهای باینری و وابستگیهای آن را میدانید، آنها را در فهرستی که میخواهید به زندان chroot تبدیل کنید، کپی کنید. با استفاده از دستور mkdir دایرکتوری های لازم را ایجاد کنید و با استفاده از دستور cp، تمام فایل ها را در دایرکتوری های مربوطه کپی کنید: mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* /lib64/ && cp /bin/bash /bin/
- در نهایت، با کپی شدن برنامه و وابستگیهای آن، میتوانید دستور chroot را با امتیازات بالا با استفاده از پیشوند sudo اجرا کنید تا محیط chroot را در فهرست انتخابی ایجاد کنید. به طور پیش فرض، یک پوسته Bash ایجاد می کند. در اینجا دستوری برای تایپ وجود دارد: sudo chroot directory_name
which bash
ldd /usr/bin/bash
mkdir bin lib lib64 && cp -r /lib/ * ./lib && cp -r /lib64/* /lib64/ && cp /bin/bash /bin/
sudo chroot directory_name
این تمام مراحل برای ایجاد یک زندان chroot و اجرای یک برنامه در داخل آن است.
چگونه از زندان chroot خارج شویم
در حالی که زندانهای chroot برای آزمایش نرمافزارهای ناپایدار خوب هستند، در هنگام مدیریت اتصالات SSH نیز مفید هستند زیرا کروت کردن کاربران متصل یکی از راههای متعدد برای ایمن کردن سرور SSH شما است.
از طرف دیگر، اگر شما یک آزمایشکننده نفوذ هستید و وارد سرور SSH هدف خود شدهاید، پیدا کردن آن به عنوان یک محیط کروتشده میتواند خستهکننده باشد و مانند یک بنبست احساس شود.
با این حال، راههای زیادی برای فرار از زندان chroot با پیکربندی نادرست وجود دارد، برخی از آنها به مهارتهای برنامهنویسی C نیاز دارند، در حالی که برخی دیگر را میتوان با ابزارسازی خودکار کرد. چند راه آسان برای فرار از chroot عبارتند از:
- تماسهای chroot تودرتو
- تماسهای chroot تودرتو با توصیفگر فایل ذخیرهشده
- روش نصب ریشه
- فرار پروفسور
- ردیابی فرار
توجه داشته باشید که برای انجام chroot escape با استفاده از هر یک از این روش ها، باید امتیازات افزایش یافته در سیستم داشته باشید. با مراجعه به مخزن GitHub chw00t، یک ابزار اتوماسیون فرار chroot، درباره این روشهای فرار بیشتر بیاموزید.
اکنون همه چیز را در مورد chroot در لینوکس می دانید
اکنون که میدانید chroot چیست، چگونه کار میکند و چگونه آن را پیادهسازی کنید، باید بتوانید برنامههای سندباکس را بدون دردسر از ترمینال انجام دهید. به خاطر داشته باشید که همانطور که می دانید راه های مختلفی برای خارج شدن از یک محیط کروت وجود دارد.
این نشان می دهد که chroot به هیچ وجه برای پیاده سازی به عنوان یک ویژگی امنیتی طراحی نشده است. بنابراین باید با احتیاط زیادی از chroot استفاده کنید زیرا یک پیکربندی نامناسب ممکن است نتیجه معکوس داشته باشد و ایمنی سیستم شما را به خطر بیندازد.
بهتر است به راهحلهای Sandboxing اختصاصی مانند نرمافزار کانتینریسازی یا ماشینهای مجازی پایبند باشید. هر دوی آنها حول محور sandboxing و امنیت هستند، بنابراین، مگر اینکه روز صفر جدیدی در شهر وجود داشته باشد، لازم نیست نگران امنیت و یکپارچگی سیستم خود باشید.
اگر مطمئن نیستید که بین نرم افزار کانتینری و مجازی سازی کدام را انتخاب کنید، باید هر دو را امتحان کنید و خودتان ببینید کدام یک بهتر است.