| FIREJAIL-PROFILE(5) | firejail profiles man page | FIREJAIL-PROFILE(5) |
نام (NAME)
firejail-profile - نحو فایل نمایه امنیتی و اطلاعات لازم برای ساخت نمایههای جدید برنامهها
خلاصه دستور (SYNOPSIS)
استفاده از یک نمایه خاص:
- firejail --profile=filename.profile
-
مثال:
$ firejail --appimage --profile=/etc/firejail/kdenlive.profile kdenlive.appimage - firejail --profile=profile_name
-
مثال:
$ firejail --appimage --profile=kdenlive kdenlive.appimage
ساخت دستی نمایه:
نامهای مستعار و تغییر مسیرها:
اجرای سازنده نمایه:
- firejail --build=appname.profile appname
-
مثال:
$ firejail --build=blobby.profile /usr/bin/blobbyبرنامه را در "firejail --build" اجرا کرده و تلاش کنید تا حد امکان قابلیتهای بیشتری از برنامه را به کار بگیرید. نمایه استخراج شده و در دایرکتوری جاری ذخیره میشود. آن را در یک ویرایشگر متنی باز کرده و گزینههای ایزولهسازی (Sandboxing) را بر حسب نیاز اضافه یا حذف کنید. پس از اصلاح نمایه، مجدداً آزمایش کنید. برای یکپارچهسازی برنامه در محیط میزکار خود، فایل نمایه را در دایرکتوری ~/.config/firejail کپی کرده و دستور "sudo firecfg" را اجرا کنید.
توضیحات (DESCRIPTION)
چندین گزینه خط فرمان را میتوان با استفاده از فایلهای نمایه به برنامه منتقل کرد. Firejail فایل نمایه را به ترتیب زیر انتخاب میکند:
1. اگر یک فایل نمایه توسط کاربر با گزینه --profile ارائه شده باشد، فایل نمایه بارگذاری میشود. در صورت ارائه نام نمایه، ابتدا در دایرکتوری ~/.config/firejail و در صورت پیدا نشدن، در دایرکتوری /etc/firejail جستجو میشود. نامهای نمایه شامل پسوند .profile نیستند. مثال:
Reading profile /home/netblue/icecat.profile
[...]
Reading profile /etc/firejail/icecat.profile
[...]
2. اگر یک فایل نمایه با نامی مشابه برنامه در دایرکتوری ~/.config/firejail یا در /etc/firejail موجود باشد، نمایه بارگذاری میشود. دایرکتوری ~/.config/firejail نسبت به /etc/firejail اولویت دارد. مثال:
Command name #icecat#
Found icecat profile in /home/netblue/.config/firejail directory
Reading profile /home/netblue/.config/firejail/icecat.profile
[...]
3. اگر جعبهشنی توسط کاربر معمولی شروع شده باشد از فایل default.profile، یا اگر جعبهشنی توسط root شروع شده باشد از فایل server.profile استفاده میشود. Firejail این فایلها را ابتدا در دایرکتوری ~/.config/firejail و سپس در دایرکتوری /etc/firejail جستجو میکند. برای غیرفعال کردن بارگذاری نمایه پیشفرض، از گزینه خط فرمان --noprofile استفاده کنید. مثال:
Reading profile /etc/firejail/default.profile
Parent pid 8553, child pid 8554
Child process initialized
[...]
$ firejail --noprofile
Parent pid 8553, child pid 8554
Child process initialized
[...]
قالبها (TEMPLATES)
در /usr/share/doc/firejail دو قالب برای نگارش نمایههای جدید وجود دارد.
redirect_alias-profile.template - برای نمایههای تغییر مسیر/نام مستعار
اسکریپتنویسی (SCRIPTING)
دستورهای اسکریپتنویسی:
- نامهای فایل و دایرکتوری
- نامهای
فایل و
دایرکتوری
حاوی فاصله
پشتیبانی
میشوند.
نویسه
فاصله ' '
نباید
اسکیپ شود.
مثال: "blacklist ~/My Virtual Machines"
- # این یک توضیح است
- مثال:
# disable networking
net none # this command creates an empty network namespace - ?CONDITIONAL: profile line
- افزودن
شرطی خط
نمایه.
مثال: "?HAS_APPIMAGE: whitelist ${HOME}/special/appimage/dir"
این مثال خط نمایه whitelist را تنها در صورتی بارگذاری میکند که گزینه --appimage در خط فرمان مشخص شده باشد.
در حال حاضر تنها شرطهای پشتیبانیشده به این شیوه عبارتند از HAS_APPIMAGE، HAS_NET، HAS_NODBUS، HAS_NOSOUND، HAS_PRIVATE و HAS_X11. شرطهای ALLOW_TRAY، BROWSER_DISABLE_U2F و BROWSER_ALLOW_DRM را میتوان به صورت سراسری در فایل پیکربندی Firejail فعال یا غیرفعال کرد.
خط نمایه میتواند هر خط نمایه استانداردی باشد که به طور معمول در یک نمایه استفاده میکنید، به جز خطوط "quiet" و "include".
نکته: هنگام استفاده از یک یا چند شرط به همراه --profile، توصیه میشود گزینه(های) مربوطه (مانند --appimage) قبل از --profile مشخص شوند تا شرطهای متناظر آنها (مانند ?HAS_APPIMAGE) در داخل نمایه به عنوان درست (True) ارزیابی شوند.
- include other.profile
- گنجاندن
فایل other.profile.
مثال: "include /etc/firejail/disable-common.inc"
نام فایل میتواند پیشوندی از ماکروها مانند ${HOME} یا ${CFG} داشته باشد. ${HOME} به دایرکتوری خانگی کاربر بسط مییابد و ${CFG} به دایرکتوری پیکربندی سیستمی Firejail بسط داده میشود - در بیشتر موارد /etc/firejail یا /usr/local/etc/firejail.
مثال: "include ${HOME}/myprofiles/profile1" فایل "~/myprofiles/profile1" را بارگذاری میکند.
مثال: "include ${CFG}/firefox.profile" فایل "/etc/firejail/firefox.profile" را بارگذاری خواهد کرد.
نام فایل همچنین میتواند صرفاً نام فایل بدون بخشهای ابتدایی مسیر دایرکتوری باشد. در این حالت، ابتدا دایرکتوری پیکربندی کاربر (${HOME}/.config/firejail) برای نام فایل جستجو میشود و در صورت پیدا نشدن، دایرکتوری پیکربندی سیستم جستجو خواهد شد. نکته: برخلاف گزینه --profile که نام نمایه را بدون پسوند '.profile' دریافت میکند، include باید نام کامل فایل را دریافت نماید.
مثال: "include firefox.profile" فایل "${HOME}/.config/firejail/firefox.profile" را بارگذاری میکند و در صورت عدم وجود آن، "${CFG}/firefox.profile" بارگذاری میشود.
فایلهای پیکربندی سیستم در ${CFG} هنگام نصب نرمافزار بازنویسی میشوند. پیکربندی ماندگار در سطح سیستم در فایلهای ".local" مدیریت میشود. به ازای هر فایل نمایه در دایرکتوری ${CFG}، کاربر میتواند یک فایل .local متناظر بسازد که تغییرات پیکربندی ماندگار را در خود ذخیره میکند. فایلهای ماندگار .local در ابتدای فایلهای نمایه معمولی گنجانده میشوند.
- noblacklist file_name
- اگر نام
فایل با file_name
مطابقت
داشته
باشد، این
فایل در
هیچیک از
دستورهای blacklist
بعدی در
لیست سیاه
قرار
نخواهد
گرفت.
مثال: "noblacklist ${HOME}/.mozilla"
- nowhitelist file_name
- اگر نام
فایل با file_name
مطابقت
داشته
باشد، این
فایل در
هیچیک از
دستورهای whitelist
بعدی در
لیست سفید
قرار
نخواهد
گرفت.
مثال: "nowhitelist ~/.config"
- ignore
- نادیده
گرفتن
دستور.
مثال: "ignore seccomp"
مثال: "ignore net eth0" - quiet
- غیرفعال
کردن خروجی
Firejail. این
دستور باید
اولین
دستور
غیرتوضیحی
در فایل
نمایه باشد.
مثال: "quiet"
- warn message
- چاپ پیام
هشدار در stderr.
هر چیزی پس
از دستور
دقیقاً
همانطور
که هست
(یعنی بدون
بسط ماکرو)
در پیام
هشدار چاپ
میشود.
مثال: "warn This file is deprecated; use foo instead."
سیستم فایل (FILESYSTEM)
این مدخلهای نمایه یک سیستم فایل chroot را تعریف میکنند که بر روی سیستم فایل موجود میزبان ساخته میشود. هر خط یک فایل/دایرکتوری غیرقابل دسترس (blacklist)، یک فایل یا دایرکتوری فقطخواندنی (read-only)، یک tmpfs سوارشده بر روی یک دایرکتوری موجود (tmpfs)، یا اتصال یک دایرکتوری یا فایل بر روی دایرکتوری یا فایل دیگر (bind) را شرح میدهد. برای تنظیم حالت خصوصی از private استفاده کنید. انطباق الگو با نویسههای عام (File globbing) پشتیبانی میشود، و دایرکتوریهای PATH و HOME جستجو میشوند؛ برای جزئیات بیشتر به بخش FILE GLOBBING در firejail(1) مراجعه کنید. مثالها:
- blacklist file_or_directory
- قرار دادن
دایرکتوری
یا فایل در
لیست سیاه.
این کار یک
فایل یا
دایرکتوری
را کاملاً
غیرقابل
دسترس
میکند.
تمام
فایلها و
دایرکتوریهای
دیگر
دستنخورده
باقی
میمانند.
فایل یا
دایرکتوری
موجود در
لیست سیاه
همچنان در
سیستم فایل
قابل
مشاهده
است، حتی
اگر
غیرقابل
دسترس باشد.
مدیریت پیوند نمادین: قرار دادن مسیری در لیست سیاه که یک پیوند نمادین است، مسیری را که به آن اشاره میکند نیز در لیست سیاه قرار میدهد. برای مثال، اگر ~/foo در لیست سیاه باشد و به /bar اشاره کند، /bar نیز در لیست سیاه قرار خواهد گرفت.
مثالها:
blacklist /usr/bin
blacklist /usr/bin/gcc*
blacklist ${PATH}/ifconfig
blacklist ${HOME}/.ssh - blacklist-nolog file_or_directory
- هنگامی که
فلگ --tracelog
تنظیم شده
باشد، قرار
گرفتن در
لیست سیاه
در صورتی که
جعبهشنی
تلاش برای
دسترسی به
فایل یا
دایرکتوری
کند،
پیامهای syslog
تولید
مینماید.
دستور blacklist-nolog
پیامهای syslog
را برای این
فایل یا
دایرکتوری
خاص
غیرفعال
میکند.
مثالها:
blacklist-nolog /usr/bin
blacklist-nolog /usr/bin/gcc* - bind directory1,directory2
- سوار کردن متصل (Mount-bind) پوشه directory1 بر روی directory2. این گزینه فقط هنگام اجرا به عنوان root در دسترس است.
- bind file1,file2
- سوار کردن متصل (Mount-bind) فایل file1 بر روی file2. این گزینه فقط هنگام اجرا به عنوان root در دسترس است.
- disable-mnt
- غیرفعال کردن دسترسی به /mnt، /media، /run/mount و /run/media.
- keep-config-pulse
- غیرفعال کردن مقداردهی خودکار ~/.config/pulse، برای پیکربندیهای پیچیده مانند سرورهای راه دور PulseAudio یا مسیرهای سوکت غیراستاندارد.
- keep-dev-ntsync
- اجازه دسترسی به دستگاه کاراکتری /dev/ntsync (حتی با private-dev)، که به طور پیشفرض مسدود است. این دستگاه عمدتاً برای افزایش کارایی و سازگاری هنگام اجرای برنامههای خاص از طریق Wine در نظر گرفته شده است.
- keep-dev-shm
- دایرکتوری /dev/shm دستنخورده باقی میماند (حتی با private-dev).
- keep-dev-tpm
- اجازه دسترسی به دستگاههای ماژول رمزنگاری معتمد (TCM) و ماژول بستر معتمد (TPM) (حتی با private-dev)، که به طور پیشفرض مسدود هستند.
- keep-shell-rc
- کپی نکردن فایلهای پیکربندی پوسته (مانند ~/.bashrc و ~/.zshrc) از /etc/skel.
- keep-var-tmp
- دایرکتوری /var/tmp دستنخورده باقی میماند.
- mkdir directory
- ایجاد یک
دایرکتوری
در خانه
کاربر، زیر
/tmp، یا زیر
/run/user/<UID> پیش از
راهاندازی
جعبهشنی.
اگر
دایرکتوری
از قبل وجود
نداشته
باشد ایجاد
میشود.
از این دستور برای دایرکتوریهای موجود در لیست سفید استفاده کنید که نیاز دارید هنگام بسته شدن جعبهشنی حفظ شوند. بدون آن، برنامه دایرکتوری را ایجاد میکند و هنگام بسته شدن جعبهشنی دایرکتوری حذف خواهد شد. زیردایرکتوریها به صورت بازگشتی ایجاد میشوند. مثال از نمایه firefox:
mkdir ~/.mozilla
whitelist ~/.mozilla
mkdir ~/.cache/mozilla/firefox
whitelist ~/.cache/mozilla/firefoxبرای فایلها در /run/user/<PID> از ماکروی ${RUNUSER} استفاده کنید:
mkdir ${RUNUSER}/firejail-testing
- mkfile file
- مشابه mkdir، این دستور یک فایل خالی در خانه کاربر، زیر /tmp، یا زیر /run/user/<UID> پیش از راهاندازی جعبهشنی ایجاد میکند. اگر فایل از قبل وجود نداشته باشد ایجاد میشود.
- noexec file_or_directory
- سوار کردن مجدد فایل یا دایرکتوری با گزینههای noexec، nodev و nosuid.
- private
- سوار کردن دایرکتوریهای جدید /root و /home/user در سیستمهای فایل موقت. تمام تغییرات هنگام بسته شدن جعبهشنی دور ریخته میشوند.
- private directory
- استفاده از
directory به عنوان
خانه کاربر.
گزینههای
--private و --private=directory
نمیتوانند
با هم
استفاده
شوند.
اشکال: حتی با فعال بودن این گزینه، برخی دستورهای firejail (مانند mkdir، mkfile و private-cache) همچنان بر روی دایرکتوری خانه اصلی عمل خواهند کرد. راهحل: دستورهای ناسازگار را غیرفعال کنید، مانند استفاده از "ignore mkdir" و "ignore mkfile". برای جزئیات، پیوند زیر را ببینید: #903.
- private-bin file,file
- ساخت یک /bin جدید در سیستم فایل موقت، و کپی برنامههای موجود در فهرست. فایلهای موجود در فهرست باید به صورت نسبی نسبت به دایرکتوریهای /bin، /sbin، /usr/bin، /usr/sbin یا /usr/local/bin بیان شوند. همین دایرکتوری همچنین به صورت bind-mount بر روی /sbin، /usr/bin و /usr/sbin سوار میشود. چندین دستور private-bin مجاز است و اثر آنها با یکدیگر جمع میشود.
- private-cache
- سوار کردن یک سیستم فایل موقت خالی بر روی دایرکتوری .cache در خانه کاربر. تمام تغییرات هنگام بسته شدن جعبهشنی دور ریخته میشوند.
- private-cwd
- تنظیم دایرکتوری کاری درون جعبهشنی بر روی دایرکتوری خانه، و در صورت عدم امکان، دایرکتوری ریشه.
- private-cwd directory
- تنظیم دایرکتوری کاری درون جعبهشنی. مسیر کامل دایرکتوری الزامی است. پیوندهای نمادین مجاز نیستند.
- private-dev
- ایجاد یک دایرکتوری جدید /dev. تنها دستگاههای disc، dri، dvb، full، hidraw، log، null، ptmx، pts، random، shm، snd، tty، urandom، usb، video و zero در دسترس هستند. از گزینههای no3d، nodvd، nosound، notv، nou2f و novideo برای محدودیتهای بیشتر استفاده کنید.
- private-etc file,directory
- ساخت یک /etc جدید در سیستم فایل موقت، و کپی فایلها و دایرکتوریهای موجود در فهرست. فایلها و دایرکتوریهای موجود در فهرست باید به صورت نسبی نسبت به دایرکتوری /etc بیان شوند و نباید حاوی نویسه / باشند (مثلاً /etc/foo باید به صورت foo بیان شود، اما /etc/foo/bar -- که به صورت foo/bar بیان شود -- مجاز نیست). تمام تغییرات هنگام بسته شدن جعبهشنی دور ریخته میشوند. چندین دستور private-etc مجاز است و اثر آنها با یکدیگر جمع میشود.
- private-home file,directory
- ساخت یک خانه کاربر جدید در سیستم فایل موقت، و کپی فایلها و دایرکتوریهای موجود در فهرست به خانه جدید. فایلها و دایرکتوریهای موجود در فهرست باید به صورت نسبی نسبت به دایرکتوری خانه کاربر جاری بیان شوند. تمام تغییرات هنگام بسته شدن جعبهشنی دور ریخته میشوند.
- private-opt file,directory
- ساخت یک /opt جدید در سیستم فایل موقت، و کپی فایلها و دایرکتوریهای موجود در فهرست. فایلها و دایرکتوریهای موجود در فهرست باید به صورت نسبی نسبت به دایرکتوری /opt بیان شوند و نباید حاوی نویسه / باشند (مثلاً /opt/foo باید به صورت foo بیان شود، اما /opt/foo/bar -- که به صورت foo/bar بیان شود -- مجاز نیست). تمام تغییرات هنگام بسته شدن جعبهشنی دور ریخته میشوند.
- private-srv file,directory
- ساخت یک /srv جدید در سیستم فایل موقت، و کپی فایلها و دایرکتوریهای موجود در فهرست. فایلها و دایرکتوریهای موجود در فهرست باید به صورت نسبی نسبت به دایرکتوری /srv بیان شوند و نباید حاوی نویسه / باشند (مثلاً /srv/foo باید به صورت foo بیان شود، اما /srv/foo/bar -- که به صورت foo/bar بیان شود -- مجاز نیست). تمام تغییرات هنگام بسته شدن جعبهشنی دور ریخته میشوند.
- private-tmp
- سوار کردن یک سیستم فایل موقت خالی بر روی دایرکتوری /tmp به همراه قرار دادن /tmp/.X11-unix در لیست سفید.
- read-only file_or_directory
- فقطخواندنی کردن دایرکتوری یا فایل.
- read-write file_or_directory
- خواندنی-نوشتنی کردن دایرکتوری یا فایل.
- tmpfs directory
- سوار کردن یک سیستم فایل tmpfs خالی بر روی directory. دایرکتوریهای خارج از خانه کاربر یا دایرکتوریهایی که تحت مالکیت کاربر نیستند مجاز نمیباشند. جعبههای شنی اجراشده با دسترسی root از این محدودیتها مستثنی هستند.
- tracelog
- ثبت تخلفات لیست سیاه در syslog.
- whitelist file_or_directory
- قرار دادن
دایرکتوری
یا فایل در
لیست سفید.
یک سیستم
فایل موقت
بر روی
دایرکتوری
بالادست
سوار
میشود. در
چارچوب firejail،
منظور از
دایرکتوری
بالادست
این است که
اگر مسیر
فایل موجود
در لیست
سفید برای
مثال /etc/somedir/somefile
باشد،
دایرکتوری
بالادست /etc
خواهد بود.
سایر
دایرکتوریهای
بالادست
مانند /opt، /usr و
غیره تغییر
نکردهاند،
بنابراین
همه
فایلها در
آنجا
همچنان در
دسترس
هستند، مگر
اینکه
فایلی یا
دایرکتوری
درون آنها
نیز در لیست
سفید قرار
گیرد. به
همین دلیل
است که گاهی
استفاده از
blacklist در ترکیب
با whitelist
سودمند
است، البته
اگر برای
دایرکتوریهای
بالادست
متفاوتی
استفاده
شوند.
فایلهای موجود در لیست سفید به صورت bind-mount درون آن سوار میشوند. تغییرات اعمالشده بر روی فایلهای لیست سفید ماندگار هستند، هر چیز دیگری در همان دایرکتوری بالادست هنگام بسته شدن جعبهشنی دور ریخته میشود.
دایرکتوری بالادست میتواند اکثر دایرکتوریهای درون / باشد، اما استثناهایی وجود دارد. دایرکتوریهای بالادست /proc و /sys مجاز نیستند، اما /sys/module مجاز است. همچنین /run/user/$UID، $HOME و تمام دایرکتوریهای موجود در /usr به عنوان یک دایرکتوری بالادست تلقی میشوند.
مدیریت پیوند نمادین: قرار دادن مسیری در لیست سفید که یک پیوند نمادین است، مسیری را که به آن اشاره میکند نیز در لیست سفید قرار خواهد داد. برای مثال، اگر ~/foo در لیست سفید باشد و به ~/bar اشاره کند، ~/bar نیز در لیست سفید قرار خواهد گرفت.
محدودیتها: به استثنای دایرکتوری خانه کاربر، پیوند و فایل واقعی هر دو باید در یک دایرکتوری بالادست یکسان باشند. برای پیوندهای نمادین در دایرکتوری خانه کاربر، هر دو پیوند و فایل واقعی باید در مالکیت کاربر باشند. - whitelist-ro file_or_directory
- معادل با "whitelist file_or_directory" و به دنبال آن "read-only file_or_directory"
- writable-etc
- سوار کردن دایرکتوری /etc به صورت خواندنی-نوشتنی.
- writable-run-user
- غیرفعال کردن قرارگیری پیشفرض /run/user/$UID/systemd و /run/user/$UID/gnupg در لیست سیاه.
- writable-var
- سوار کردن دایرکتوری /var به صورت خواندنی-نوشتنی.
- writable-var-log
- استفاده از دایرکتوری واقعی /var/log، نه یک نسخه شبیهسازیشده. به طور پیشفرض، یک tmpfs بر روی دایرکتوری /var/log سوار میشود، و اسکلتی از سیستم فایل بر اساس /var/log اصلی ساخته میشود.
فیلترهای امنیتی (SECURITY FILTERS)
فیلترهای امنیتی زیر در حال حاضر پیادهسازی شدهاند:
- allow-bwrap
- اجازه اجرای جعبهشنی bubblewrap در داخل جعبهشنی Firejail. به طور پیشفرض Firejail فایل اجرایی /usr/bin/bwrap را با یک برنامه بیاثر جایگزین میکند.
- allow-debuggers
- اجازه اجرای ابزارهایی مانند strace و gdb درون جعبهشنی با قرار دادن فراخوانهای سیستمی ptrace و process_vm_readv در لیست سفید.
- apparmor
- فعال کردن محدودسازی AppArmor با نمایه AppArmor با نام "firejail-default".
- apparmor profile_name
- فعال کردن محدودسازی AppArmor با یک نمایه سفارشی AppArmor. توجه داشته باشید که نمایه مورد نظر باید از قبل در هسته بارگذاری شده باشد.
- caps
- فعال کردن فیلتر پیشفرض قابلیتهای لینوکس (Linux capabilities). برای جزئیات capabilities(7) را ببینید.
- caps.drop capability,capability,capability
- قرار دادن قابلیتهای دادهشده لینوکس در لیست سیاه.
- caps.drop all
- قرار دادن تمام قابلیتهای لینوکس در لیست سیاه.
- caps.keep capability,capability,capability
- قرار دادن قابلیتهای دادهشده لینوکس در لیست سفید.
- landlock.enforce (آزمایشی)
- اعمال مجموعه قوانین Landlock. بدون آن، سایر دستورهای Landlock اثری نخواهند داشت.
- landlock.fs.read path (آزمایشی)
- ایجاد یک مجموعه قوانین Landlock (اگر از قبل وجود نداشته باشد) و افزودن قاعده دسترسی خواندن برای path.
- landlock.fs.write path (آزمایشی)
- ایجاد یک مجموعه قوانین Landlock (اگر از قبل وجود نداشته باشد) و افزودن قاعده دسترسی نوشتن برای path.
- landlock.fs.makeipc path (آزمایشی)
- ایجاد یک مجموعه قوانین Landlock (اگر از قبل وجود نداشته باشد) و افزودن قاعدهای که اجازه ایجاد لولههای نامگذاریشده (FIFOs) و سوکتهای دامنه یونیکس را در زیر مسیر دادهشده میدهد.
- landlock.fs.makedev path (آزمایشی)
- ایجاد یک مجموعه قوانین Landlock (اگر از قبل وجود نداشته باشد) و افزودن قاعدهای که اجازه ایجاد دستگاههای بلوکی و دستگاههای کاراکتری را در زیر مسیر دادهشده میدهد.
- landlock.fs.execute path (آزمایشی)
- ایجاد یک مجموعه قوانین Landlock (اگر از قبل وجود نداشته باشد) و افزودن قاعده مجوز اجرا برای path.
- memory-deny-write-execute
- نصب یک فیلتر seccomp برای مسدود کردن تلاشها به منظور ایجاد نگاشتهای حافظهای که همزمان قابل نوشتن و قابل اجرا باشند، تغییر نگاشتها به حالت قابل اجرا یا ایجاد حافظه مشترک قابل اجرا.
- nonewprivs
- تنظیم فلگ prctl مقدار NO_NEW_PRIVS. این کار تضمین میکند که فرآیندهای فرزند نتوانند با استفاده از execve(2) امتیازات جدیدی کسب کنند؛ به طور خاص، این بدان معناست که فراخوانی یک فایل باینری suid (یا فایلی دارای قابلیتهای فایلی) منجر به افزایش امتیاز نخواهد شد.
- noprinters
- غیرفعال کردن چاپگرها.
- noroot
- استفاده از این دستور برای فعالسازی یک فضاینام کاربری (User namespace). این فضاینام تنها یک کاربر دارد که همان کاربر جاری است. هیچ حساب root (شناسه 0) در فضاینام تعریف نشده است.
- protocol protocol1,protocol2,protocol3
- فعال کردن فیلتر پروتکل. این فیلتر بر اساس seccomp عمل کرده و نخستین آرگومان فراخوان سیستمی socket را بررسی میکند. مقادیر شناختهشده: unix، inet، inet6، netlink، packet و bluetooth. چندین دستور protocol مجاز است و اثر آنها با هم جمع میشود.
- restrict-namespaces
- نصب یک فیلتر seccomp که تلاشها برای ایجاد فضاهاینام جدید cgroup، ipc، net، mount، pid، time، user یا uts را مسدود میکند.
- restrict-namespaces cgroup,ipc,net,mnt,pid,time,user,uts
- نصب یک فیلتر seccomp که تلاشها برای ایجاد هر یک از فضاهاینام مشخصشده را مسدود مینماید.
- seccomp
- فعال کردن فیلتر seccomp و قرار دادن فراخوانهای سیستمی موجود در فهرست پیشفرض در لیست سیاه. برای جزئیات بیشتر به man 1 firejail مراجعه کنید.
- seccomp.32
- فعال کردن فیلتر seccomp و قرار دادن فراخوانهای سیستمی موجود در فهرست پیشفرض در لیست سیاه برای فراخوانهای سیستمی ۳۲ بیتی روی سیستم با معماری ۶۴ بیتی.
- seccomp syscall,syscall,syscall
- فعال کردن فیلتر seccomp و قرار دادن فراخوانهای سیستمی موجود در فهرست در لیست سیاه علاوه بر فیلتر seccomp پیشفرض.
- seccomp.32 syscall,syscall,syscall
- فعال کردن فیلتر seccomp و قرار دادن فراخوانهای سیستمی موجود در فهرست در لیست سیاه علاوه بر فیلتر seccomp پیشفرض برای فراخوانهای سیستمی ۳۲ بیتی روی سیستم با معماری ۶۴ بیتی.
- seccomp.block-secondary
- فعال کردن فیلتر seccomp و فیلتر کردن معماریهای فراخوان سیستمی به گونهای که تنها معماری بومی مجاز باشد.
- seccomp.drop syscall,syscall,syscall
- فعال کردن فیلتر seccomp و قرار دادن فراخوانهای سیستمی موجود در فهرست در لیست سیاه.
- seccomp.32.drop syscall,syscall,syscall
- فعال کردن فیلتر seccomp و قرار دادن فراخوانهای سیستمی موجود در فهرست در لیست سیاه برای فراخوانهای سیستمی ۳۲ بیتی روی سیستم با معماری ۶۴ بیتی.
- seccomp.keep syscall,syscall,syscall
- فعال کردن فیلتر seccomp و قرار دادن فراخوانهای سیستمی موجود در فهرست در لیست سفید.
- seccomp.32.keep syscall,syscall,syscall
- فعال کردن فیلتر seccomp و قرار دادن فراخوانهای سیستمی موجود در فهرست در لیست سفید برای فراخوانهای سیستمی ۳۲ بیتی روی سیستم با معماری ۶۴ بیتی.
- seccomp-error-action kill | log | ERRNO
- بازگرداندن یک خطای متفاوت به جای EPERM به فرآیند، خاتمه دادن به فرآیند (kill) هنگام تلاش برای فراخوانی یک فراخوان سیستمی مسدودشده، یا مجاز دانستن ولی ثبت کردن (log) این تلاش.
- x11
- فعال کردن ایزولهسازی X11.
- x11 none
- قرار دادن دایرکتوری /tmp/.X11-unix، فایل ${HOME}/.Xauthority و فایل مشخصشده در متغیر محیطی ${XAUTHORITY} در لیست سیاه. حذف متغیرهای محیطی DISPLAY و XAUTHORITY. توقف با پیام خطا اگر سوکت انتزاعی X11 در داخل جعبهشنی در دسترس باشد.
- x11 xephyr
- فعال کردن ایزولهسازی X11 با سرور Xephyr.
- x11 xorg
- فعال کردن ایزولهسازی X11 با افزونه امنیتی X11.
- x11 xpra
- فعال کردن ایزولهسازی X11 با سرور Xpra.
- x11 xvfb
- فعال کردن ایزولهسازی X11 با سرور Xvfb.
- xephyr-extra-params OPTIONS
- تنظیم
پارامترهای
اضافی
دستور سرور
Xephyr برای x11 xephyr.
این دستور
باید در
فایل نمایه
قبل از
دستور x11 xephyr
گنجانده
شود.
مثال:
xephyr-extra-params -grayscale
x11 xephyr - xephyr-screen WIDTHxHEIGHT
- تنظیم
اندازه
صفحه برای x11
xephyr. این دستور
باید در
فایل نمایه
قبل از
دستور x11 xephyr
گنجانده
شود.
مثال:
xephyr-screen 640x480
x11 xephyr
فیلترسازی DBus (DBUS FILTERING)
دسترسی به سوکتهای یونیکس نشست (Session) و سیستم DBus میتواند مجاز، فیلترشده یا غیرفعال باشد. برای غیرفعال کردن سوکتهای انتزاعی (و اجبار برنامهها به استفاده از سوکت یونیکس فیلترشده)، باید با استفاده از دستور --net یک فضاینام شبکه جدید درخواست کنید. گزینه دیگر حذف unix از مجموعه --protocol است.
فیلترسازی نیازمند نصب ابزار کمکی xdg-dbus-proxy است. قواعد فیلتر را میتوان برای نامهای شناختهشده DBus مشخص کرد، اما این قواعد به نام یکتای مالک نیز انتقال مییابند. دسترسیها "ماندگار" (Sticky) هستند و حتی اگر نام شناختهشده متناظر رها شود همچنان حفظ میشوند (با این حال، برنامهها در عمل به ندرت نامهای شناختهشده را رها میکنند). نامها میتوانند پسوند .* داشته باشند تا با تمام نامهای زیرمجموعه آنها، از جمله خودشان مطابقت داشته باشند (مثلاً "foo.bar.*" با "foo.bar"، "foo.bar.baz" و "foo.bar.baz.quux" تطابق دارد، اما با "foobar" تطابق ندارد). برای اطلاعات بیشتر xdg-dbus-proxy(1) را ببینید.
مثالها:
- dbus-system filter
- فعال کردن دسترسی فیلترشده به DBus سیستم. فیلترها را میتوان با دستورهای dbus-system.talk و dbus-system.own مشخص کرد.
- dbus-system none
- غیرفعال کردن دسترسی به DBus سیستم. پس از غیرفعال شدن دسترسی، نمیتوان آن را به حالت فیلترشده تسهیل کرد.
- dbus-system.broadcast org.freedesktop.Notifications=org.freedesktop.Notifications.*@/org/freedesktop/Notifications
- اجازه به برنامه برای دریافت سیگنالهای پخشی (Broadcast) از رابط org.freedesktop.Notifications مربوط به شیء ارائهشده در مسیر /org/freedesktop/Notifications توسط کلاینت مالک نام گذرگاه org.freedesktop.Notifications روی DBus سیستم.
- dbus-system.call org.freedesktop.Notifications=org.freedesktop.Notifications.*@/org/freedesktop/Notifications
- اجازه به برنامه برای فراخوانی متدهای رابط org.freedesktop.Notifications مربوط به شیء ارائهشده در مسیر /org/freedesktop/Notifications توسط کلاینت مالک نام گذرگاه org.freedesktop.Notifications روی DBus سیستم.
- dbus-system.own org.gnome.ghex.*
- اجازه به برنامه برای در اختیار گرفتن مالکیت نام org.gnome.ghex و تمامی نامهای زیرمجموعه آن روی DBus سیستم.
- dbus-system.see org.freedesktop.Notifications
- اجازه به برنامه برای دیدن اما نه ارتباط با نام org.freedesktop.Notifications روی DBus سیستم.
- dbus-system.talk org.freedesktop.Notifications
- اجازه به برنامه برای ارتباط با نام org.freedesktop.Notifications روی DBus سیستم.
- dbus-user filter
- فعال کردن دسترسی فیلترشده به DBus نشست. فیلترها را میتوان با دستورهای dbus-user.talk و dbus-user.own مشخص کرد.
- dbus-user none
- غیرفعال کردن دسترسی به DBus نشست. پس از غیرفعال شدن دسترسی، نمیتوان آن را به حالت فیلترشده تسهیل کرد.
- dbus-user.broadcast org.freedesktop.Notifications=org.freedesktop.Notifications.*@/org/freedesktop/Notifications
- اجازه به برنامه برای دریافت سیگنالهای پخشی از رابط org.freedesktop.Notifications مربوط به شیء ارائهشده در مسیر /org/freedesktop/Notifications توسط کلاینت مالک نام گذرگاه org.freedesktop.Notifications روی DBus نشست.
- dbus-user.call org.freedesktop.Notifications=org.freedesktop.Notifications.*@/org/freedesktop/Notifications
- اجازه به برنامه برای فراخوانی متدهای رابط org.freedesktop.Notifications مربوط به شیء ارائهشده در مسیر /org/freedesktop/Notifications توسط کلاینت مالک نام گذرگاه org.freedesktop.Notifications روی DBus نشست.
- dbus-user.own org.gnome.ghex.*
- اجازه به برنامه برای در اختیار گرفتن مالکیت نام org.gnome.ghex و تمامی نامهای زیرمجموعه آن روی DBus نشست.
- dbus-user.see org.freedesktop.Notifications
- اجازه به برنامه برای دیدن اما نه ارتباط با نام org.freedesktop.Notifications روی DBus نشست.
- dbus-user.talk org.freedesktop.Notifications
- اجازه به برنامه برای ارتباط با نام org.freedesktop.Notifications روی DBus نشست.
- nodbus (منسوخشده)
- غیرفعال کردن دسترسی D-Bus (هر دو گذرگاه سیستم و نشست). معادل با dbus-system none و dbus-user none.
فیلترهای
منفرد را
میتوان از
طریق دستور
--ignore لغو کرد. با
فرض اینکه
یک نمایه
دارای
موارد زیر
باشد:
[...]
dbus-user filter
dbus-user.own org.mozilla.firefox.*
dbus-user.talk org.freedesktop.Notifications
dbus-system none
[...]
و کاربر
مایل به
غیرفعالسازی
اعلانها
باشد، این
هدف با قرار
دادن عبارت
زیر در یک
فایل لغو
محلی حاصل
میشود:
[...]
ignore dbus-user.talk org.freedesktop.Notifications
[...]
محدودیتهای منابع و وابستگی پردازنده (RESOURCE LIMITS, CPU AFFINITY)
این مدخلهای نمایه محدودیتهای مربوط به منابع سیستم (rlimits) را برای فرآیندهای درون جعبهشنی تعریف میکنند. این محدودیتها را میتوان در داخل جعبهشنی با استفاده از دستور استاندارد ulimit تغییر داد. دستور cpu هستههای پردازنده موجود را پیکربندی میکند.
مثالها:
- cpu 0,1,2
- استفاده تنها از هستههای پردازنده 0، 1 و 2.
- nice -5
- تنظیم مقدار nice برابر با -5 برای تمام فرآیندهای در حال اجرا درون جعبهشنی.
- rlimit-as 123456789012
- تنظیم حداکثر اندازه حافظه مجازی فرآیند به 123456789012 بایت.
- rlimit-cpu 123
- تنظیم حداکثر زمان پردازنده به ثانیه.
- rlimit-fsize 1024
- تنظیم حداکثر اندازه فایلی که میتواند توسط یک فرآیند ایجاد شود به 1024 بایت.
- rlimit-nproc 1000
- تنظیم حداکثر تعداد فرآیندهایی که میتوان برای شناسه واقعی کاربر فرآیند فراخواننده ایجاد کرد به 1000.
- rlimit-nofile 500
- تنظیم حداکثر تعداد فایلهایی که میتوان توسط یک فرآیند باز کرد به 500.
- rlimit-sigpending 200
- تنظیم حداکثر تعداد سیگنالهای معلقی که میتوان برای شناسه واقعی کاربر فرآیند فراخواننده ایجاد کرد به 200.
- timeout hh:mm:ss
- خاتمه دادن خودکار به جعبهشنی پس از سپری شدن زمان مشخصشده. زمان در قالب ساعت/دقیقه/ثانیه تعیین میشود.
محیط کاربری (USER ENVIRONMENT)
- allusers
- تمامی دایرکتوریهای خانه کاربران در داخل جعبهشنی قابل مشاهده خواهند بود. به طور پیشفرض، تنها دایرکتوری خانه کاربر جاری قابل مشاهده است.
- env name=value
- تنظیم
متغیر
محیطی.
مثالها:
env LD_LIBRARY_PATH=/opt/test/lib
env CFLAGS="-W -Wall -Werror" - ipc-namespace
- فعال کردن
یک
فضاینام IPC
جدید در
صورتی که
جعبهشنی
به عنوان
کاربر
معمولی
آغاز شده
باشد.
فضاینام IPC
به طور
پیشفرض
برای
جعبههای
شنی اجرا
شده توسط root
فعال است.
نکته: این دستور تنها بر روی منابع IPC که در ipc_namespaces(7) ذکر شدهاند اثر میگذارد. بر سایر منابع IPC، از جمله سوکتهای یونیکس (نگاه کنید به unix(7)) اثری ندارد.
- keep-fd
- به ارث بردن توصیفگرهای فایل باز در داخل جعبهشنی.
- name sandboxname
- تنظیم نام
جعبهشنی.
مثال:
name browser
- no3d
- غیرفعال کردن شتابدهی سختافزاری سهبعدی (3D).
- noautopulse (منسوخشده)
- نگاه کنید به keep-config-pulse.
- nodvd
- غیرفعال کردن دستگاههای DVD و CD صوتی.
- nogroups
- غیرفعال کردن گروههای کاربری تکمیلی (Supplementary user groups).
- noinput
- غیرفعال کردن دستگاههای ورودی.
- nosound
- غیرفعال کردن سیستم صوتی.
- notpm (منسوخشده)
- برای
سازگاری
نادیده
گرفته
میشود.
دستگاههای TPM اکنون به طور پیشفرض مسدود هستند، نگاه کنید به keep-dev-tpm. - notv
- غیرفعال کردن دستگاههای تلویزیونی DVB (پخش ویدیوی دیجیتال).
- nou2f
- غیرفعال کردن دستگاههای U2F.
- novideo
- غیرفعال کردن دستگاههای ضبط ویدیو.
- machine-id
- جعل شماره شناسه در فایل /etc/machine-id - یک شناسه تصادفی جدید در داخل جعبهشنی تولید میشود.
شبکه (NETWORKING)
قابلیتهای شبکه موجود در فایلهای نمایه.
- defaultgw address
- استفاده از این آدرس به عنوان دروازه پیشفرض (Default gateway) در فضاینام شبکه جدید.
- dns address
- تنظیم یک سرور DNS برای جعبهشنی. حداکثر تا سه سرور DNS قابل تعریف است.
- hostname name
- تنظیم نام میزبان (Hostname) برای جعبهشنی.
- hostname-randomize
- تنظیم نام میزبان جعبهشنی به یک مقدار تصادفی تولیدشده توسط firejail.
- hosts-file file
- استفاده از file به عنوان /etc/hosts.
- ip address
- اختصاص
آدرسهای IP
به آخرین
رابط شبکه
تعریفشده
با یک دستور
net. یک دروازه
پیشفرض به
صورت
پیشفرض
اختصاص
مییابد.
مثال:
net eth0
ip 10.10.20.56 - ip dhcp
- دریافت یک
آدرس IP و
دروازه
پیشفرض
برای آخرین
رابط
تعریفشده
توسط دستور
net، و همچنین
تنظیم
سرورهای DNS
بر اساس
پاسخ DHCP. این
دستور
مستلزم نصب
بودن
کلاینت DHCP به
نام ISC dhclient است و
آن را به
طور خودکار
درون
جعبهشنی
اجرا خواهد
کرد.
مثال:
net br0
ip dhcpاین دستور در صورتی که سرور DHCP برای پیکربندی سرورهای DNS کلاینتها تنظیم شده باشد، نباید همزمان با دستور dns به کار رود؛ زیرا سرورهای DNS تعیینشده به صورت دستی بازنویسی خواهند شد.
کلاینت DHCP هنگام پایان کار جعبهشنی اجاره DHCP را آزاد نمیکند (Release). اگر سرور DHCP شما نیاز دارد که اجارهها به طور صریح آزاد شوند، اجرای یک کلاینت DHCP و آزادسازی دستی اجاره را در ترکیب با دستور net none در نظر بگیرید.
- ip none
- هیچ آدرس IP و
هیچ دروازه
پیشفرضی
برای آخرین
رابط
تعریفشده
توسط دستور
net پیکربندی
نمیشود. از
این گزینه
در صورتی
استفاده
کنید که قصد
دارید یک
کلاینت
خارجی DHCP را
درون
جعبهشنی
اجرا
نمایید.
مثال:
net eth0
ip none - ip6 address
- اختصاص
آدرسهای IPv6
به آخرین
رابط شبکه
تعریفشده
توسط یک
دستور net.
مثال:
net eth0
ip6 2001:0db8:0:f101::1/64 - ip6 dhcp
- دریافت یک
آدرس IPv6 و
دروازه
پیشفرض
برای آخرین
رابط
تعریفشده
توسط دستور
net، و همچنین
تنظیم
سرورهای DNS
بر اساس
پاسخ DHCP. این
دستور
مستلزم نصب
بودن
کلاینت DHCP به
نام ISC dhclient است و
آن را به
طور خودکار
درون
جعبهشنی
اجرا خواهد
کرد.
مثال:
net br0
ip6 dhcpاین دستور در صورتی که سرور DHCP برای پیکربندی سرورهای DNS کلاینتها تنظیم شده باشد، نباید همزمان با دستور dns استفاده شود؛ زیرا سرورهای DNS تعیینشده به صورت دستی بازنویسی خواهند شد.
کلاینت DHCP هنگام پایان کار جعبهشنی اجاره DHCP را آزاد نخواهد کرد. اگر سرور DHCP شما نیازمند آزادسازی صریح اجارهها است، اجرای یک کلاینت DHCP و آزادسازی دستی اجاره را در نظر بگیرید.
- iprange address,address
- اختصاص یک
آدرس IP در
محدوده
ارائهشده
به آخرین
رابط شبکه
تعریفشده
توسط دستور
net. یک دروازه
پیشفرض به
طور
پیشفرض
اختصاص
مییابد.
مثال:
net eth0
iprange 192.168.1.150,192.168.1.160 - mac address
- اختصاص آدرس MAC به آخرین رابط شبکه تعریفشده توسط دستور net.
- mtu number
- اختصاص مقدار MTU به آخرین رابط شبکه تعریفشده توسط دستور net.
- net bridge_interface
- فعال کردن یک فضاینام شبکه جدید و اتصال آن به این رابط پل (Bridge). مگر در صورت تعیین با گزینههای --ip و --defaultgw، یک آدرس IP و یک دروازه پیشفرض به طور خودکار به جعبهشنی اختصاص داده میشود. آدرس IP پیش از تخصیص با استفاده از ARP بررسی میشود. آدرس پیکربندیشده به عنوان دروازه پیشفرض، همان آدرس IP دستگاه پل است. حداکثر تا چهار دستگاه پل --net قابل تعریف است. ترکیب دستگاههای پل و macvlan مجاز است.
- net ethernet_interface|wireless_interface
- فعال کردن یک فضاینام شبکه جدید و اتصال آن به این رابط اترنت با استفاده از درایور استاندارد macvlan یا ipvlan لینوکس. مگر در صورت تعیین با گزینههای --ip و --defaultgw، یک آدرس IP و یک دروازه پیشفرض به طور خودکار به جعبهشنی اختصاص داده میشود. آدرس IP پیش از تخصیص با استفاده از ARP تأیید میشود. آدرس پیکربندیشده به عنوان دروازه پیشفرض، همان دروازه پیشفرض میزبان است. حداکثر تا چهار دستگاه --net قابل تعریف است. ترکیب دستگاههای پل و macvlan مجاز است.
- net none
- فعال کردن یک فضاینام شبکه جدید و نامتصل. تنها رابط موجود در فضاینام جدید، یک رابط لوپبک جدید (lo) است. از این گزینه برای جلوگیری از دسترسی شبکه برنامههایی استفاده کنید که واقعاً نیازی به دسترسی شبکه ندارند.
- net tap_interface
- فعال کردن یک فضاینام شبکه جدید و اتصال آن به این رابط tap اترنت با استفاده از درایور استاندارد macvlan لینوکس. اگر رابط tap پیکربندی نشده باشد، جعبهشنی تلاشی برای پیکربندی رابط در داخل جعبهشنی نخواهد کرد. لطفاً برای مشخص کردن پیکربندی از ip، netmask و defaultgw استفاده کنید.
- netfilter
- اگر یک فضاینام شبکه جدید ایجاد شود، فیلتر شبکه پیشفرض فعال میشود.
- netfilter filename
- اگر یک فضاینام شبکه جدید ایجاد شود، فیلتر شبکه موجود در filename فعال میشود.
- netlock
- تولید یک فیلتر شبکه سفارشی و فعالسازی آن.
- netmask address
- از این گزینه زمانی استفاده کنید که میخواهید یک آدرس IP در یک فضاینام جدید اختصاص دهید و رابط والد مشخصشده توسط --net پیکربندی نشده است. یک آدرس IP و یک آدرس دروازه پیشفرض نیز باید افزوده شوند.
- netns namespace
- اجرای برنامه در یک فضاینام شبکه نامگذاریشده و ماندگار. این موارد را میتوان با استفاده از "ip netns" ایجاد و پیکربندی کرد.
- veth-name name
- استفاده از این نام برای رابط متصل به پل برای دستورهای --net=bridge_interface، به جای نام پیشفرض.
سایر موارد (OTHER)
- deterministic-exit-code
- همیشه با وضعیت خروج اولین فرزند از firejail خارج شو. رفتار پیشفرض استفاده از وضعیت خروج آخرین فرزند برای خروج است که میتواند غیرقطعی باشد.
- deterministic-shutdown
- همیشه پس از پایان اولین فرزند، جعبهشنی را خاموش کن. رفتار پیشفرض این است که جعبهشنی تا زمانی که حاوی فرآیندهای در حال اجرا باشد زنده نگه داشته شود.
- join-or-start sandboxname
- پیوستن به جعبهشنی مشخصشده با نام یا شروع یک مورد جدید. مشابه با دستور "firejail --join=sandboxname" در صورتی که جعبهشنی با نام مشخصشده وجود داشته باشد، در غیر این صورت مشابه با "name sandboxname".
فایلها (FILES)
- /etc/firejail/appname.profile
- پیکربندی سراسری Firejail که عمدتاً متشکل از نمایههای مربوط به هر برنامهای است که به طور پیشفرض پشتیبانی میشود.
- $HOME/.config/firejail/appname.profile
- نمایههای کاربری برنامهها، که نسبت به نمایههای سراسری اولویت دارند.
- /usr/share/doc/firejail/profile.template
- قالب برای ساخت نمایههای جدید.
- /usr/share/doc/firejail/redirect_alias-profile.template
- قالب برای ایجاد نمایههای تغییر مسیر/نام مستعار.
مجوز (LICENSE)
نرمافزار Firejail یک نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط مجوز عمومی همگانی گنو (GNU General Public License) همانطور که توسط بنیاد نرمافزار آزاد منتشر شده است، چه نسخه ۲ مجوز و چه (به انتخاب خودتان) هر نسخه پس از آن، بازتوزیع کرده و/یا تغییر دهید.
صفحه اصلی: https://firejail.wordpress.com
همچنین ببینید (SEE ALSO)
firejail(1), firemon(1), firecfg(1), firejail-login(5), firejail-users(5), jailcheck(1)
https://github.com/netblue30/firejail/wiki/Creating-Profiles
| Mar 2026 | 0.9.80 |