
فرمان [chrot] می تواند شما را به زندان بفرستد ، محیط های توسعه یا آزمایش خود را منزوی کند یا فقط امنیت سیستم خود را بهبود بخشید. ما ساده ترین روش استفاده از آن را به شما نشان می دهیم.
کلاهبرداری چیست؟
اگر می خواهید سودمندی یک فرمان را اندازه گیری کنید ، باید عملکردهای ارائه شده و سهولت استفاده آن را در نظر بگیرید. اگر استفاده از آن بسیار پیچیده باشد و یا باد آن زیاد نباشد ، باعث شود که بخواهند از آن استفاده کنند ، ممکن است عملکرد صفر باشد. اگر کسی از آن استفاده نکند ، هیچ عملکردی را ارائه نمی دهد.
در بحث و گفتگو با کاربران لینوکس – بصورت حضوری و در تالار گفتگو – به نظر می رسد که فرمان [chrot از جمله مواردی است که به سختی حل می شود. استفاده ، یا بیش از حد persnickety و خسته کننده برای راه اندازی. به نظر می رسد این ابزار فوق العاده به اندازه ممکن استفاده نمی شود.
با chroot می توانید برنامه ها یا پوسته های تعاملی مانند Bash را در یک سیستم پرونده محصور شده تنظیم و اجرا کنید. سیستم فایل منظم شما همه چیز در [chroot chroot محصور شده و در آن موجود است. هیچ چیز در محیط chroot نمی تواند از فهرست اصلی ، خاص و اصلی خود خارج شود ، بدون آنکه به امتیازات ریشه ای تبدیل شود. این باعث شده است که این نوع محیط نام مستعار یک زندان را بدست آورد. اصطلاح "زندان" نباید با دستور FreeBSD زندان اشتباه گرفته شود ، که یک محیط chroot را ایجاد می کند که نسبت به معمول chroot محیط ایمن تر است. [19659006] اما در واقع ، یک راه بسیار ساده برای استفاده از chroot وجود دارد ، که می خواهیم از آن عبور کنیم. ما از دستورات منظم لینوکس استفاده می کنیم که روی همه توزیع ها کار خواهد کرد. بعضی از توزیع های لینوکس برای تنظیم محیط های chroot اختصاصی دارند ، مانند dbootstrap برای اوبونتو ، اما ما در اینجا دچار آگنوستیک هستیم.
چه موقع باید از chroot استفاده کنید؟
A chroot محیطی عملکردی شبیه به یک ماشین مجازی ارائه می دهد ، اما این یک راه حل سبک تر است. سیستم اسیر شده برای نصب و پیکربندی نیازی به یک مشاور متخصص مانند VirtualBox یا Virtual Machine Manager ندارد. همچنین نیازی به هسته در سیستم اسیر نیست. سیستم اسیر هسته موجود شما را به اشتراک می گذارد.
در بعضی حواس ، محیط chroot محیط های نزدیک به ظروف مانند LXC نزدیک به ماشینهای مجازی هستند. آنها سبک هستند ، سریع به محل استقرار می روند ، و ایجاد و شلیک یک اتوماتیک می تواند انجام شود. مانند ظروف ، یکی از راههای مناسب برای پیکربندی آنها نصب کافی برای سیستم عامل کافی برای انجام کارهایی است که لازم است. به سؤال "آنچه مورد نیاز است" پاسخ داده می شود که چگونه می خواهید از محیط chroot خود استفاده کنید.
برخی از کاربردهای رایج عبارتند از:
توسعه نرم افزار و تأیید محصول توسعه دهندگان نرم افزار می نویسند و تیم تأیید محصول (PV) آن را آزمایش می کنند. بعضی اوقات مواردی توسط PV پیدا می شود که نمی تواند در رایانه برنامه نویس تکرار شود. توسعه دهنده انواع ابزار و کتابخانه را در رایانه توسعه خود نصب کرده است که متوسط کاربر و PV آنها را ندارند. غالباً ، نرم افزارهای جدیدی که برای توسعه دهنده کار می کند اما برای دیگران نباشد ، از منبعی در رایانه شخصی توسعه دهنده استفاده کرده است که در نسخه آزمایشی این نرم افزار گنجانده نشده است. chroot به توسعه دهندگان اجازه می دهد تا یک محیط اسیر وانیلی ساده را روی رایانه خود داشته باشند تا بتوانند قبل از دادن PV به نرم افزار ، نرم افزار را در آن فرو کنند. محیط اسیر را می توان با حداقل وابستگی های کمی که نرم افزار به آن نیاز دارد پیکربندی شد.
کاهش خطر توسعه . توسعه دهنده می تواند یک محیط توسعه اختصاصی ایجاد کند تا هر اتفاقی که در آن می افتد نتواند رایانه شخصی واقعی خود را خراب کند.
در حال اجرا نرم افزار محروم . بعضی اوقات شما فقط باید یک نسخه قدیمی از چیزی را اجرا کنید. اگر نرم افزار قدیمی دارای الزاماتی باشد که با نسخه لینوکس شما سازگار باشد یا ناسازگار باشد ، می توانید chroot محیطی را برای نرم افزار مشکل ایجاد کنید.
بازیابی و ارتقاء Filesystem : اگر لینوکس نصب غیرقابل اجرا می باشد ، می توانید از chroot برای سوار کردن سیستم پرونده آسیب دیده به یک نقطه سوار بر روی CD زنده استفاده کنید. این به شما امکان می دهد تا در سیستم آسیب دیده کار کنید و سعی کنید آن را برطرف کنید که انگار به صورت عادی در ریشه نصب شده است. این بدان معناست که مسیرهای پرونده مورد انتظار درون سیستم آسیب دیده به درستی از فهرست ریشه و نه از محل سوء استفاده از CD زنده ارجاع می شوند. از تکنیک مشابهی در مقاله استفاده شده است که توصیف می کند چگونه می توان از سیستم پرونده های لینوکس از ext2 یا ext3 به ext4 مهاجرت کرد.
برنامه های کاربردی Ringfencing . اجرای یک سرور FTP یا سایر دستگاه های متصل به اینترنت در داخل یک محیط chroot آسیب هایی را که یک مهاجم خارجی می تواند انجام دهد محدود می کند. این می تواند یک گام ارزشمند در سخت کردن امنیت سیستم شما باشد.
مرتبط: نحوه مهاجرت سیستم های File2 Ext2 یا Ext3 به Ext4 در لینوکس
ما به یک دایرکتوری نیاز داریم تا به عنوان فهرست اصلی محیط chroot عمل کنیم. به این ترتیب که یک روش مرجع برای مراجعه به آن فهرست وجود دارد ، یک متغیر ایجاد خواهیم کرد و نام دایرکتوری را در آن ذخیره می کنیم. در اینجا ما یک متغیر را برای ذخیره مسیر به فهرست "testroot" تنظیم می کنیم. فرقی نمی کند این فهرست هنوز وجود نداشته باشد ، ما به زودی آن را ایجاد خواهیم کرد. اگر دایرکتوری وجود دارد ، باید خالی باشد.
chr = / home / dave / testroot
اگر دایرکتوری وجود ندارد ، ما باید آن را بسازیم ما می توانیم با این دستور این کار را انجام دهیم. گزینه -p (والدین) تضمین می کند که هر دایرکتوری پدر و مادر گمشده در همان زمان ایجاد می شوند:
mkdir -p $ chr
[19659006مانیازبهایجاددایرکتوریبراینگهداریبخشهاییازسیستمعاملداریمکهبهمحیط chroot ما نیاز دارند. ما قصد داریم یک محیط مینیمال لینوکس را تنظیم کنیم که از Bash به عنوان پوسته تعاملی استفاده می کند. ما همچنین دستورات لمسی ، rm ، و ls را نیز شامل خواهیم شد. این به ما امکان می دهد تا از تمام دستورات داخلی استفاده کرده و را لمس کنیم ، rm و ls . ما قادر به ایجاد ، لیست و حذف پرونده ها و استفاده از Bash خواهیم بود. و — در این مثال ساده – همه اینهاست.
فهرستهایی را که می خواهید ایجاد کنید در محدوده [brace] {} ذکر کنید.
mkdir -p $ chr / {bin، lib، lib64} [19659030] mkdir-p $ chr / {bin، lib، lib64} در یک پنجره ترمینال " width="646" height="57" src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"/>
اکنون دایرکتوری را در فهرست اصلی خود تغییر خواهیم داد.
cd $ chr
بیایید دوتایی را که در محیط مینیمالیستی لینوکس نیاز داریم از فهرست "/ bin" معمولی خود در فهرست " chroot [/bin"کپیکنیدگزینه -v (verbose) باعث می شود cp به ما بگویید که این کار را انجام می دهد زیرا هر عمل کپی را انجام می دهد.
cp -v / bin / {bash، touch، ls، rm} $ chr
پرونده ها برای ما کپی شده اند:
این باینری ها دارای وابستگی خواهند بود. ما باید آنچه را که هست کشف کنیم و پرونده های را در محیط خود نیز کپی کنیم ، در غیر این صورت bash ، touch ، rm ، و ls قادر به عملکرد نخواهد بود. ما باید برای هر یک از دستورات انتخاب شده خود به نوبه خود این کار را انجام دهیم. ما ابتدا بش را انجام خواهیم داد. دستور ldd وابستگی ها را برای ما ذکر می کند.
ldd / bin / bash
وابستگی ها مشخص شده و در لیست پنجره ترمینال:
ما باید آن پرونده ها را در محیط جدید خود کپی کنیم. گرفتن جزئیات از آن فهرست و کپی کردن آنها به صورت یکجا ، بسیار وقت گیر و مستعد خطا خواهد بود.
خوشبختانه ، ما می توانیم آنرا نیمه اتوماتیک کنیم. ما دوباره وابستگی ها را لیست خواهیم کرد و این بار لیستی را تشکیل می دهیم. سپس لیستی را که می توانید پرونده ها را کپی کنید حلقه خواهیم کرد.
در اینجا ما از ldd استفاده می کنیم تا وابستگی ها را لیست کنیم و نتایج را از طریق لوله به egrep لیست کنیم. استفاده از egrep همان استفاده از grep با گزینه -E (بیان عادی منظم) است. گزینه -o (فقط تطبیق) خروجی را به قسمت های منطبق خطوط محدود می کند. ما به دنبال تطبیق پرونده های کتابخانه ای هستیم که به یک شماره ختم می شوند [0-9].
list = "$ (ldd / bin / bash | egrep -o '/lib.**. موفق19459072 helwest')" موفق19659049] list = "$(ldd /bin/bash | egrep -o '/lib.*.[0-9]')" in a terminal window" width="646" height="77" src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"/>
می توانیم محتوای این لیست را با استفاده از echo بررسی کنیم:
echo $ list
اکنون که ما لیست را داشته باشیم ، می توانیم با حلقه زیر از آن عبور کنیم و یکبار هم پرونده ها را کپی کنیم. ما برای تغییر در لیست از متغیر i استفاده می کنیم. برای هر یک از اعضای لیست ، ما پرونده را در فهرست اصلی chroot کپی می کنیم که این مقدار در $ chr نگه داشته شده است.
[ -v ( گزینه verbose) باعث می شود كه CP هر نسخه را هنگام انجام آن اعلام كند. گزینه - پدر و مادر تضمین می کند که هر دایرکتوری والدینی مفقود شده در محیط chroot ایجاد شود.
برای i در لیست. انجام cp -v - والدین "$ i" "$ {chr}"؛
و این خروجی است:
ما برای گرفتن وابستگی از آن تکنیک استفاده خواهیم کرد. از هر یک از دستورات دیگر و ما از تکنیک حلقه برای انجام کپی کردن واقعی استفاده خواهیم کرد. خبر خوب این است که ما فقط باید دستوراتی را که جمع آوری وابستگی ها را ویرایش می کند ، انجام دهیم.
ما می توانیم با ضربه زدن به کلید Up Arrow چندین بار دستور را از تاریخ فرمان خود بازیابی کنیم و سپس ویرایش فرمان حلقه کپی اصلاً نیازی به تغییر ندارد.
در اینجا ما از کلید Up Arrow برای یافتن دستور استفاده کرده ایم و ما آن را ویرایش کرده ایم تا بگوییم را لمس کنید به جای bash .
list = "$ (ldd / bin / touch | egrep -o '/ lib. * . [0-9]')"
[19659006] اکنون می توانیم همان دستور حلقه را مانند گذشته تکرار کنیم:
برای i در لیست $. انجام cp -v - والدین "$ i" "$ {chr}"؛
و پرونده های ما برای ما کپی می شوند:
اکنون می توانیم ویرایش کنیم [ list خط فرمان ls :
list = "$ (ldd / bin / ls | egrep -o '/ lib. * . [0-9]") "[19659071] list = "$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')" in a terminal window" width="646" height="77" src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"/>
باز هم ، ما از همان دستور حلقه استفاده می کنیم. اهمیتی نمی دهد که پرونده های موجود در لیست هستند. کورکورانه از طریق لیست کپی کردن پرونده ها برای ما کار می کند.
برای من در لیست. انجام cp -v - والدین "$ i" "$ {chr}"؛
و وابستگی های ls برای ما کپی شده است:
برای آخرین بار خط فرمان را ویرایش می کنیم ، و آن را برای rm کار می کند:
list = "$ (ldd / bin / ls | egrep - o '/lib.**. platform19459072 helwest')"ociation19659079pozlist=ociation19459053 معروفولو19659006 با استفاده از دستور کپی حلقه یک بار آخرین استفاده:
برای i در لیست $. انجام cp -v - والدین "$ i" "$ {chr}"؛ انجام شده
آخرین وابستگی های ما در محیط chroot ما کپی شده است. ما سرانجام آماده استفاده از دستور chroot هستیم. این دستور ریشه ی محیط chroot را تعیین می کند و مشخص می کند کدام برنامه برای اجرای پوسته است.
sudo chroot $ chr / bin / bash
محیط [chrot] ما اکنون فعال است. اعلان پنجره ترمینال تغییر کرده است و پوسته تعاملی توسط پوسته bash در محیط ما اداره می شود.
دستوراتی را که ما به محیط آورده ایم امتحان کنید.
ls
ls / home / dave / Documents
ls فرمان همانگونه عمل می کند که انتظار داریم وقتی از آن در محیط استفاده می کنیم. هنگامی که ما سعی می کنیم به یک فهرست دایرکتوری خارج از محیط دسترسی پیدا کنیم ، فرمان از کار نمی افتد.
می توانیم از لمس برای ایجاد پرونده استفاده کنیم ، ls را برای لیست آن ، و rm برای حذف آن.
sample_file.txt
ls
rm sample_file.txt
ls
لمس کنید. البته ، ما همچنین می توانیم از دستورات داخلی که پوسته Bash ارائه می دهد استفاده کنیم. اگر help را در خط فرمان تایپ کنید ، Bash آنها را برای شما لیست می کند.
help
از خروجی استفاده کنید تا محیط [chrot] را رها کنید:
خروج
اگر می خواهید Chroot را حذف کنید ] محیط ، شما به راحتی می توانید آن را حذف کنید:
rm-r testroot /
با حذف بازگشتی پرونده ها و دایرکتوری ها در chroot محیط.
اتوماتیک سازی برای راحتی
اگر فکر می کنید محیط های chroot ممکن است برای شما مفید باشد ، اما آنها کمی موافق هستند ، یادتان باشد که همیشه می تواند فشار و خطر را از وظایف تکراری با استفاده از نام های مستعار ، کارکردها و اسکریپت ها خارج کند.
مرتبط: چگونه به C عملکردهای Aliases و Shell را در لینوکس قرار دهید