SCHROOT.CONF(5) Debian sbuild SCHROOT.CONF(5)

schroot.conf - پرونده تعریف chroot برای schroot

schroot.conf یک پرونده متنی ساده با کدگذاری UTF-8 است که chrootهای موجود برای استفاده با schroot را توصیف می‌کند.

توضیحات (کامنت‌ها) با یک نویسه ‘#’ (“هش”) در ابتدای خط یا به دنبال هر متن دیگری آغاز می‌شوند. تمام متن‌های سمت راست ‘#’ به عنوان توضیح در نظر گرفته می‌شوند.

قالب پیکربندی به سبک پرونده‌های INI است که به گروه‌هایی از جفت‌های کلید-مقدار تقسیم شده و با نام بخش‌ها در داخل قلاب (براکت) از یکدیگر جدا می‌شوند.

یک 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’ دایرکتوری‌های قابل دسترسی در سیستم فایل هستند. این دو نوع به جز این واقعیت که 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’ پرونده‌هایی در سیستم فایل فعلی هستند که شامل یک بایگانی از پرونده‌های 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’ یک سیستم فایل هستند که به صورت یک پرونده روی دیسک قرار دارند و از طریق اتصال لوپ‌بک دسترسی‌پذیر هستند. پرونده بر حسب تقاضا به صورت لوپ‌بک سوار و پیاده خواهد شد. chrootهای لوپ‌بک گزینه‌های chroot قابل سوار کردن (mountable chroot) و chroot پیوند فایل‌سیستم (filesystem union chroot) را پیاده‌سازی می‌کنند (بخش‌های “گزینه‌های chroot قابل سوار کردن” و “گزینه‌های chroot پیوند فایل‌سیستم” را در زیر ببینید)، به علاوه یک گزینه اضافی:

file=filename
نام پرونده حاوی سیستم فایل به همراه مسیر مطلق آن. برای نمونه “/srv/chroot/sid”.

chrootهای از نوع ‘block-device’ یک سیستم فایل در دسترس روی یک دستگاه بلوکی سوارنشده هستند. دستگاه بر حسب تقاضا سوار و پیاده خواهد شد. chrootهای دستگاه بلوکی گزینه‌های chroot قابل سوار کردن (mountable chroot) و chroot پیوند فایل‌سیستم (filesystem union chroot) را پیاده‌سازی می‌کنند (بخش‌های “گزینه‌های chroot قابل سوار کردن” و “گزینه‌های chroot پیوند فایل‌سیستم” را در زیر ببینید)، به علاوه یک گزینه اضافی:

device=device
نام دستگاه بلوکی به همراه مسیر مطلق آن. برای نمونه “/dev/sda5”.

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-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-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’ نوع خاصی از 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 شامل ‘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 شامل ‘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 شامل ‘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’ است.

علاوه بر کلیدهای پیکربندی فهرست‌شده در بالا، افزودن کلیدهای سفارشی نیز امکان‌پذیر است. این کلیدها برای افزودن متغیرهای محیطی اضافی به محیط اسکریپت برپاسازی هنگام اجرای اسکریپت‌های برپاسازی استفاده خواهند شد. تنها محدودیت این است که نام کلید تنها از نویسه‌های الفبایی-عددی و خط پیوند تشکیل شده باشد، با یک حرف الفبا آغاز شود و شامل دست‌کم یک نقطه باشد. یعنی با عبارت باقاعده گسترده زیر تطابق داشته باشد: “^([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 نیز استفاده کند.

برخی کلیدها را می‌توان به چندین زبان محلی‌سازی کرد. این کار با افزودن نام محلی (locale) درون قلاب بعد از نام کلید انجام می‌شود. برای نمونه:

description[en_GB]=British English translation

این کار کلید description را برای محلی en_GB محلی‌سازی می‌کند.

description[fr]=French translation

این کار کلید description را برای تمامی محلی‌های فرانسوی محلی‌سازی می‌کند.

تعدادی نویسه یا کلمه در نام chroot، نام نشست یا نام پرونده پیکربندی مجاز نیستند. نام باید با یک حرف کوچک یا بزرگ الفبا یا یک رقم آغاز شود. سایر نویسه‌ها می‌توانند خط پیوند (‘-’)، نقطه (‘.’) یا زیرخط (‘_’) باشند.

دلیل این محدودیت‌ها به شرح زیر است:

عمومی (Generic)
متأسفانه تمام بخش‌هایی که با نام‌های chroot سر و کار دارند نمی‌توانند نویسه‌های غیرقابل چاپ و سایر نویسه‌ها را به درستی پردازش کنند و به‌روزرسانی همه آن‌ها دشوار است. این امر بیشتر به اسکریپت‌های شل مختلف مربوط می‌شود که در آن‌ها نیز عاقلانه نیست فرض شود نویسندگان همیشه کدهای ایمن می‌نویسند.
‘dpkg-old’
‘dpkg-dist’
‘dpkg-new’
‘dpkg-tmp’
این نام‌ها نباید در انتهای یک نام ظاهر شوند. این‌ها رونوشت‌های ذخیره‌شده از پرونده‌های پیکربندی هستند که توسط مدیر بسته dpkg استفاده می‌شوند و نادیده گرفته خواهند شد.

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

دسترسی ریشه chroot را به کاربرانی که برای دسترسی ریشه به سیستم میزبان به آن‌ها اعتماد ندارید، واگذار نکنید.

بسته به اینکه کدام نمایه را با گزینه script-config پیکربندی کرده‌اید، سیستم‌های فایل متفاوتی در داخل chroot سوار می‌شوند و پرونده‌های متفاوتی از سیستم میزبان به درون chroot کپی خواهند شد. برخی نمایه‌ها /dev میزبان را سوار می‌کنند، در حالی که برخی دیگر این کار را انجام نمی‌دهند. برخی نمایه‌ها همچنین بخش‌های دیگری از سیستم فایل میزبان را bind mount می‌کنند تا امکان استفاده از ویژگی‌های خاصی مانند دایرکتوری‌های خانگی کاربران و بخش‌های خاصی از /var فراهم شود. پرونده fstab نمایه را بررسی کنید تا مطمئن شوید چه مواردی سوار خواهند شد و سایر پرونده‌های نمایه را بررسی کنید تا ببینید کدام پرونده‌ها و پایگاه‌های داده سیستمی به داخل chroot کپی خواهند شد. نمایه متفاوتی را انتخاب کنید یا پرونده‌ها را ویرایش نمایید تا آنچه در داخل chroot در دسترس قرار می‌گیرد بیشتر محدود شود.

همواره یک مبادله میان امنیت (نگه‌داشتن chroot در کمینه‌ترین حالت ممکن) و کارایی/قابلیت استفاده (که گاهی نیازمند دسترسی به بخش‌هایی از سیستم فایل میزبان است) وجود دارد. نمایه‌های مختلف مبادلات متفاوتی را در نظر می‌گیرند و مهم است که ارزیابی کنید کدام نمایه با تعادل مورد نیاز شما میان امنیت و کارایی مطابقت دارد.

# 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

/etc/schroot/schroot.conf
پرونده پیکربندی تعاریف chroot در سطح کل سیستم. مالک این پرونده باید کاربر root باشد و نباید توسط دیگران قابل نوشتن باشد.
/etc/schroot/chroot.d
تعاریف اضافی chroot می‌توانند در پرونده‌هایی زیر این دایرکتوری قرار گیرند. با آن‌ها دقیقاً به همان روش /etc/schroot/schroot.conf رفتار می‌شود. هر پرونده می‌تواند شامل یک یا چند تعریف chroot باشد.

دایرکتوری /etc/schroot/default شامل تنظیمات پیش‌فرضی است که توسط اسکریپت‌های برپاسازی استفاده می‌شوند.

پرونده اصلی پیکربندی که توسط اسکریپت‌های برپاسازی خوانده می‌شود. قالب این پرونده در schroot-script-config(5) توصیف شده است. این مقدار پیش‌فرض برای کلید script-config است. توجه داشته باشید که این پرونده پیش‌تر /etc/schroot/script-defaults نامیده می‌شد. پرونده‌های زیر به طور پیش‌فرض مورد ارجاع قرار می‌گیرند:
فهرستی از پرونده‌ها برای کپی به داخل chroot از سیستم میزبان. توجه داشته باشید که این پرونده پیش‌تر /etc/schroot/copyfiles-defaults نامیده می‌شد.
پرونده‌ای با قالب توصیف‌شده در fstab(5)، که برای سوار کردن سیستم‌های فایل در داخل chroot استفاده می‌شود. مکان اتصال نسبت به ریشه chroot است. توجه داشته باشید که این پرونده پیش‌تر /etc/schroot/mount-defaults نامیده می‌شد.
پایگاه‌های داده سیستمی (همان‌طور که در /etc/nsswitch.conf در سیستم‌های گنو/لینوکس توصیف شده است) برای کپی به داخل chroot از سیستم میزبان. توجه داشته باشید که این پرونده پیش‌تر /etc/schroot/nssdatabases-defaults نامیده می‌شد.

Roger Leigh.

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.

sbuild(1), schroot(1), schroot-script-config(5), schroot-faq(7), mount(8).

14 Aug 2022 Version 1.6.13