| SCHROOT.CONF(5) | Debian sbuild | SCHROOT.CONF(5) |
نام (NAME)
schroot.conf - پرونده تعریف chroot برای schroot
شرح (DESCRIPTION)
schroot.conf یک پرونده متنی ساده با کدگذاری UTF-8 است که chrootهای موجود برای استفاده با schroot را توصیف میکند.
توضیحات (کامنتها) با یک نویسه ‘#’ (“هش”) در ابتدای خط یا به دنبال هر متن دیگری آغاز میشوند. تمام متنهای سمت راست ‘#’ به عنوان توضیح در نظر گرفته میشوند.
قالب پیکربندی به سبک پروندههای INI است که به گروههایی از جفتهای کلید-مقدار تقسیم شده و با نام بخشها در داخل قلاب (براکت) از یکدیگر جدا میشوند.
گزینههای عمومی (General options)
یک chroot به صورت گروهی از جفتهای کلید-مقدار تعریف میشود که با یک نام در داخل قلاب در یک خط جداگانه آغاز میگردد. این پرونده میتواند شامل چندین گروه باشد که در نتیجه چندین chroot را تعریف میکنند.
تعریف یک chroot با نام chroot در داخل قلاب آغاز میشود. برای نمونه:
- [sid]
نام تابع محدودیتهای نامگذاری مشخصی است. برای جزئیات بیشتر بخش “نامهای Chroot” را در زیر ببینید.
به دنبال آن چندین جفت کلید-مقدار قرار میگیرد، هر خط یک جفت:
- type=type
- نوع chroot. انواع معتبر عبارتند از: ‘plain’، ‘directory’، ‘file’، ‘loopback’، ‘block-device’، ‘btrfs-snapshot’، ‘zfs-snapshot’ و ‘lvm-snapshot’. در صورت خالی بودن یا حذف، نوع پیشفرض ‘plain’ است. توجه داشته باشید که chrootهای ‘plain’ اسکریپتهای برپاسازی را اجرا نکرده و سیستمهای فایل را سوار نمیکنند؛ ‘directory’ برای استفاده عادی توصیه میشود (بخش “chrootهای plain و directory” را در زیر ببینید).
- description=description
- توضیحی کوتاه درباره chroot. این مقدار میتواند برای زبانهای مختلف محلیسازی شود؛ بخش “محلیسازی” را در زیر ببینید.
- priority=number
- تنظیم اولویت یک chroot. number یک عدد صحیح مثبت است که نشان میدهد آیا یک توزیع قدیمیتر از دیگری است یا خیر. برای نمونه، ممکن است “oldstable” و “oldstable-security” مقدار ‘0’ داشته باشند، در حالی که “stable” و “stable-security” مقدار ‘1’، “testing” مقدار ‘2’ و “unstable” مقدار ‘3’ داشته باشند. خود مقادیر مهم نیستند، بلکه تفاوت میان آنها اهمیت دارد. این گزینه منسوخ شده و دیگر توسط schroot استفاده نمیشود، اما همچنان استفاده از آن مجاز است؛ در نسخههای آینده نامعتبر و حذف خواهد شد.
- message-verbosity=verbosity
- تنظیم میزان پرحرفی (verbosity) پیامهای چاپشده توسط schroot هنگام برپاسازی، اجرای دستورات و پاکسازی chroot. تنظیمات معتبر عبارتند از: ‘quiet’ (فرونشاندن بیشتر پیامها)، ‘normal’ (پیشفرض) و ‘verbose’ (نمایش تمامی پیامها). این تنظیم توسط گزینههای --quiet و --verbose بازنویسی میشود.
- users=user1,user2,...
- فهرستی جداشده با کاما از کاربرانی که مجاز به دسترسی به chroot هستند. در صورت خالی بودن یا حذف، به هیچ کاربری اجازه دسترسی داده نخواهد شد (مگر آنکه گروهی که به آن تعلق دارند در groups مشخص شده باشد).
- groups=group1,group2,...
- فهرستی جداشده با کاما از گروههایی که مجاز به دسترسی به chroot هستند. در صورت خالی بودن یا حذف، به هیچ گروهی از کاربران اجازه دسترسی داده نخواهد شد.
- root-users=user1,user2,...
- فهرستی جداشده با کاما از کاربرانی که مجاز به دسترسی ریشه (root) بدون گذرواژه به chroot هستند. در صورت خالی بودن یا حذف، به هیچ کاربری بدون گذرواژه اجازه دسترسی ریشه داده نخواهد شد (اما اگر یک کاربر یا گروهی که به آن تعلق دارد به ترتیب در users یا groups باشد، ممکن است با گذرواژه دسترسی پیدا کند). بخش “امنیت” را در زیر ببینید.
- root-groups=group1,group2,...
- فهرستی جداشده با کاما از گروههایی که مجاز به دسترسی ریشه (root) بدون گذرواژه به chroot هستند. در صورت خالی بودن یا حذف، به هیچ کاربری بدون گذرواژه اجازه دسترسی ریشه داده نخواهد شد (اما اگر یک کاربر یا گروهی که به آن تعلق دارد به ترتیب در users یا groups باشد، ممکن است با گذرواژه دسترسی پیدا کند). بخش “امنیت” را در زیر ببینید.
- aliases=alias1,alias2,...
- فهرستی جداشده با کاما از نامهای مستعار (نامهای جایگزین) برای این chroot. برای نمونه، یک chroot با نام “sid” ممکن است برای راحتی یک نام مستعار ‘unstable’ داشته باشد. نامهای مستعار مشمول همان محدودیتهای نامگذاری نام خود chroot هستند.
- profile=directory
- script-config=filename
- رفتار اسکریپتهای برپاسازی chroot را میتوان به ازای هر chroot با تنظیم یک نمایه (پروفایل) پیکربندی مشخص سفارشیسازی کرد. این دایرکتوری نسبت به /etc/schroot است. مقدار پیشفرض ‘default’ است. پروندههای موجود در این دایرکتوری توسط اسکریپتهای برپاسازی source میشوند، بنابراین رفتار آنها را میتوان با انتخاب نمایه مناسب سفارشیسازی کرد. گزینههای جایگزین عبارتند از: ‘minimal’ (پیکربندی کمینه)، ‘desktop’ (برای اجرای برنامههای رومیزی در chroot، که قابلیتهای بیشتری از سیستم میزبان را در داخل chroot در دسترس قرار میدهد) و ‘sbuild’ (برای استفاده از chroot جهت ساخت بستههای دبیان). سایر بستهها ممکن است نمایههای بیشتری فراهم کنند. مقادیر پیشفرض کلیدهای setup.config، setup.copyfiles، setup.fstab و setup.nssdatabases بر اساس تنظیم profile تعیین میشوند.
- توجه داشته باشید که کلید profile جایگزین کلید قدیمیتر script-config شده است. کلید script-config دقیقاً همانند profile است، اما عبارت “/config” به انتهای آن افزوده میشود. نام پرونده پیشفرض ‘default/config’ است. از هر کدام از این کلیدها میتوان استفاده کرد. اگر هر دو موجود باشند، آنگاه script-config اولویت خواهد داشت (و profile نادیده گرفته میشود). کلید script-config منسوخ شده و در نسخههای آینده حذف خواهد شد. توجه داشته باشید که اگر پرونده source شده توسط script-config تنها شامل متغیرهای استاندارد ارائهشده توسط schroot باشد، کلید profile معادل script-config خواهد بود؛ اگر هرگونه متغیر اضافی یا تکه اسکریپت شل اضافه شده باشد، لطفاً setup.config را نیز تنظیم کنید که همچنان اجازه میدهد این پرونده source شود. توصیه میشود در صورت امکان استفاده از پرونده source شده با کلیدهای اضافی در schroot.conf جایگزین گردد، اما همچنان امکان source کردن پرونده پیکربندی اضافی با استفاده از setup.config وجود خواهد داشت.
- کاربران دسکتاپ باید توجه داشته باشند که در صورت استفاده از gdm3، پرونده fstab با نام desktop/fstab نیاز به ویرایش خواهد داشت؛ لطفاً توضیحات درون این پرونده را برای دستورالعملهای بیشتر ببینید. همچنین کلید preserve-environment باید روی ‘true’ تنظیم شود تا متغیرهای محیطی درون chroot حفظ شوند.
- اگر هیچیک از نمایههای پیکربندی ارائهشده در بالا نیازهای شما را برآورده نمیکند، میتوان آنها را برای سفارشیسازی بیشتر ویرایش کرد و/یا به عنوان الگو برای نمایههای کاملاً جدید کپی و استفاده نمود.
- توجه داشته باشید که نمایههای مختلف پیامدهای امنیتی متفاوتی دارند؛ برای جزئیات بیشتر بخش “امنیت” را در زیر ببینید.
- setup.config=filename
- این کلید پروندهای را مشخص میکند که اسکریپتهای برپاسازی هنگام اجرا آن را source خواهند کرد. مقدار پیشفرض آن همان مقداری است که توسط script-config تنظیم میشود. این پرونده یک اسکریپت شل Bourne است و در نتیجه علاوه بر انتساب ساده متغیرها میتواند حاوی هر کد معتبر شل باشد. این کار برای نمونه اجازه میدهد رفتار بر اساس نوع یا نام خاص chroot سفارشیسازی شود. توجه داشته باشید که این اسکریپت برای هر بار فراخوانی اسکریپتها یکبار source میشود و باید اثر خنثی (idempotent) داشته باشد.
- تمامی تنظیمات پیشفرض این پرونده اکنون با استفاده از کلیدهای پیکربندی در schroot.conf قابل تنظیم هستند، همانطور که در زیر با جزئیات آمده است. پیکربندیهای موجود باید تغییر داده شوند تا به جای این پرونده از این کلیدها استفاده کنند. برای جزئیات بیشتر schroot-script-config(5) را ببینید. این نوع پرونده پیکربندی اسکریپت برپاسازی دیگر به عنوان بخشی از نمایههای استاندارد ارائه نمیشود، اما در صورت وجود و تنظیم این کلید همچنان source خواهد شد.
- setup.copyfiles=filename
- پروندهای شامل فهرستی از پروندهها برای کپی به درون chroot (هر پرونده در یک خط). پرونده در داخل chroot همان مسیر مطلق را خواهد داشت.
- setup.fstab=filename
- پرونده جدول فایلسیستم که برای سوار کردن سیستمهای فایل در داخل chroot استفاده میشود. قالب این پرونده همانند /etc/fstab است که در fstab(5) مستند شده است. تنها تفاوت این است که مسیر نقطه اتصال fs_dir نسبت به chroot است، نه نسبت به ریشه. همچنین توجه داشته باشید که نقاط اتصال روی میزبان یکسانسازی (canonicalise) میشوند، که تضمین میکند پیوندهای نمادین مطلق به درون chroot اشاره دارند، اما مسیرهای پیچیده شامل چندین پیوند نمادین ممکن است به اشتباه برطرف شوند؛ استفاده از پیوندهای نمادین تودرتو به عنوان نقاط اتصال توصیه نمیشود.
- setup.nssdatabases=filename
- پروندهای که پایگاههای داده سیستمی را برای کپی به درون chroot فهرست میکند. پایگاههای داده پیشفرض عبارتند از: ‘passwd’، ‘shadow’، ‘group’ و ‘gshadow’. سایر پایگاههای داده احتمالی که میتوانند افزوده شوند عبارتند از: ‘services’، ‘protocols’، ‘networks’ و ‘hosts’. پایگاههای داده با استفاده از getent(1) کپی میشوند، بنابراین تمام منابع پایگاه داده فهرستشده در /etc/nsswitch.conf برای هر پایگاه داده استفاده خواهند شد.
- setup.services=service1,service2,...
- فهرستی جداشده با کاما از سرویسها برای اجرا در chroot. این سرویسها هنگام شروع نشست آغاز شده و هنگام پایان نشست متوقف خواهند شد.
- command-prefix=command,option1,option2,...
- فهرستی جداشده با کاما از یک دستور و گزینههای آن دستور. این دستور و گزینههایش به عنوان پیشوند به تمامی دستورات اجراشده در داخل chroot اضافه خواهند شد. این کار برای افزودن دستوراتی مانند nice، ionice یا eatmydata به تمام دستورات اجراشده درون chroot سودمند است. دستورات nice و ionice بر زمانبندی پردازنده و ورودی/خروجی اثر میگذارند. دستور eatmydata عملیات fsync سیستم فایل را نادیده میگیرد و برای chrootهای یکبارمصرف مبتنی بر عکس فوری (snapshot) مناسب است؛ جاهایی که از دست رفتن دادهها اهمیتی ندارد اما سرعت بالا مهم است.
- personality=persona
- تنظیم شخصیت یا حوزه اجرای پردازش (personality) مورد استفاده. این گزینه برای نمونه هنگام استفاده از یک chroot ۳۲ بیتی روی یک سیستم ۶۴ بیتی سودمند است. گزینههای معتبر در لینوکس عبارتند از: ‘bsd’، ‘hpux’، ‘irix32’، ‘irix64’، ‘irixn32’، ‘iscr4’، ‘linux’، ‘linux32’، ‘linux_32bit’، ‘osf4’، ‘osr5’، ‘riscos’، ‘scorvr3’، ‘solaris’، ‘sunos’، ‘svr4’، ‘uw7’، ‘wysev386’ و ‘xenix’. مقدار پیشفرض ‘linux’ است. همچنین گزینه ویژه ‘undefined’ (شخصیت تنظیم نشده) وجود دارد. برای یک chroot ۳۲ بیتی روی سیستم ۶۴ بیتی، گزینه مورد نیاز ‘linux32’ است. تنها گزینه معتبر برای سیستمهای غیر لینوکسی ‘undefined’ است. مقدار پیشفرض برای سیستمهای غیر لینوکسی ‘undefined’ است.
- preserve-environment=true|false
- به صورت پیشفرض محیط درون chroot حفظ نخواهد شد و به جای آن از یک محیط کمینه استفاده میشود. برای حفظ دائمی متغیرهای محیطی مقدار را روی true تنظیم کنید. این کار به عنوان مثال هنگام اجرای برنامههای گرافیکی X در داخل chroot که برای کارکرد صحیح به متغیرهای محیطی نیاز دارند سودمند است. محیط را میتوان با استفاده از گزینه --preserve-environment نیز حفظ کرد.
- shell=shell
- هنگام اجرای یک شل ورود به سیستم (login shell)، تعدادی شل احتمالی به این ترتیب در نظر گرفته میشوند: دستور موجود در متغیر محیطی SHELL (اگر --preserve-environment استفاده شده باشد یا preserve-environment فعال باشد)، شل کاربر در پایگاه داده ‘passwd’، /bin/bash و در نهایت /bin/sh. این تنظیم ترتیب فوق را بازنویسی کرده و از شل مشخصشده استفاده میکند. این مقدار را میتوان با گزینه --shell بازنویسی کرد.
- environment-filter=regex
- محیطی که قرار است در chroot تنظیم شود برای حذف متغیرهای محیطی که ممکن است خطرات امنیتی ایجاد کنند پالایش خواهد شد. هر متغیر محیطی که با عبارت باقاعده گسترده POSIX مشخصشده همخوانی داشته باشد، پیش از اجرای هر دستوری در chroot حذف خواهد شد.
- متغیرهای محیطی بالقوه خطرناک به طور پیشفرض برای حفظ ایمنی با استفاده از عبارت باقاعده زیر حذف میشوند: “^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG|KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN|NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO|TERMINFO_DIRS|TERMPATH)$”.
chrootهای plain و directory (Plain and directory chroots)
chrootهای از نوع ‘plain’ یا ‘directory’ دایرکتوریهای قابل دسترسی در سیستم فایل هستند. این دو نوع به جز این واقعیت که chrootهای directory اسکریپتهای برپاسازی را اجرا میکنند در حالی که chrootهای plain این کار را انجام نمیدهند، همارز هستند. در نتیجه، سیستمهای فایلی مانند /proc در chrootهای plain سوار نمیشوند؛ پیکربندی دستی چنین chrootهایی بر عهده مدیر سیستم است، در حالی که chrootهای directory به طور خودکار پیکربندی میشوند. علاوه بر این، chrootهای directory گزینههای chroot پیوند فایلسیستم (filesystem union chroot) را پیادهسازی میکنند (بخش “گزینههای chroot پیوند فایلسیستم” را در زیر ببینید).
این نوع chrootها یک گزینه پیکربندی اضافی (الزامی) دارند:
- directory=directory
- دایرکتوری حاوی محیط chroot. این همان مکانی است که هنگام اجرای یک شل ورود یا یک دستور، ریشه به آن تغییر خواهد کرد. دایرکتوری باید وجود داشته باشد و دسترسیهای خواندن و اجرا داشته باشد تا به کاربران اجازه دسترسی به آن داده شود. توجه داشته باشید که در سیستمهای لینوکس برای استفاده به عنوان chroot در جای دیگری bind-mount میشود؛ دایرکتوری برای chrootهای ‘plain’ با گزینه --rbind دستور mount(8) سوار میشود، در حالی که برای chrootهای ‘directory’ به جای آن از --bind استفاده میشود تا اتصالات فرعی (sub-mounts) حفظ نشوند (آنها باید مانند /etc/fstab در سیستم میزبان، درون پرونده fstab تنظیم شوند).
chrootهای پروندهای (File chroots)
chrootهای از نوع ‘file’ پروندههایی در سیستم فایل فعلی هستند که شامل یک بایگانی از پروندههای chroot میباشند. آنها گزینههای chroot مبدأ (source chroot) را پیادهسازی میکنند (بخش “گزینههای chroot مبدأ” را در زیر ببینید). توجه داشته باشید که برای هر chroot از این نوع، یک chroot مبدأ متناظر (از نوع ‘file’ ) ایجاد خواهد شد؛ این امر برای دسترسی آسان به بایگانی مبدأ، مثلاً جهت بهروزرسانی است. این گزینههای اضافی نیز پیادهسازی شدهاند:
- file=filename
- پرونده حاوی محیط بایگانیشده chroot (الزامی). این پرونده باید یک tar (بایگانی نواری) باشد، که به صورت اختیاری با gzip، bzip2، xz، lzop یا lz4 فشرده شده است. پسوندهای پرونده مورد استفاده برای تعیین نوع عبارتند از: .tar، .tar.gz، .tar.bz2، .tar.xz، .tar.lzop، .tar.lz4، .tgz، .tbz، .txz، .tzo و .tlz4. مالک این پرونده باید کاربر root باشد و نباید توسط دیگران قابل نوشتن باشد. توجه داشته باشید که بایگانیهای zip دیگر پشتیبانی نمیشوند؛ zip قادر به بایگانی کردن لولههای نامگذاریشده (named pipes) و گرههای دستگاه (device nodes) نبود، بنابراین برای بایگانی کردن chrootها مناسب نبود.
- location=path
- این مسیر به chroot در داخل بایگانی است. برای نمونه، اگر بایگانی شامل یک chroot در /squeeze باشد، شما در اینجا “/squeeze” را مشخص میکنید. اگر chroot تنها محتوای درون بایگانی است، یعنی / سیستم فایل ریشه برای chroot است، این گزینه باید خالی رها شده یا کلاً حذف شود.
chrootهای لوپبک (Loopback chroots)
chrootهای از نوع ‘loopback’ یک سیستم فایل هستند که به صورت یک پرونده روی دیسک قرار دارند و از طریق اتصال لوپبک دسترسیپذیر هستند. پرونده بر حسب تقاضا به صورت لوپبک سوار و پیاده خواهد شد. chrootهای لوپبک گزینههای chroot قابل سوار کردن (mountable chroot) و chroot پیوند فایلسیستم (filesystem union chroot) را پیادهسازی میکنند (بخشهای “گزینههای chroot قابل سوار کردن” و “گزینههای chroot پیوند فایلسیستم” را در زیر ببینید)، به علاوه یک گزینه اضافی:
- file=filename
- نام پرونده حاوی سیستم فایل به همراه مسیر مطلق آن. برای نمونه “/srv/chroot/sid”.
chrootهای دستگاه بلوکی (Block device chroots)
chrootهای از نوع ‘block-device’ یک سیستم فایل در دسترس روی یک دستگاه بلوکی سوارنشده هستند. دستگاه بر حسب تقاضا سوار و پیاده خواهد شد. chrootهای دستگاه بلوکی گزینههای chroot قابل سوار کردن (mountable chroot) و chroot پیوند فایلسیستم (filesystem union chroot) را پیادهسازی میکنند (بخشهای “گزینههای chroot قابل سوار کردن” و “گزینههای chroot پیوند فایلسیستم” را در زیر ببینید)، به علاوه یک گزینه اضافی:
- device=device
- نام دستگاه بلوکی به همراه مسیر مطلق آن. برای نمونه “/dev/sda5”.
chrootهای عکس فوری Btrfs (Btrfs snapshot chroots)
chrootهای از نوع ‘btrfs-snapshot’ یک عکس فوری (snapshot) بیترافاس ایجادشده از یک زیرحجم (subvolume) موجود Btrfs روی یک سیستم فایل سوارشده Btrfs هستند. یک عکس فوری از این زیرحجم مبدأ بر حسب تقاضا در شروع نشست ایجاد شده و سپس سوار میشود. در پایان نشست، عکس فوری پیاده شده و حذف خواهد شد. این نوع chroot گزینههای chroot مبدأ (source chroot) را پیادهسازی میکند (بخش “گزینههای chroot مبدأ” را در زیر ببینید). توجه داشته باشید که برای هر chroot از این نوع، یک chroot مبدأ متناظر (از نوع ‘directory’ ) ایجاد خواهد شد؛ این امر برای دسترسی آسان به حجم مبدأ است. این گزینههای اضافی نیز پیادهسازی شدهاند:
- btrfs-source-subvolume=directory
- دایرکتوری حاوی زیرحجم مبدأ.
- btrfs-snapshot-directory=directory
- دایرکتوری که عکسهای فوری از زیرحجم مبدأ فوق در آن ذخیره میشوند.
chrootهای عکس فوری ZFS (ZFS snapshot chroots)
chrootهای از نوع ‘zfs-snapshot’ یک کلون (همتا) ZFS ایجادشده از یک مجموعه داده (dataset) موجود ZFS هستند. یک عکس فوری و یک کلون از این زیرحجم مبدأ بر حسب تقاضا در شروع نشست ایجاد شده و سپس کلون سوار میشود. در پایان نشست، کلون پیاده شده و کلون و عکس فوری حذف خواهند شد. این نوع chroot گزینههای chroot مبدأ (source chroot) را پیادهسازی میکند (بخش “گزینههای chroot مبدأ” را در زیر ببینید). توجه داشته باشید که برای هر chroot از این نوع، یک chroot مبدأ متناظر (از نوع ‘directory’ ) ایجاد خواهد شد؛ این امر برای دسترسی آسان به حجم مبدأ است. این گزینههای اضافی نیز پیادهسازی شدهاند:
- zfs-dataset=dataset_name
- نام مجموعه داده مبدأ ZFS برای استفاده.
- zfs-snapshot-options=snapshot_options
- گزینههای عکس فوری. اینها گزینههای اضافی برای ارسال به دستور zfs snapshot هستند.
chrootهای عکس فوری LVM (LVM snapshot chroots)
chrootهای از نوع ‘lvm-snapshot’ یک سیستم فایل در دسترس روی یک حجم منطقی (LV) در LVM هستند. یک LV عکس فوری از این LV بر حسب تقاضا ایجاد شده و سپس این عکس فوری سوار میشود. در پایان نشست، LV عکس فوری پیاده شده و حذف خواهد شد.
chrootهای عکس فوری LVM گزینههای chroot مبدأ (source chroot) (بخش “گزینههای chroot مبدأ” را در زیر ببینید) و تمامی گزینههای ‘block-device’ را پیادهسازی میکنند. توجه داشته باشید که برای هر chroot از این نوع، یک chroot مبدأ متناظر (از نوع ‘block-device’ ) ایجاد خواهد شد؛ این امر برای دسترسی آسان به دستگاه مبدأ است. این گزینه اضافی نیز پیادهسازی شده است:
- lvm-snapshot-options=snapshot_options
- گزینههای عکس فوری. اینها گزینههای اضافی برای ارسال به lvcreate(8) هستند. برای نمونه، “-L 2g” برای ایجاد یک عکس فوری با اندازه ۲ گیبیبایت (GiB). نکته: نام LV (با -n )، گزینه عکس فوری (با -s ) و مسیر LV اصلی نباید در اینجا مشخص شوند؛ آنها به صورت خودکار توسط schroot تنظیم میشوند.
chrootهای سفارشی (Custom chroots)
chrootهای از نوع ‘custom’ نوع خاصی از chroot هستند که برای پیادهسازی انواع جدیدی از chroot که توسط هیچیک از انواع بالا پشتیبانی نمیشوند استفاده میشوند. این امر ممکن است برای پیادهسازی و آزمایش یک نوع chroot جدید بدون نیاز به نوشتن هیچ کد ++C سودمند باشد. با این حال، شما باید اسکریپت برپاسازی خود را برای انجام کارهای برپاسازی بنویسید، زیرا این نوع chroot به خودی خود کار بسیار کمی انجام میدهد. همچنین باید کلیدهای سفارشی را برای استفاده در اسکریپت برپاسازی به تعریف chroot خود اضافه کنید؛ برخلاف پیکربندی انواع chroot بالا، هیچ اعتبارسنجی روی گزینهها صورت نخواهد گرفت مگر اینکه خودتان آن را در اسکریپت برپاسازی سفارشی خود انجام دهید. این گزینههای اضافی نیز پیادهسازی شدهاند:
- custom-session-cloneable=true|false
- تنظیم اینکه آیا نشستها با استفاده از این chroot قابل شبیهسازی (کلون) هستند یا خیر (به طور پیشفرض فعال است).
- custom-session-purgeable=true|false
- تنظیم اینکه آیا نشستها با استفاده از این chroot قابل پاکسازی هستند یا خیر (به طور پیشفرض غیرفعال است).
- custom-source-cloneable=true|false
- تنظیم اینکه آیا chrootهای مبدأ با استفاده از این chroot قابل شبیهسازی هستند یا خیر (به طور پیشفرض غیرفعال است).
گزینههای chroot مبدأ (Source chroot options)
انواع chroot شامل ‘btrfs-snapshot’، ‘file’ و ‘lvm-snapshot’ قابلیت chroot مبدأ را پیادهسازی میکنند. علاوه بر این، انواع chroot با پشتیبانی پیوند فایلسیستم فعال نیز chroot مبدأ را پیادهسازی میکنند (بخش “گزینههای chroot پیوند فایلسیستم” را در زیر ببینید). اینها chrootهایی هستند که به طور خودکار پیش از استفاده یک کپی از خود ایجاد میکنند و معمولاً تحت مدیریت نشست هستند. این chrootها علاوه بر این یک chroot اضافی در فضای نام source: ارائه میدهند تا دسترسی آسان به دادههای اصلی (بدون عکس فوری) را فراهم کنند و به نگهداری chroot کمک نمایند. یعنی برای یک chroot با نام wheezy (chroot:wheezy)، یک chroot متناظر source:wheezy ایجاد خواهد شد. برای سازگاری با نسخههای قدیمیتر schroot که از فضاهای نام پشتیبانی نمیکردند، یک chroot با پسوند -source افزودهشده به انتهای نام chroot نیز ایجاد خواهد شد (یعنی wheezy-source با استفاده از مثال بالا). توجه داشته باشید که این نامهای سازگاری در schroot 1.5.0 حذف خواهند شد، بنابراین استفاده از فضای نام source: نسبت به استفاده از فرم پسوند -source ارجحیت دارد. برای جزئیات بیشتر schroot(1) را ببینید.
این chrootها گزینههای اضافی زیر را فراهم میکنند:
- source-clone=true|false
- تنظیم اینکه آیا chroot مبدأ باید به صورت خودکار برای این chroot شبیهسازی (ایجاد) شود یا خیر. پیشفرض true برای شبیهسازی خودکار است، اما در صورت تمایل میتوان با تنظیم روی false آن را غیرفعال کرد. در صورت غیرفعال بودن، chroot مبدأ غیرقابل دسترس خواهد بود.
- source-users=user1,user2,...
- فهرستی جداشده با کاما از کاربرانی که مجاز به دسترسی به chroot مبدأ هستند. در صورت خالی بودن یا حذف، به هیچ کاربری اجازه دسترسی داده نخواهد شد. این به گزینه users در chroot مبدأ تبدیل خواهد شد.
- source-groups=group1,group2,...
- فهرستی جداشده با کاما از گروههایی که مجاز به دسترسی به chroot مبدأ هستند. در صورت خالی بودن یا حذف، به هیچ کاربری اجازه دسترسی داده نخواهد شد. این به گزینه groups در chroot مبدأ تبدیل خواهد شد.
- source-root-users=user1,user2,...
- فهرستی جداشده با کاما از کاربرانی که مجاز به دسترسی ریشه بدون گذرواژه به chroot مبدأ هستند. در صورت خالی بودن یا حذف، به هیچ کاربری بدون گذرواژه اجازه دسترسی ریشه داده نخواهد شد (اما اگر کاربری در users باشد، ممکن است با گذرواژه دسترسی پیدا کند). این به گزینه root-users در chroot مبدأ تبدیل خواهد شد. بخش “امنیت” را در زیر ببینید.
- source-root-groups=group1,group2,...
- فهرستی جداشده با کاما از گروههایی که مجاز به دسترسی ریشه بدون گذرواژه به chroot مبدأ هستند. در صورت خالی بودن یا حذف، به هیچ کاربری بدون گذرواژه اجازه دسترسی ریشه داده نخواهد شد (اما اگر گروه یک کاربر در groups باشد، ممکن است با گذرواژه دسترسی پیدا کند). این به گزینه root-groups در chroot مبدأ تبدیل خواهد شد. بخش “امنیت” را در زیر ببینید.
گزینههای chroot قابل سوار کردن (Mountable chroot options)
انواع chroot شامل ‘block-device’، ‘loopback’ و ‘lvm-snapshot’ اتصال دستگاه را پیادهسازی میکنند. اینها chrootهایی هستند که برای دسترسی به chroot نیاز به سوار کردن یک دستگاه دارند. این chrootها گزینههای اضافی زیر را ارائه میدهند:
- mount-options=options
- گزینههای سوار کردن برای دستگاه بلوکی. اینها گزینههای اضافی برای ارسال به mount(8) هستند. برای نمونه، “-o atime,sync,user_xattr”.
- location=path
- این مسیر به chroot در داخل سیستم فایل روی دستگاه است. برای نمونه، اگر سیستم فایل شامل یک chroot در /chroot/sid باشد، شما در اینجا “/chroot/sid” را مشخص میکنید. اگر chroot تنها محتوای روی سیستم فایل است، یعنی / سیستم فایل ریشه برای chroot است، این گزینه باید خالی رها شده یا کلاً حذف شود.
گزینههای chroot پیوند فایلسیستم (Filesystem Union chroot options)
انواع chroot شامل ‘block-device’، ‘directory’ و ‘loopback’ امکان ایجاد یک نشست با استفاده از پیوند فایلسیستم (filesystem unions) را فراهم میکنند تا یک دایرکتوری قابل نوشتن جداگانه روی سیستم فایل اصلی همپوشانی (overlay) شود. سیستم فایل اصلی فقطخواندنی است و هرگونه تغییر در سیستم فایل در دایرکتوری قابل نوشتن بالایی ایجاد میشود و سیستم فایل اصلی بدون تغییر باقی میماند. یک پیوند به چندین نشست اجازه میدهد تا همزمان به یک chroot واحد دسترسی داشته و در آن تغییر ایجاد کنند، در حالی که تغییرات برای هر نشست به صورت خصوصی حفظ میشود. برای فعالسازی این ویژگی، مقدار union-type را روی هر مقدار پشتیبانیشده تنظیم کنید. در صورت فعال بودن، chroot یک chroot مبدأ نیز خواهد بود که گزینههای بیشتری را فراهم میکند (بخش “گزینههای chroot مبدأ” را در بالا ببینید). تمامی مدخلها اختیاری هستند.
- union-type=type
- تنظیم نوع سیستم فایل پیوندی. سیستمهای فایل پشتیبانیشده در حال حاضر عبارتند از: ‘aufs’، ‘overlayfs’، ‘overlay’ (از لینوکس 4.0 به بعد) و ‘unionfs’. مقدار پیشفرض ‘none’ است که این ویژگی را غیرفعال میکند.
- union-mount-options=options
- گزینههای سوار کردن سیستم فایل پیوندی (پیکربندی شاخه)، که برای سوار کردن سیستم فایل پیوندی مشخصشده با union-type استفاده میشود. این مقدار جایگزین کل رشته “-o” برای mount میشود و امکان ایجاد پیوندهای پیچیده سیستم فایل را فراهم میکند. توجه داشته باشید که هر کدام از ‘aufs’، ‘overlayfs’ و ‘unionfs’ گزینههای سوار کردن پشتیبانیشده متفاوتی دارند. نکته: میتوان از متغیرهای “${CHROOT_UNION_OVERLAY_DIRECTORY}” و “${CHROOT_UNION_UNDERLAY_DIRECTORY}” برای اشاره به دایرکتوری نشست قابل نوشتن overlay و دایرکتوری فقطخواندنی underlay که قرار است پیوند را تشکیل دهند استفاده کرد. برای فهرست کامل متغیرها schroot-setup(5) را ببینید.
- union-overlay-directory=directory
- دایرکتوری محل ایجاد دایرکتوریهای نشست همپوشانی (overlay) قابل نوشتن را مشخص میکند. مقدار پیشفرض ‘/var/lib/schroot/union/overlay’ است.
- union-underlay-directory=directory
- دایرکتوری محل ایجاد دایرکتوریهای زیرین (underlay) فقطخواندنی را مشخص میکند. مقدار پیشفرض ‘/var/lib/schroot/union/underlay’ است.
سفارشیسازی (Customisation)
علاوه بر کلیدهای پیکربندی فهرستشده در بالا، افزودن کلیدهای سفارشی نیز امکانپذیر است. این کلیدها برای افزودن متغیرهای محیطی اضافی به محیط اسکریپت برپاسازی هنگام اجرای اسکریپتهای برپاسازی استفاده خواهند شد. تنها محدودیت این است که نام کلید تنها از نویسههای الفبایی-عددی و خط پیوند تشکیل شده باشد، با یک حرف الفبا آغاز شود و شامل دستکم یک نقطه باشد. یعنی با عبارت باقاعده گسترده زیر تطابق داشته باشد: “^([a-z][a-z0-9]*\.)+[a-z][a-z0-9-]*$”.
برای نمونه:
debian.apt-update=true debian.distribution=unstable
محیط زیر را تنظیم میکند:
DEBIAN_APT_UPDATE=true DEBIAN_DISTRIBUTION=unstable
توجه داشته باشید که استفاده از نامهای کلید متفاوتی که با ترکیب نقطه و خط پیوند همان متغیر محیطی را تنظیم کنند خطا محسوب میشود.
کلیدهای پیکربندی سفارشی را میتوان در زمان اجرا با استفاده از گزینه --option نیز تغییر داد. با این حال، به دلایل امنیتی تنها کلیدهای برگزیده قابل تغییر هستند. این کلیدها با گزینههای زیر مشخص میشوند:
- user-modifiable-keys=key1,key2,..
- تنظیم کلیدهایی که کاربران عادی میتوانند با استفاده از --option تغییر دهند.
- root-modifiable-keys=key1,key2,..
- تنظیم کلیدهایی که کاربر ریشه (root) میتواند با استفاده از --option تغییر دهد. توجه داشته باشید که کاربر ریشه علاوه بر کلیدهای مشخصشده در اینجا، میتواند از کلیدهای مشخصشده در user-modifiable-keys نیز استفاده کند.
محلیسازی (Localisation)
برخی کلیدها را میتوان به چندین زبان محلیسازی کرد. این کار با افزودن نام محلی (locale) درون قلاب بعد از نام کلید انجام میشود. برای نمونه:
description[en_GB]=British English translation
این کار کلید description را برای محلی en_GB محلیسازی میکند.
description[fr]=French translation
این کار کلید description را برای تمامی محلیهای فرانسوی محلیسازی میکند.
نامهای CHROOT (CHROOT NAMES)
تعدادی نویسه یا کلمه در نام chroot، نام نشست یا نام پرونده پیکربندی مجاز نیستند. نام باید با یک حرف کوچک یا بزرگ الفبا یا یک رقم آغاز شود. سایر نویسهها میتوانند خط پیوند (‘-’)، نقطه (‘.’) یا زیرخط (‘_’) باشند.
دلیل این محدودیتها به شرح زیر است:
- عمومی (Generic)
- متأسفانه تمام بخشهایی که با نامهای chroot سر و کار دارند نمیتوانند نویسههای غیرقابل چاپ و سایر نویسهها را به درستی پردازش کنند و بهروزرسانی همه آنها دشوار است. این امر بیشتر به اسکریپتهای شل مختلف مربوط میشود که در آنها نیز عاقلانه نیست فرض شود نویسندگان همیشه کدهای ایمن مینویسند.
- ‘dpkg-old’
- ‘dpkg-dist’
- ‘dpkg-new’
- ‘dpkg-tmp’
- این نامها نباید در انتهای یک نام ظاهر شوند. اینها رونوشتهای ذخیرهشده از پروندههای پیکربندی هستند که توسط مدیر بسته dpkg استفاده میشوند و نادیده گرفته خواهند شد.
امنیت (SECURITY)
کاربران غیرقابل اعتماد (Untrusted users)
توجه داشته باشید که دادن دسترسی ریشه به chrootها به کاربران غیرقابل اعتماد یک خطر امنیتی جدی است! اگرچه کاربر غیرقابل اعتماد تنها به پروندههای داخل chroot دسترسی ریشه خواهد داشت، در عمل روشهای آشکار فراوانی برای خروج از محیط chroot و مختل کردن سرویسها در سیستم میزبان وجود دارد. مانند همیشه، این موضوع به اعتماد برمیگردد.
دسترسی ریشه chroot را به کاربرانی که برای دسترسی ریشه به سیستم میزبان به آنها اعتماد ندارید، واگذار نکنید.
نمایهها (Profiles)
بسته به اینکه کدام نمایه را با گزینه script-config پیکربندی کردهاید، سیستمهای فایل متفاوتی در داخل chroot سوار میشوند و پروندههای متفاوتی از سیستم میزبان به درون chroot کپی خواهند شد. برخی نمایهها /dev میزبان را سوار میکنند، در حالی که برخی دیگر این کار را انجام نمیدهند. برخی نمایهها همچنین بخشهای دیگری از سیستم فایل میزبان را bind mount میکنند تا امکان استفاده از ویژگیهای خاصی مانند دایرکتوریهای خانگی کاربران و بخشهای خاصی از /var فراهم شود. پرونده fstab نمایه را بررسی کنید تا مطمئن شوید چه مواردی سوار خواهند شد و سایر پروندههای نمایه را بررسی کنید تا ببینید کدام پروندهها و پایگاههای داده سیستمی به داخل chroot کپی خواهند شد. نمایه متفاوتی را انتخاب کنید یا پروندهها را ویرایش نمایید تا آنچه در داخل chroot در دسترس قرار میگیرد بیشتر محدود شود.
همواره یک مبادله میان امنیت (نگهداشتن chroot در کمینهترین حالت ممکن) و کارایی/قابلیت استفاده (که گاهی نیازمند دسترسی به بخشهایی از سیستم فایل میزبان است) وجود دارد. نمایههای مختلف مبادلات متفاوتی را در نظر میگیرند و مهم است که ارزیابی کنید کدام نمایه با تعادل مورد نیاز شما میان امنیت و کارایی مطابقت دارد.
مثال (EXAMPLE)
# Sample configuration [sid] type=plain description=Debian unstable description[fr_FR]=Debian instable directory=/srv/chroot/sid priority=3 users=jim groups=sbuild root-users=rleigh aliases=unstable,default [etch] type=block-device description=Debian testing (32-bit) priority=2 groups=users #groups=sbuild-security aliases=testing device=/dev/hda_vg/etch_chroot mount-options=-o atime personality=linux32 [sid-file] type=file description=Debian sid file-based chroot priority=3 groups=sbuild file=/srv/chroots/sid.tar.gz [sid-snapshot] type=lvm-snapshot description=Debian unstable LVM snapshot priority=3 groups=sbuild users=rleigh source-root-users=rleigh source-root-groups=admin device=/dev/hda_vg/sid_chroot mount-options=-o atime,sync,user_xattr lvm-snapshot-options=--size 2G
فایلها (FILES)
تعاریف chroot (Chroot definitions)
- /etc/schroot/schroot.conf
- پرونده پیکربندی تعاریف chroot در سطح کل سیستم. مالک این پرونده باید کاربر root باشد و نباید توسط دیگران قابل نوشتن باشد.
- /etc/schroot/chroot.d
- تعاریف اضافی chroot میتوانند در پروندههایی زیر این دایرکتوری قرار گیرند. با آنها دقیقاً به همان روش /etc/schroot/schroot.conf رفتار میشود. هر پرونده میتواند شامل یک یا چند تعریف chroot باشد.
پیکربندی اسکریپت برپاسازی (Setup script configuration)
دایرکتوری /etc/schroot/default شامل تنظیمات پیشفرضی است که توسط اسکریپتهای برپاسازی استفاده میشوند.
- config
- پرونده اصلی پیکربندی که توسط اسکریپتهای برپاسازی خوانده میشود. قالب این پرونده در schroot-script-config(5) توصیف شده است. این مقدار پیشفرض برای کلید script-config است. توجه داشته باشید که این پرونده پیشتر /etc/schroot/script-defaults نامیده میشد. پروندههای زیر به طور پیشفرض مورد ارجاع قرار میگیرند:
- copyfiles
- فهرستی از پروندهها برای کپی به داخل chroot از سیستم میزبان. توجه داشته باشید که این پرونده پیشتر /etc/schroot/copyfiles-defaults نامیده میشد.
- fstab
- پروندهای با قالب توصیفشده در fstab(5)، که برای سوار کردن سیستمهای فایل در داخل chroot استفاده میشود. مکان اتصال نسبت به ریشه chroot است. توجه داشته باشید که این پرونده پیشتر /etc/schroot/mount-defaults نامیده میشد.
- nssdatabases
- پایگاههای داده سیستمی (همانطور که در /etc/nsswitch.conf در سیستمهای گنو/لینوکس توصیف شده است) برای کپی به داخل chroot از سیستم میزبان. توجه داشته باشید که این پرونده پیشتر /etc/schroot/nssdatabases-defaults نامیده میشد.
نویسندگان (AUTHORS)
Roger Leigh.
حق نشر (COPYRIGHT)
Copyright © 2005-2012 Roger Leigh <rleigh@codelibre.net>
schroot is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
همچنین ببینید (SEE ALSO)
sbuild(1), schroot(1), schroot-script-config(5), schroot-faq(7), mount(8).
| 14 Aug 2022 | Version 1.6.13 |