هر فرآیندی که روی یک سیستم لینوکس اجرا می‌شود، دارای یک دایرکتوری root (دایرکتوری کاری) است. هنگامی‌که نیاز به تغییر این دایرکتوری داشته باشید، دستور Chroot می‌تواند به شما کمک کند. با استفاده از دستور chroot، دایرکتوری اصلی یک فرآیند و فرآیند‌های فرزند آن تغییر می‌نماید. در این مقاله، به شرح دستور chroot و کاربردهای آن پرداخته شده است.

 

تغییر دایرکتوری root، دسترسی شما به فایل‌های دیگر در دایرکتوری‌های مختلف را نیز منع می‌کند. دستور chroot در هنگام نیاز به تنظیم مجدد رمزعبور فراموش شده یا نصب مجدد boot loader سیستم شما نیز مفید است.

 

این مطلب نیز ممکن است برای شما مفید باشد: دریافت basename نام فایل یا نام دایرکتوری در bash

 

قبل از تغییر در یک دایرکتوری متفاوت با استفاده از Chroot، دایرکتوری هدف باید mount شود. mount کردن دایرکتوری حتی پس از رفتن به آن دایرکتوری امکان‌پذیر است. اما توصیه می‌شود قبل از استفاده از دستور Chroot این کار را انجام دهید. در این فرآیند، دایرکتوری ویرایش شده به عنوان chroot jail یا jailed directory نامیده می‌شود.

ساختار اصلی دستور chroot به صورت زیر است:

$ chroot [option] [path-to-new] [command]

 

کاربردهای اصلی دستور Chroot

برای دستور chroot سه کاربرد اصلی وجود دارد که به شرح زیر است:

  • بازیابی رمز ورود لینوکس فراموش شده
  • نصب مجدد boot loader
  • ایجاد یک محیط آزمایشی

 

گزینه‌های دستور chroot

1. help-: به منظور مشاهده صفحه راهنما استفاده می‌شود.

2. groups = G_LIST-: برای مشخص کردن گروه‌های تکمیلی استفاده می‌شود.

3. userspace=USER:GROUP-: به منظور مشخص کردن شناسه یا نام گروه استفاده می‌شود.

4. version-: برای گرفتن نسخه Chroot استفاده می‌شود.

 

نمونه‌ای از کاربرد دستور Chroot

برای استفاده از دستور chroot، با ایجاد دایرکتوری شروع کنید.

$ mkdir $HOME/test-jail

در اینجا، test-jail دایرکتوری جدید ما است.

 

در مرحله بعد، دایرکتوری‌های دیگر، BIN و LIB64 را در داخل دایرکتوری test-jail ایجاد نمایید. برای این کار، از دستور زیر استفاده کنید:

$ mkdir -p $HOME/test-jail/{bin,lib64}

 

با دایرکتوری‌های ایجاد شده، اکنون می‌توانید بدون استفاده از Chroot به آن دایرکتوری بروید.

$ cd $HOME/test-jail

 

به عنوان مثال، ما دستورات LS و BIN را با استفاده از دستورات زیر به jail ایجاد شده اضافه کردیم:

$ cp -v /bin/{bash, ls} $HOME/test-jail/bin

 

پس از کپی کردن فایل‌ها، باید کتابخانه‌های مورد نیاز را اضافه کنید. بدین منظور، از LDD استفاده کرده و باینری‌ها را برای کتابخانه‌های مشترک اضافه نمایید؛ همانطور که در شکل زیر مشاهده می‌کنید.

$ ldd /bin/bash

 

خروجی فوق، باینری‌ها را برای bash اضافه می‌کند. با استفاده از همان ساختار، LS را اضافه نمایید.

$ ldd /bin/ls

 

برای باینری‌های اضافه شده، باید کتابخانه‌های آن‌ها را کپی کنید. به‌عنوان‌مثال، تصویر بالا کتابخانه‌ها را برای وابستگی‌های LS نشان می‌دهد که شما باید آن‌ها را اضافه نمایید تا از این دستور بتوانید در chroot jail استفاده کنید.

شما می‌توانید کتابخانه‌ها را یک به یک کپی کنید؛ یا یک اسکریپت Bash ایجاد نمایید تا همه فایل‌ها را همزمان کپی کنید.

به عنوان مثال، برای کپی کردن کتابخانه‌های /bin/bash، شما می‌توانید از اسکریپت زیر استفاده کرده و آن را در دایرکتوری فعلی در دایرکتوری chroot اجرا نمایید.

 

ساختار زیر، کتابخانه‌ها را یک به یک کپی می‌کند.

$ cp -v [library-to-copy] $HOME/jail/lib64

اطمینان حاصل نمایید که کتابخانه‌ها را برای LS و Bash کپی کرده‌اید.

پس از کپی کردن همه کتابخانه‌ها، وقت آن است که از دستور Chroot برای رفتن به دایرکتوری‌های chroot jail ساخته شده استفاده نمایید.

در اینجا می‌توانید از LS یا Bash استفاده کنید. به عنوان مثال می‌توانید مشابه زیر از bash با chroot استفاده نمایید.

$ sudo chroot $HOME/test-jail /bin/bash

این دستور، شما را به دایرکتوری Chroot منتقل می‌کند که از آن نمی‌توانید به سایر دایرکتوری‌ها یا فایل‌های خارج از آن دسترسی پیدا کنید.

اگر می‌خواهید از chroot jail خارج شوید، دستور exit را در خط فرمان تایپ نمایید. در آخر، شما به دایرکتوری root معمولی سیستم خود منتقل خواهید شد.

 

 

 

منبع:

linuxhint