تغییر ریشه
Chroot در سیستم عامل یونیکس، ابزاری است برای تغییر دادن دایرکتوری ریشه بعضی از پروسه ها و ساختن یک محیط امن و جدا کردن قسمتی از سیستم برای آنها. پروسه هایی که در Chroot ساخته میشوند نمیتوانند به فایلها یا منابع خارج از آن دسترسی داشته باشند. Chroot قالبا برای مراقبت از سیستم در مواقعی مانند نصب مجدد گراب (بوت لودر) یا ریست کردن پسورد فراموش شده بکار میرود.
این عملیات معمولا از طریق دیسک زنده (Live CD) و یا توسط فلش (Live USB) به یک پارتیشن mount شده حاوی سیستم عامل انجام میشود.
محتویات |
پیش نیاز ها
- بوت شدن به یک محیط کاری در یک لینوکس دیگر (برای مثال اوبونتو که با یک دیسک یا فلش دیسک (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 باید فایل 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 برای نگهداری از سیستم نیاز دارید بیابید.
- بروز رسانی یا دانگرید بستهها.
- از نو سازی ایمیج initcpio
- تنظیم دوبارهی گذرواژه فراموش شده
- تعمیر فایل etc/fstab/
- نصب مجدد گراب
خروج از chroot
وقتی کارتان با chroot تموم شد از محیط chroot خارج شید:
# exit
بعد فایل سیستم های mount شده رو umount کنید:
# umount (proc,sys,dev,boot,…)
در نهایت هم سعی کنید هاردتان راumount کنید:
# cd .. # umount arch/
اگر خطایی مشاهده کردید که پیغام میدهد mnt/ یا هر پارتیشن دیگری مشغول به کار است، از ۲ حالت زیر خارج نیست:
- برنامه ای دیگر کنار chroot در حال استفاده از درایو مورد نظراست
- و یا در بیشتر مواقع: یک دایرکتوری فرعی هنوز mount شده باقی مانده.برای مثال شاخه mnt/arch/usr/ در داخل شاخه mnt/arch/ .
در مورد مثال ذکر شده اول باید نقطه ی فرعی را umount کنید برای یادآوری تمام نقاط mount شده از دستور mount بدون پارامتر استفاده کنید:
# mount
اگه در این مرحله هم به مشکل داشتید از تنظیمات اجباری استفاده کنید:
# umount -f /mnt
بعد از این می تونید با خیال راحت سیستم را ریستارت کنید.