تغییر ریشه

از ویکی آرچ لینوکس ایران
پرش به: ناوبری, جستجو

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

این عملیات معمولا از طریق دیسک زنده (Live CD) و یا توسط فلش (Live USB) به یک پارتیشن mount شده حاوی سیستم عامل انجام می‌شود.

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

محتویات

پیش نیاز ها

  • بوت شدن به یک محیط کاری در یک لینوکس دیگر (برای مثال اوبونتو که با یک دیسک یا فلش دیسک (USB) به صورت زنده بوت میشود.)
  • دسترسی به کاربر ریشه برای انجام عملیات chroot
  • مطمئن شدن از یکی بودن معماری لینوکس نصب شده با معماری لینوکس بوت شده برای chroot .اگر معماری لینوکس خود را نمی دانید می توانید با زدن دستور زیر در ترمینال از آن آگاه شوید:
# uname –m
  • اگر به لود کردن ماژول خاصی در محیط chrrot نیاز دارید،قبل از عملیات chroot بهتراست آن‌ها رو لود کنید.

همچنین خالی کردن swap قبل از عملیات chroot می تواند مفید باشد برای خالی کردن swap به شیوه زیر عمل کنید:

# swapon /dev/<اسم دستگاه یا پارتیشن>

سوار/پیاده کردن سیستم پرونده

در سیستم عامل های شبه unix همه چیزی به صورت یک فایل در یک محل پیش بینی شده در سلسله مراتب سیستم ذخیره می شود(حتی پوشه ها نوع خاصی از فایل ها هستند).
کلیه فضای قابل دسترس برای کاربر در یک درخت دایرکتوری خلاصه می شود، پایه این سیستم بر دایرکتوری ریشه استوار است.نصب/سوار کردن(Mounting) یک سیستم پروندباعث می شود تا Linux بداند دستگاه ورودی حاوی چه پرونده و دایرکتوری هایی می باشد.این پروسه شبیه سوار اسب شدن است البته با این تقاوت که در اینجا اسبی وجود ندارد!
سیستم پرونده را می توان سوار/ پیاده نمود. به این معنا که سیستم های پرونده می توانند به درخت دایرکتوری وصل شده و یا اتصال آنها یه درخت دایرکتوری را قطع کرد.سیستم های پرونده دیگر را نیز در صورت نیاز می توان سوار نمود مانند سیستم پرونده هایی که درون یک دیوایس می باشند.
پروسه سوار کردن یکی از تفاوت های بارز بین یونیکس و ویندوز است.برای استفاده از یک دیسک در ویندوز شما باید دیسک را داخل درایو مربوط قرار دهید؛ سپس بلافاصله به محتویات آن دسترسی پیدا می کنید.ولی در یونیکس بعد از قرار دادن دیسک در درایو باید آن را به طور صحیح سوار نمایید.شاید این کار تا اندازه ای پیچیده به نظر برسد ولی در عمل به سهولت انجام می گیرد.
برای سوار کردن ابتدا باید مکان ریشه را فهمید ،اگه آدرس ریشه را فراموش کرده اید دستور زیر را برای فهمیدن آن تایپ کنید: (علامت ستاره در خروجی نشان‌گر پارتیشن ریشه است.)

# fdisk -l

بعد از فهمیدن مسیر پارتیشن باید یک دایرکتوری برای سوار کردن پارتیشن روت ایجاد کنید:

# mkdir /mnt/arch
# mount /dev/<اسم دستگاه یا پارتیشن> /mnt/arch

تغییر ریشه

مرحله اول: mount موقت فایل سیستم:

$ cd /mnt/arch
# mount -t proc proc proc/
# mount -t sysfs sys sys/
# mount -o bind /dev dev/

اگه شما به سوار کردن یه شاخه که به صورت خارجی به روت وصل شده (مثل/boot, /var, /usr و ...) نیاز دارید به صورت زیر عمل کنید:

# mount /dev/<اسم دستگاه یا پارتیشن> boot/‎

امکان سوار کردن پارتیشن بعد از chroot نیز وجود دارد، ولی در کل این کار پیشنهاد نمیشود.به این دلیل که که بعد خارج‌شدن از chroot شما باید فایل سیستم های mount شده رو از سیستم به طور امن جدا کنید(umount) پس اگر قبل از ورود به chroot پارتیشن‌ها رو mount کنید، بعد از خروج می تونید با یه دستور ( umount all ) همه پارتیشن ها رو از سیستم به طور امن جدا کنید(چون محیط اصلی سیستم تمتم پارتیشن ها را میشناسد) ولی اگر بعد از ورود به chroot پارتیشنی رو mount کنید امکان umount وجود ندارد.این کار به ایمنی سیستم موقع خاموش کردن کمک می کند.

دسترسی به شبکه

برای دسترسی به شبکه از داخل chroot به صورت زیر عمل کنید:

# cp -L /etc/resolv.conf etc/resolv.conf
# cp -L /etc/hosts etc/hosts

همچنین برای شناسایی تنظیمات شل خودتان و ورود به chroot به صورت زیر عمل کنید:

# chroot . /bin/bash
توجه: اگه به خطای chroot: cannot run command '/bin/bash': Exec format error برخورید این احتمال وجود دارد که سیسنم مهمان و میزبان با هم از نظر معماری مطابقت نداشته‌ باشند.

دسترسی به گراب

برای دسترسی به گراب در کنار محیط chroot باید فایل etc/mtab/ سیستم را به روز کنید:

# grep -v rootfs /proc/mounts > /etc/mtab

اگه از bash استفاده می کنید می توانید پروفایل bash را در chroot تغییر دهید، معمولا فایل پیکربیندی پروفایل bash در یکی از دو مسیر زیر است با این حال می توانید با باز کردن فایل زیر از مسیر فایل های پیکریندی پروفایل ها مطلع شوید:

~/.bash_profile
~/.bashrc
# nano  source /etc/profile

اگر bash شما از اجازه نامه خاصی استفاده نمی کند، ساختن یکی را در ذهنتان داشته باشید تا بتوانید محیط chroot را شخصی سازی کنید:

# export PS1="(chroot) $PS1"

نگداری از سیستم

در این قسمت شما می‌توانید بعضی از ابزارهایی که در کنار محیط chroot برای نگهداری از سیستم نیاز دارید بیابید.

خروج از chroot

وقتی کارتان با chroot تموم شد از محیط chroot خارج شید:

# exit

بعد فایل سیستم های mount شده رو umount کنید:

#  umount (proc,sys,dev,boot,…)

در نهایت هم سعی کنید هاردتان راumount کنید:

# cd ..
# umount arch/

اگر خطایی مشاهده کردید که پیغام میدهد mnt/ یا هر پارتیشن دیگری مشغول به کار است، از ۲ حالت زیر خارج نیست:

  1. برنامه ای دیگر کنار chroot در حال استفاده از درایو مورد نظراست
  2. و یا در بیشتر مواقع: یک دایرکتوری فرعی هنوز mount شده باقی مانده.برای مثال شاخه mnt/arch/usr/ در داخل شاخه mnt/arch/ .


در مورد مثال ذکر شده اول باید نقطه ی فرعی را umount کنید برای یادآوری تمام نقاط mount شده از دستور mount بدون پارامتر استفاده کنید:

# mount

اگه در این مرحله هم به مشکل داشتید از تنظیمات اجباری استفاده کنید:

# umount -f /mnt

بعد از این می تونید با خیال راحت سیستم را ریستارت کنید.

زبان‌های دیگر