mkosi-sandbox(1) General Commands Manual mkosi-sandbox(1)

mkosi-sandbox - اجرای دستورها در یک سندباکس سفارشی

mkosi-sandbox [options...] command [arguments]

دستور mkosi-sandbox دستور داده‌شده را در یک سندباکس (محیط ایزوله) سفارشی اجرا می‌کند. این سندباکس با تعیین گزینه‌های خط فرمان که بخش‌های مختلف آن را پیکربندی می‌کنند، تنظیم می‌شود.

اگر هیچ دستوری مشخص نشود، mkosi-sandbox پوستهٔ bash را درون سندباکس اجرا خواهد کرد.

توجه داشته باشید که این سندباکس به عنوان یک مرز امنیتی طراحی نشده است. هدف اصلی آن فراهم آوردن امکان اجرای دستورها در یک محیط ایزوله است تا تحت تأثیر سیستم میزبان قرار نگیرند.

می‌توان از mkosi-sandbox برای ایجاد یک سندباکس درون‌فرآیندی برای برنامه‌های پایتون استفاده کرد؛ این کار با وارد کردن (import) آن به عنوان یک ماژول و فراخوانی تابع enter آن تنها با گزینه‌ها انجام می‌شود. در این حالت نیازی به تعیین خط فرمان برای اجرا نیست. به عنوان مثال:

import mkosi.sandbox
mkosi.sandbox.enter(["--become-root"])
print(os.getuid())

تنها فراخوانی تابع enter مجاز است. فراخوانی هر تابع دیگری از mkosi.sandbox پشتیبانی نمی‌شود و ممکن است در نسخه‌های آینده با خطا مواجه شود.

یک سیستم‌فایل tmpfs جدید را در مسیر DST درون سندباکس سوار (mount) می‌کند.
یک دایرکتوری /dev اختصاصی در مسیر DST در سندباکس برپا می‌کند. این /dev اختصاصی فقط شامل گره‌های دستگاه پایه‌ای مورد نیاز برای عملکرد سندباکس (مانند /dev/null) خواهد بود و دستگاه‌های واقعی را شامل نمی‌شود.
یک دایرکتوری و تمام دایرکتوری‌های والد ناموجود را در مسیر DST در سندباکس ایجاد می‌کند. تمام دایرکتوری‌ها با دسترسی 755 ایجاد می‌شوند، مگر اینکه مسیر به /tmp یا /var/tmp ختم شود که در این صورت با دسترسی 1777 ایجاد خواهد شد.
مسیر مبدأ SRC به‌طور بازگشتی در مسیر DST درون سندباکس متصل (bind mount) می‌شود. اگر نقطه اتصال در سندباکس وجود نداشته باشد، ایجاد می‌شود. هر دایرکتوری والد ناموجود نیز در سندباکس ایجاد خواهد شد. مسیر مبدأ به صورت اختیاری می‌تواند با یک نویسهٔ + پیشوندگذاری شود. در این صورت، مسیر مبدأ به جای دایرکتوری ریشهٔ میزبان، نسبت به دایرکتوری ریشهٔ سندباکس تفسیر خواهد شد.
مانند --bind است، اما در صورتی که مسیر مبدأ وجود نداشته باشد با شکست مواجه نمی‌شود.
مانند --bind است، اما عمل bind mount را به صورت بازگشتی و فقط‌خواندنی انجام می‌دهد.
مانند --bind-try است، اما عمل bind mount را به صورت بازگشتی و فقط‌خواندنی انجام می‌دهد.
مانند --bind است، اما mkosi-sandbox یک فضای‌نام کاربری (user namespace) تخصیص داده و با استفاده از systemd-nsresourced یک محدودهٔ UID گذرا برای آن فراهم می‌کند؛ سپس برای هر اتصال --bind-foreign با استفاده از systemd-mountfsd، محدودهٔ UID بیگانه را به این محدودهٔ UID گذرا نگاشت شناسه (idmap) می‌کند. در نهایت، mkosi-sandbox درست پیش از اجرای دستور پیکربندی در سندباکس به فضای‌نام کاربری می‌پیوندد.
استفاده از این گزینه نیازمند systemd-nsresourced و systemd-mountfsd نسخهٔ v260 یا جدیدتر است.
مانند --bind-foreign است، اما سوار کردن را به صورت فقط‌خواندنی انجام می‌دهد.
مانند --bind است، اما پیوندهای نمادین (symlinks) را برای SRC دنبال نمی‌کند. اگر SRC خود یک پیوند نمادین باشد، خود پیوند بدون تغییر متصل می‌شود نه هدف آن.
مانند --bind-nofollow است، اما سوار کردن را به صورت فقط‌خواندنی انجام می‌دهد.
یک پیوند نمادین در مسیر DST درون سندباکس ایجاد می‌کند که به SRC اشاره دارد. اگر DST از قبل وجود داشته باشد و یک فایل یا پیوند نمادین باشد، یک پیوند نمادین موقت ایجاد شده و روی DST سوار می‌شود.
رشتهٔ داده‌شده در DATA را در مسیر DST در سندباکس می‌نویسد.
دایرکتوری DIR از سیستم میزبان را به عنوان یک دایرکتوری پایینی (lower directory) جدید برای سوار کردن بعدی overlayfs اضافه می‌کند.
دایرکتوری بالایی (upper directory) را برای سوار کردن بعدی overlayfs روی DIR از سیستم میزبان تنظیم می‌کند. اگر روی tmpfs تنظیم شود، دایرکتوری بالایی و دایرکتوری کاری (workdir) زیردایرکتوری‌هایی از یک سوار کردن تازهٔ tmpfs خواهند بود.
دایرکتوری کاری را برای سوار کردن بعدی overlayfs به DIR از سیستم میزبان تنظیم می‌کند.
یک سیستم‌فایل overlay جدید را در مسیر DST در سندباکس سوار می‌کند. دایرکتوری‌های پایینی، دایرکتوری بالایی و دایرکتوری کاری به ترتیب با استفاده از گزینه‌های --overlay-lowerdir، --overlay-upperdir و --overlay-workdir تعیین می‌شوند. پس از تجزیه و پردازش هر گزینهٔ --overlay، سایر گزینه‌های overlay بازنشانی می‌شوند.
متغیر محیطی NAME را در سندباکس لغو (unset) می‌کند.
متغیر محیطی NAME را به مقدار VALUE در سندباکس تنظیم می‌کند.
دایرکتوری کاری را در سندباکس به DIR تغییر می‌دهد.
دایرکتوری کاری در سندباکس را به همان دایرکتوری کاری فعلی که mkosi-sandbox در آن روی میزبان اجرا شده است، تغییر می‌دهد.
کاربر فعلی را به کاربر ریشه (root) در سندباکس نگاشت می‌کند. اگر این گزینه مشخص نشود، کاربر فعلی به خودش در سندباکس نگاشت خواهد شد. صرف‌نظر از اینکه این گزینه مشخص شده باشد یا نه، کاربر فعلی دارای مجموعهٔ کاملی از قابلیت‌های محیطی (ambient capabilities) در سندباکس خواهد بود. این قابلیت‌ها شامل CAP_SYS_ADMIN می‌شود، بدین معنا که فرآیند فراخوانی‌شده در سندباکس قادر به انجام bind mount و عملیات‌های دیگر خواهد بود.
اگر mkosi-sandbox توسط کاربر ریشه اجرا شود، این گزینه اثری نخواهد داشت.
محدودهٔ UID بیگانه (foreign) را در سندباکس نگاشت می‌کند. برای اطلاعات بیشتر در مورد محدودهٔ UID بیگانه، ببینید: Users, Groups, UIDs and GIDs on systemd Systems.
هنگام اجرای mkosi-sandbox بدون دسترسی ویژه (unprivileged)، این گزینه نیازمند systemd-nsresourced نسخهٔ v260 یا جدیدتر است.
تعداد N محدودهٔ اضافی ۶۴ هزارتایی UID/GID را در سندباکس نگاشت می‌کند.
این گزینه برای اجرای systemd-nspawn یا هر برنامه‌ای که تلاش می‌کند از طریق systemd-nsresourced از داخل محیط mkosi-sandbox یک محدودهٔ UID گذرا تخصیص دهد، لازم است. این گزینه نیازمند systemd-nsresourced نسخهٔ v260 یا جدیدتر است.
مشخص کردن این گزینه باعث می‌شود تمام فراخوانی‌های chown() یا فراخوانی‌های سیستمی مشابه در سندباکس به صورت بی‌اثر (noop) درآیند. این ویژگی در درجهٔ اول هنگام اجرای مدیر بسته‌ها در سندباکس کاربرد دارد، زیرا ممکن است تلاش کنند با chown() مالکیت فایل‌ها را به کاربران یا گروه‌های مختلف تغییر دهند؛ کاری که در صورت اجرا نشدن mkosi-sandbox توسط کاربر مدیر سیستم، با شکست مواجه خواهد شد.
مشخص کردن این گزینه باعث می‌شود تمام فراخوانی‌های sync() یا فراخوانی‌های سیستمی مشابه در سندباکس به صورت بی‌اثر (noop) درآیند. این ویژگی در درجهٔ اول هنگام فراخوانی مدیر بسته‌ها در سندباکس کاربرد دارد، زیرا ممکن است هنگام استخراج بسته‌ها فایل‌ها را sync() کنند که این کار هنگام ساخت ایمیج غیرضروری است و سرعت اجرا را به میزان چشمگیری کاهش می‌دهد.
مشخص کردن این گزینه باعث می‌شود mkosi-sandbox در صورت امکان، یک فضای‌نام شبکه (network namespace) را تفکیک (unshare) کند.
مشخص کردن این گزینه باعث می‌شود mkosi-sandbox در صورت امکان، یک فضای‌نام IPC را تفکیک (unshare) کند.
توصیف‌کننده‌های فایل به ارث‌رسیده را از شمارهٔ ۳ به بعد کنار هم فشرده کرده و $LISTEN_FDS را برابر با تعداد توصیف‌کننده‌های فایل فشرده‌شده و $LISTEN_PID را برابر با pid فرآیند جاری قرار می‌دهد.
پیام‌های مختلفی را در شرح نحوهٔ برپایی سندباکس ثبت می‌کند.
نمایش نسخهٔ بسته.
نمایش اطلاعات مختصر در مورد نحوهٔ استفاده.

اجرای 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

mkosi(1)