| mkosi-sandbox(1) | General Commands Manual | mkosi-sandbox(1) |
نام (NAME)
mkosi-sandbox - اجرای دستورها در یک سندباکس سفارشی
خلاصه دستور (SYNOPSIS)
mkosi-sandbox [options...] command [arguments]
توضیحات (DESCRIPTION)
دستور mkosi-sandbox دستور دادهشده را در یک سندباکس (محیط ایزوله) سفارشی اجرا میکند. این سندباکس با تعیین گزینههای خط فرمان که بخشهای مختلف آن را پیکربندی میکنند، تنظیم میشود.
اگر هیچ دستوری مشخص نشود، mkosi-sandbox پوستهٔ bash را درون سندباکس اجرا خواهد کرد.
توجه داشته باشید که این سندباکس به عنوان یک مرز امنیتی طراحی نشده است. هدف اصلی آن فراهم آوردن امکان اجرای دستورها در یک محیط ایزوله است تا تحت تأثیر سیستم میزبان قرار نگیرند.
میتوان از mkosi-sandbox برای ایجاد یک سندباکس درونفرآیندی برای برنامههای پایتون استفاده کرد؛ این کار با وارد کردن (import) آن به عنوان یک ماژول و فراخوانی تابع enter آن تنها با گزینهها انجام میشود. در این حالت نیازی به تعیین خط فرمان برای اجرا نیست. به عنوان مثال:
-
import mkosi.sandbox mkosi.sandbox.enter(["--become-root"]) print(os.getuid())
تنها فراخوانی تابع enter مجاز است. فراخوانی هر تابع دیگری از mkosi.sandbox پشتیبانی نمیشود و ممکن است در نسخههای آینده با خطا مواجه شود.
گزینهها (OPTIONS)
- --tmpfs DST
- یک سیستمفایل tmpfs جدید را در مسیر DST درون سندباکس سوار (mount) میکند.
- --dev DST
- یک دایرکتوری /dev اختصاصی در مسیر DST در سندباکس برپا میکند. این /dev اختصاصی فقط شامل گرههای دستگاه پایهای مورد نیاز برای عملکرد سندباکس (مانند /dev/null) خواهد بود و دستگاههای واقعی را شامل نمیشود.
- --dir DST
- یک دایرکتوری و تمام دایرکتوریهای والد ناموجود را در مسیر DST در سندباکس ایجاد میکند. تمام دایرکتوریها با دسترسی 755 ایجاد میشوند، مگر اینکه مسیر به /tmp یا /var/tmp ختم شود که در این صورت با دسترسی 1777 ایجاد خواهد شد.
- --bind SRC DST
- مسیر مبدأ SRC بهطور بازگشتی در مسیر DST درون سندباکس متصل (bind mount) میشود. اگر نقطه اتصال در سندباکس وجود نداشته باشد، ایجاد میشود. هر دایرکتوری والد ناموجود نیز در سندباکس ایجاد خواهد شد. مسیر مبدأ به صورت اختیاری میتواند با یک نویسهٔ + پیشوندگذاری شود. در این صورت، مسیر مبدأ به جای دایرکتوری ریشهٔ میزبان، نسبت به دایرکتوری ریشهٔ سندباکس تفسیر خواهد شد.
- --bind-try SRC DST
- مانند --bind است، اما در صورتی که مسیر مبدأ وجود نداشته باشد با شکست مواجه نمیشود.
- --ro-bind SRC DST
- مانند --bind است، اما عمل bind mount را به صورت بازگشتی و فقطخواندنی انجام میدهد.
- --ro-bind-try SRC DST
- مانند --bind-try است، اما عمل bind mount را به صورت بازگشتی و فقطخواندنی انجام میدهد.
- --bind-foreign SRC DST
- مانند --bind است، اما mkosi-sandbox یک فضاینام کاربری (user namespace) تخصیص داده و با استفاده از systemd-nsresourced یک محدودهٔ UID گذرا برای آن فراهم میکند؛ سپس برای هر اتصال --bind-foreign با استفاده از systemd-mountfsd، محدودهٔ UID بیگانه را به این محدودهٔ UID گذرا نگاشت شناسه (idmap) میکند. در نهایت، mkosi-sandbox درست پیش از اجرای دستور پیکربندی در سندباکس به فضاینام کاربری میپیوندد.
- --ro-bind-foreign SRC DST
- مانند --bind-foreign است، اما سوار کردن را به صورت فقطخواندنی انجام میدهد.
- --bind-nofollow SRC DST
- مانند --bind است، اما پیوندهای نمادین (symlinks) را برای SRC دنبال نمیکند. اگر SRC خود یک پیوند نمادین باشد، خود پیوند بدون تغییر متصل میشود نه هدف آن.
- --ro-bind-nofollow SRC DST
- مانند --bind-nofollow است، اما سوار کردن را به صورت فقطخواندنی انجام میدهد.
- --symlink SRC DST
- یک پیوند نمادین در مسیر DST درون سندباکس ایجاد میکند که به SRC اشاره دارد. اگر DST از قبل وجود داشته باشد و یک فایل یا پیوند نمادین باشد، یک پیوند نمادین موقت ایجاد شده و روی DST سوار میشود.
- --write DATA DST
- رشتهٔ دادهشده در DATA را در مسیر DST در سندباکس مینویسد.
- --overlay-lowerdir DIR
- دایرکتوری DIR از سیستم میزبان را به عنوان یک دایرکتوری پایینی (lower directory) جدید برای سوار کردن بعدی overlayfs اضافه میکند.
- --overlay-upperdir DIR
- دایرکتوری بالایی (upper directory) را برای سوار کردن بعدی overlayfs روی DIR از سیستم میزبان تنظیم میکند. اگر روی tmpfs تنظیم شود، دایرکتوری بالایی و دایرکتوری کاری (workdir) زیردایرکتوریهایی از یک سوار کردن تازهٔ tmpfs خواهند بود.
- --overlay-workdir DIR
- دایرکتوری کاری را برای سوار کردن بعدی overlayfs به DIR از سیستم میزبان تنظیم میکند.
- --overlay DST
- یک سیستمفایل overlay جدید را در مسیر DST در سندباکس سوار میکند. دایرکتوریهای پایینی، دایرکتوری بالایی و دایرکتوری کاری به ترتیب با استفاده از گزینههای --overlay-lowerdir، --overlay-upperdir و --overlay-workdir تعیین میشوند. پس از تجزیه و پردازش هر گزینهٔ --overlay، سایر گزینههای overlay بازنشانی میشوند.
- --unsetenv NAME
- متغیر محیطی NAME را در سندباکس لغو (unset) میکند.
- --setenv NAME VALUE
- متغیر محیطی NAME را به مقدار VALUE در سندباکس تنظیم میکند.
- --chdir DIR
- دایرکتوری کاری را در سندباکس به DIR تغییر میدهد.
- --same-dir
- دایرکتوری کاری در سندباکس را به همان دایرکتوری کاری فعلی که mkosi-sandbox در آن روی میزبان اجرا شده است، تغییر میدهد.
- --become-root
- کاربر فعلی را به کاربر ریشه (root) در سندباکس نگاشت میکند. اگر این گزینه مشخص نشود، کاربر فعلی به خودش در سندباکس نگاشت خواهد شد. صرفنظر از اینکه این گزینه مشخص شده باشد یا نه، کاربر فعلی دارای مجموعهٔ کاملی از قابلیتهای محیطی (ambient capabilities) در سندباکس خواهد بود. این قابلیتها شامل CAP_SYS_ADMIN میشود، بدین معنا که فرآیند فراخوانیشده در سندباکس قادر به انجام bind mount و عملیاتهای دیگر خواهد بود.
- --map-foreign
- محدودهٔ UID بیگانه (foreign) را در سندباکس نگاشت میکند. برای اطلاعات بیشتر در مورد محدودهٔ UID بیگانه، ببینید: Users, Groups, UIDs and GIDs on systemd Systems.
- --map-delegate N
- تعداد N محدودهٔ اضافی ۶۴ هزارتایی UID/GID را در سندباکس نگاشت میکند.
- --suppress-chown
- مشخص کردن این گزینه باعث میشود تمام فراخوانیهای chown() یا فراخوانیهای سیستمی مشابه در سندباکس به صورت بیاثر (noop) درآیند. این ویژگی در درجهٔ اول هنگام اجرای مدیر بستهها در سندباکس کاربرد دارد، زیرا ممکن است تلاش کنند با chown() مالکیت فایلها را به کاربران یا گروههای مختلف تغییر دهند؛ کاری که در صورت اجرا نشدن mkosi-sandbox توسط کاربر مدیر سیستم، با شکست مواجه خواهد شد.
- --suppress-sync
- مشخص کردن این گزینه باعث میشود تمام فراخوانیهای sync() یا فراخوانیهای سیستمی مشابه در سندباکس به صورت بیاثر (noop) درآیند. این ویژگی در درجهٔ اول هنگام فراخوانی مدیر بستهها در سندباکس کاربرد دارد، زیرا ممکن است هنگام استخراج بستهها فایلها را sync() کنند که این کار هنگام ساخت ایمیج غیرضروری است و سرعت اجرا را به میزان چشمگیری کاهش میدهد.
- مشخص کردن این گزینه باعث میشود mkosi-sandbox در صورت امکان، یک فضاینام شبکه (network namespace) را تفکیک (unshare) کند.
- مشخص کردن این گزینه باعث میشود mkosi-sandbox در صورت امکان، یک فضاینام IPC را تفکیک (unshare) کند.
- --pack-fds
- توصیفکنندههای فایل به ارثرسیده را از شمارهٔ ۳ به بعد کنار هم فشرده کرده و $LISTEN_FDS را برابر با تعداد توصیفکنندههای فایل فشردهشده و $LISTEN_PID را برابر با pid فرآیند جاری قرار میدهد.
- --debug
- پیامهای مختلفی را در شرح نحوهٔ برپایی سندباکس ثبت میکند.
- --version
- نمایش نسخهٔ بسته.
- --help, -h
- نمایش اطلاعات مختصر در مورد نحوهٔ استفاده.
مثالها (EXAMPLES)
اجرای bash در دایرکتوری کاری فعلی در فضاینام شبکهٔ اختصاصی خود به عنوان کاربر فعلی:
-
mkosi-sandbox --bind / / --same-dir --unshare-net
اجرای id به عنوان کاربر ریشه در سندباکسی که تنها شامل /usr از سیستم میزبان به همراه پیوندهای نمادین لازم برای توانایی اجرای دستورها است:
-
mkosi-sandbox \ --ro-bind /usr /usr \ --symlink usr/bin /bin \ --symlink usr/lib /lib \ --symlink usr/lib64 /lib64 \ --symlink usr/sbin /sbin \ --dev /dev \ --bind /proc /proc \ --tmpfs /tmp \ --become-root \ id