Chroot Jail
کلمهی chroot مخفف عبارت زیر است:
Change Root
در لینوکس، هر پردازش یک مسیر ریشه (Root Directory) دارد که معمولاً با
/ مشخص میشود.این مسیر تعیین میکند یک برنامه از کجا شروع به دیدن فایلها و دایرکتوریهای سیستم کند.
در حالت عادی، یک پردازش میتواند ساختار اصلی سیستم را ببیند:
/
├── bin
├── etc
├── home
├── usr
├── var
└── root
اما با استفاده از Chroot میتوان Root یک پردازش را تغییر داد.
مثلاً:
/var/jail
├── bin
├── etc
├── lib
└── home
بعد از اجرای برنامه داخل این محیط، مسیر
/var/jail برای آن برنامه تبدیل به / میشود.یعنی برنامه فکر میکند در یک سیستم جدا اجرا میشود، در حالی که همچنان روی همان سیستم اصلی قرار دارد.
چرا به آن Jail میگویند؟
Jail یعنی «زندان».
چون یک کاربر یا سرویس داخل یک محدوده مشخص قرار میگیرد و فقط همان محیط را مشاهده میکند.
مثلاً یک کاربر FTP:
بدون Chroot:
FTP User
|
+-- کل فایل سیستم
با Chroot:
FTP User
|
+-- /home/user
|
+-- فایلهای خودش
در این حالت کاربر دیگر به مسیرهایی مثل:
/etc
/usr
/root
سیستم اصلی دسترسی ندارد.
اجرای Chroot
ساختار کلی دستور:
chroot /path/to/new/root command
مثلاً:
sudo chroot /var/jail /bin/bash
با این دستور، محیط Bash داخل Jail اجرا میشود و فقط فایلهای موجود در همان محیط را مشاهده میکند.
کاربردهای Chroot Jail
1) محدود کردن سرویسها
یکی از رایجترین استفادههای Chroot، محدود کردن سرویسهایی مثل FTP است تا در صورت وجود مشکل، دسترسی آنها به کل سیستم محدود شود.
2) تعمیر سیستم لینوکس
یکی از کاربردهای حرفهای Chroot، تعمیر سیستمهایی است که دیگر بوت نمیشوند.
با استفاده از Live Linux:
mount /dev/sda2 /mnt
chroot /mnt
بعد میتوان کارهایی مثل:
update-grub
passwd
apt update
را انجام داد.
3) ساخت محیط تست
با Chroot میتوان یک محیط لینوکسی آزمایشی ساخت، بدون اینکه سیستم اصلی تغییر کند.
مثلاً:
Ubuntu Host
|
+---- Debian Chroot
نکته امنیتی مهم
Chroot یک Sandbox کامل نیست.
Chroot فقط دید پردازش نسبت به فایلسیستم را تغییر میدهد.
اما:
❌ Kernel جدا ایجاد نمیکند
❌ Processها را کاملاً جدا نمیکند
❌ منابع سیستم را محدود نمیکند
به همین دلیل نباید آن را با Container یا Virtual Machine اشتباه گرفت.
Escape از Chroot
یکی از موضوعات مهم امنیتی، بررسی امکان خروج از محیط Chroot است.
دلیل اصلی این است که Chroot همچنان از همان Kernel سیستم اصلی استفاده میکند:
Host Kernel
|
+-- Normal Process
|
+-- Chroot Process
همچنین مدیریت Deviceها در مسیر:
/dev
بسیار مهم است.
چون قرار دادن Deviceهای حساس مثل:
/dev/mem
/dev/sda
میتواند امنیت محیط را کاهش دهد.
@JustMyLogss