FIREJAIL-PROFILE(5) firejail profiles man page FIREJAIL-PROFILE(5)

firejail-profile - نحو فایل نمایه امنیتی و اطلاعات لازم برای ساخت نمایه‌های جدید برنامه‌ها

استفاده از یک نمایه خاص:

مثال:
$ firejail --appimage --profile=/etc/firejail/kdenlive.profile kdenlive.appimage

مثال:
$ firejail --appimage --profile=kdenlive kdenlive.appimage

ساخت دستی نمایه:

کار را با قالب موجود در /usr/share/doc/firejail/profile.template آغاز کرده و آن را در یک ویرایشگر متنی ویرایش کنید. برای یکپارچه‌سازی برنامه در محیط میزکار خود، فایل نمایه را در دایرکتوری ~/.config/firejail کپی کرده و دستور "sudo firecfg" را اجرا کنید.

نام‌های مستعار و تغییر مسیرها:

در برخی موارد یک نمایه یکسان می‌تواند برای چندین برنامه به کار رود. یک نمونه از این موارد LibreOffice است. برای برنامه اصلی یک نمایه عادی بسازید و برای باقی موارد از /usr/share/doc/firejail/redirect_alias-profile.template استفاده کنید.

اجرای سازنده نمایه:

مثال:
$ firejail --build=blobby.profile /usr/bin/blobby

برنامه را در "firejail --build" اجرا کرده و تلاش کنید تا حد امکان قابلیت‌های بیشتری از برنامه را به کار بگیرید. نمایه استخراج شده و در دایرکتوری جاری ذخیره می‌شود. آن را در یک ویرایشگر متنی باز کرده و گزینه‌های ایزوله‌سازی (Sandboxing) را بر حسب نیاز اضافه یا حذف کنید. پس از اصلاح نمایه، مجدداً آزمایش کنید. برای یکپارچه‌سازی برنامه در محیط میزکار خود، فایل نمایه را در دایرکتوری ~/.config/firejail کپی کرده و دستور "sudo firecfg" را اجرا کنید.

چندین گزینه خط فرمان را می‌توان با استفاده از فایل‌های نمایه به برنامه منتقل کرد. Firejail فایل نمایه را به ترتیب زیر انتخاب می‌کند:

1. اگر یک فایل نمایه توسط کاربر با گزینه --profile ارائه شده باشد، فایل نمایه بارگذاری می‌شود. در صورت ارائه نام نمایه، ابتدا در دایرکتوری ~/.config/firejail و در صورت پیدا نشدن، در دایرکتوری /etc/firejail جستجو می‌شود. نام‌های نمایه شامل پسوند .profile نیستند. مثال:

$ firejail --profile=/home/netblue/icecat.profile /usr/bin/icecat
Reading profile /home/netblue/icecat.profile
[...]
$ firejail --profile=icecat /usr/bin/icecat-wrapper.sh
Reading profile /etc/firejail/icecat.profile
[...]

2. اگر یک فایل نمایه با نامی مشابه برنامه در دایرکتوری ~/.config/firejail یا در /etc/firejail موجود باشد، نمایه بارگذاری می‌شود. دایرکتوری ~/.config/firejail نسبت به /etc/firejail اولویت دارد. مثال:

$ firejail /usr/bin/icecat
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 استفاده کنید. مثال:

$ firejail
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
[...]

در /usr/share/doc/firejail دو قالب برای نگارش نمایه‌های جدید وجود دارد.

profile.template - برای نمایه‌های معمولی
redirect_alias-profile.template - برای نمایه‌های تغییر مسیر/نام مستعار

دستورهای اسکریپت‌نویسی:

نام‌های فایل و دایرکتوری
نام‌های فایل و دایرکتوری حاوی فاصله پشتیبانی می‌شوند. نویسه فاصله ' ' نباید اسکیپ شود.

مثال: "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) ارزیابی شوند.

گنجاندن فایل 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 در ابتدای فایل‌های نمایه معمولی گنجانده می‌شوند.

اگر نام فایل با file_name مطابقت داشته باشد، این فایل در هیچ‌یک از دستورهای blacklist بعدی در لیست سیاه قرار نخواهد گرفت.

مثال: "noblacklist ${HOME}/.mozilla"

اگر نام فایل با file_name مطابقت داشته باشد، این فایل در هیچ‌یک از دستورهای whitelist بعدی در لیست سفید قرار نخواهد گرفت.

مثال: "nowhitelist ~/.config"

نادیده گرفتن دستور.

مثال: "ignore seccomp"
مثال: "ignore net eth0"

غیرفعال کردن خروجی Firejail. این دستور باید اولین دستور غیرتوضیحی در فایل نمایه باشد.

مثال: "quiet"

چاپ پیام هشدار در stderr. هر چیزی پس از دستور دقیقاً همان‌طور که هست (یعنی بدون بسط ماکرو) در پیام هشدار چاپ می‌شود.

مثال: "warn This file is deprecated; use foo instead."

این مدخل‌های نمایه یک سیستم فایل chroot را تعریف می‌کنند که بر روی سیستم فایل موجود میزبان ساخته می‌شود. هر خط یک فایل/دایرکتوری غیرقابل دسترس (blacklist)، یک فایل یا دایرکتوری فقط‌خواندنی (read-only)، یک tmpfs سوارشده بر روی یک دایرکتوری موجود (tmpfs)، یا اتصال یک دایرکتوری یا فایل بر روی دایرکتوری یا فایل دیگر (bind) را شرح می‌دهد. برای تنظیم حالت خصوصی از private استفاده کنید. انطباق الگو با نویسه‌های عام (File globbing) پشتیبانی می‌شود، و دایرکتوری‌های PATH و HOME جستجو می‌شوند؛ برای جزئیات بیشتر به بخش FILE GLOBBING در firejail(1) مراجعه کنید. مثال‌ها:

قرار دادن دایرکتوری یا فایل در لیست سیاه. این کار یک فایل یا دایرکتوری را کاملاً غیرقابل دسترس می‌کند. تمام فایل‌ها و دایرکتوری‌های دیگر دست‌نخورده باقی می‌مانند. فایل یا دایرکتوری موجود در لیست سیاه همچنان در سیستم فایل قابل مشاهده است، حتی اگر غیرقابل دسترس باشد.

مدیریت پیوند نمادین: قرار دادن مسیری در لیست سیاه که یک پیوند نمادین است، مسیری را که به آن اشاره می‌کند نیز در لیست سیاه قرار می‌دهد. برای مثال، اگر ~/foo در لیست سیاه باشد و به /bar اشاره کند، /bar نیز در لیست سیاه قرار خواهد گرفت.

مثال‌ها:

blacklist /usr/bin
blacklist /usr/bin/gcc*
blacklist ${PATH}/ifconfig
blacklist ${HOME}/.ssh

هنگامی که فلگ --tracelog تنظیم شده باشد، قرار گرفتن در لیست سیاه در صورتی که جعبه‌شنی تلاش برای دسترسی به فایل یا دایرکتوری کند، پیام‌های syslog تولید می‌نماید. دستور blacklist-nolog پیام‌های syslog را برای این فایل یا دایرکتوری خاص غیرفعال می‌کند. مثال‌ها:

blacklist-nolog /usr/bin
blacklist-nolog /usr/bin/gcc*

سوار کردن متصل (Mount-bind) پوشه directory1 بر روی directory2. این گزینه فقط هنگام اجرا به عنوان root در دسترس است.
سوار کردن متصل (Mount-bind) فایل file1 بر روی file2. این گزینه فقط هنگام اجرا به عنوان root در دسترس است.
غیرفعال کردن دسترسی به /mnt، /media، /run/mount و /run/media.
غیرفعال کردن مقداردهی خودکار ~/.config/pulse، برای پیکربندی‌های پیچیده مانند سرورهای راه دور PulseAudio یا مسیرهای سوکت غیراستاندارد.
اجازه دسترسی به دستگاه کاراکتری /dev/ntsync (حتی با private-dev)، که به طور پیش‌فرض مسدود است. این دستگاه عمدتاً برای افزایش کارایی و سازگاری هنگام اجرای برنامه‌های خاص از طریق Wine در نظر گرفته شده است.
دایرکتوری /dev/shm دست‌نخورده باقی می‌ماند (حتی با private-dev).
اجازه دسترسی به دستگاه‌های ماژول رمزنگاری معتمد (TCM) و ماژول بستر معتمد (TPM) (حتی با private-dev)، که به طور پیش‌فرض مسدود هستند.
کپی نکردن فایل‌های پیکربندی پوسته (مانند ~/.bashrc و ~/.zshrc) از /etc/skel.
دایرکتوری /var/tmp دست‌نخورده باقی می‌ماند.
ایجاد یک دایرکتوری در خانه کاربر، زیر /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

مشابه mkdir، این دستور یک فایل خالی در خانه کاربر، زیر /tmp، یا زیر /run/user/<UID> پیش از راه‌اندازی جعبه‌شنی ایجاد می‌کند. اگر فایل از قبل وجود نداشته باشد ایجاد می‌شود.
سوار کردن مجدد فایل یا دایرکتوری با گزینه‌های noexec، nodev و nosuid.
سوار کردن دایرکتوری‌های جدید /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 در لیست سفید.
فقط‌خواندنی کردن دایرکتوری یا فایل.
خواندنی-نوشتنی کردن دایرکتوری یا فایل.
سوار کردن یک سیستم فایل tmpfs خالی بر روی directory. دایرکتوری‌های خارج از خانه کاربر یا دایرکتوری‌هایی که تحت مالکیت کاربر نیستند مجاز نمی‌باشند. جعبه‌های شنی اجراشده با دسترسی root از این محدودیت‌ها مستثنی هستند.
ثبت تخلفات لیست سیاه در syslog.
قرار دادن دایرکتوری یا فایل در لیست سفید. یک سیستم فایل موقت بر روی دایرکتوری بالادست سوار می‌شود. در چارچوب firejail، منظور از دایرکتوری بالادست این است که اگر مسیر فایل موجود در لیست سفید برای مثال /etc/somedir/somefile باشد، دایرکتوری بالادست /etc خواهد بود. سایر دایرکتوری‌های بالادست مانند /opt، /usr و غیره تغییر نکرده‌اند، بنابراین همه فایل‌ها در آنجا همچنان در دسترس هستند، مگر اینکه فایلی یا دایرکتوری درون آن‌ها نیز در لیست سفید قرار گیرد. به همین دلیل است که گاهی استفاده از blacklist در ترکیب با whitelist سودمند است، البته اگر برای دایرکتوری‌های بالادست متفاوتی استفاده شوند.

فایل‌های موجود در لیست سفید به صورت bind-mount درون آن سوار می‌شوند. تغییرات اعمال‌شده بر روی فایل‌های لیست سفید ماندگار هستند، هر چیز دیگری در همان دایرکتوری بالادست هنگام بسته شدن جعبه‌شنی دور ریخته می‌شود.

دایرکتوری بالادست می‌تواند اکثر دایرکتوری‌های درون / باشد، اما استثناهایی وجود دارد. دایرکتوری‌های بالادست /proc و /sys مجاز نیستند، اما /sys/module مجاز است. همچنین /run/user/$UID، $HOME و تمام دایرکتوری‌های موجود در /usr به عنوان یک دایرکتوری بالادست تلقی می‌شوند.

مدیریت پیوند نمادین: قرار دادن مسیری در لیست سفید که یک پیوند نمادین است، مسیری را که به آن اشاره می‌کند نیز در لیست سفید قرار خواهد داد. برای مثال، اگر ~/foo در لیست سفید باشد و به ~/bar اشاره کند، ~/bar نیز در لیست سفید قرار خواهد گرفت.
محدودیت‌ها: به استثنای دایرکتوری خانه کاربر، پیوند و فایل واقعی هر دو باید در یک دایرکتوری بالادست یکسان باشند. برای پیوندهای نمادین در دایرکتوری خانه کاربر، هر دو پیوند و فایل واقعی باید در مالکیت کاربر باشند.

معادل با "whitelist file_or_directory" و به دنبال آن "read-only file_or_directory"
سوار کردن دایرکتوری /etc به صورت خواندنی-نوشتنی.
غیرفعال کردن قرارگیری پیش‌فرض /run/user/$UID/systemd و /run/user/$UID/gnupg در لیست سیاه.
سوار کردن دایرکتوری /var به صورت خواندنی-نوشتنی.
استفاده از دایرکتوری واقعی /var/log، نه یک نسخه شبیه‌سازی‌شده. به طور پیش‌فرض، یک tmpfs بر روی دایرکتوری /var/log سوار می‌شود، و اسکلتی از سیستم فایل بر اساس /var/log اصلی ساخته می‌شود.

فیلترهای امنیتی زیر در حال حاضر پیاده‌سازی شده‌اند:

اجازه اجرای جعبه‌شنی bubblewrap در داخل جعبه‌شنی Firejail. به طور پیش‌فرض Firejail فایل اجرایی /usr/bin/bwrap را با یک برنامه بی‌اثر جایگزین می‌کند.
اجازه اجرای ابزارهایی مانند strace و gdb درون جعبه‌شنی با قرار دادن فراخوان‌های سیستمی ptrace و process_vm_readv در لیست سفید.
فعال کردن محدودسازی AppArmor با نمایه AppArmor با نام "firejail-default".
apparmor profile_name
فعال کردن محدودسازی AppArmor با یک نمایه سفارشی AppArmor. توجه داشته باشید که نمایه مورد نظر باید از قبل در هسته بارگذاری شده باشد.
فعال کردن فیلتر پیش‌فرض قابلیت‌های لینوکس (Linux capabilities). برای جزئیات capabilities(7) را ببینید.
قرار دادن قابلیت‌های داده‌شده لینوکس در لیست سیاه.
قرار دادن تمام قابلیت‌های لینوکس در لیست سیاه.
قرار دادن قابلیت‌های داده‌شده لینوکس در لیست سفید.
اعمال مجموعه قوانین Landlock. بدون آن، سایر دستورهای Landlock اثری نخواهند داشت.
ایجاد یک مجموعه قوانین Landlock (اگر از قبل وجود نداشته باشد) و افزودن قاعده دسترسی خواندن برای path.
ایجاد یک مجموعه قوانین Landlock (اگر از قبل وجود نداشته باشد) و افزودن قاعده دسترسی نوشتن برای path.
ایجاد یک مجموعه قوانین Landlock (اگر از قبل وجود نداشته باشد) و افزودن قاعده‌ای که اجازه ایجاد لوله‌های نام‌گذاری‌شده (FIFOs) و سوکت‌های دامنه یونیکس را در زیر مسیر داده‌شده می‌دهد.
ایجاد یک مجموعه قوانین Landlock (اگر از قبل وجود نداشته باشد) و افزودن قاعده‌ای که اجازه ایجاد دستگاه‌های بلوکی و دستگاه‌های کاراکتری را در زیر مسیر داده‌شده می‌دهد.
ایجاد یک مجموعه قوانین Landlock (اگر از قبل وجود نداشته باشد) و افزودن قاعده مجوز اجرا برای path.
نصب یک فیلتر seccomp برای مسدود کردن تلاش‌ها به منظور ایجاد نگاشت‌های حافظه‌ای که هم‌زمان قابل نوشتن و قابل اجرا باشند، تغییر نگاشت‌ها به حالت قابل اجرا یا ایجاد حافظه مشترک قابل اجرا.
تنظیم فلگ prctl مقدار NO_NEW_PRIVS. این کار تضمین می‌کند که فرآیندهای فرزند نتوانند با استفاده از execve(2) امتیازات جدیدی کسب کنند؛ به طور خاص، این بدان معناست که فراخوانی یک فایل باینری suid (یا فایلی دارای قابلیت‌های فایلی) منجر به افزایش امتیاز نخواهد شد.
غیرفعال کردن چاپگرها.
استفاده از این دستور برای فعال‌سازی یک فضای‌نام کاربری (User namespace). این فضای‌نام تنها یک کاربر دارد که همان کاربر جاری است. هیچ حساب root (شناسه 0) در فضای‌نام تعریف نشده است.
فعال کردن فیلتر پروتکل. این فیلتر بر اساس seccomp عمل کرده و نخستین آرگومان فراخوان سیستمی socket را بررسی می‌کند. مقادیر شناخته‌شده: unix، inet، inet6، netlink، packet و bluetooth. چندین دستور protocol مجاز است و اثر آن‌ها با هم جمع می‌شود.
نصب یک فیلتر seccomp که تلاش‌ها برای ایجاد فضاهای‌نام جدید cgroup، ipc، net، mount، pid، time، user یا uts را مسدود می‌کند.
نصب یک فیلتر seccomp که تلاش‌ها برای ایجاد هر یک از فضاهای‌نام مشخص‌شده را مسدود می‌نماید.
فعال کردن فیلتر seccomp و قرار دادن فراخوان‌های سیستمی موجود در فهرست پیش‌فرض در لیست سیاه. برای جزئیات بیشتر به man 1 firejail مراجعه کنید.
فعال کردن فیلتر seccomp و قرار دادن فراخوان‌های سیستمی موجود در فهرست پیش‌فرض در لیست سیاه برای فراخوان‌های سیستمی ۳۲ بیتی روی سیستم با معماری ۶۴ بیتی.
seccomp syscall,syscall,syscall
فعال کردن فیلتر seccomp و قرار دادن فراخوان‌های سیستمی موجود در فهرست در لیست سیاه علاوه بر فیلتر seccomp پیش‌فرض.
seccomp.32 syscall,syscall,syscall
فعال کردن فیلتر seccomp و قرار دادن فراخوان‌های سیستمی موجود در فهرست در لیست سیاه علاوه بر فیلتر seccomp پیش‌فرض برای فراخوان‌های سیستمی ۳۲ بیتی روی سیستم با معماری ۶۴ بیتی.
فعال کردن فیلتر seccomp و فیلتر کردن معماری‌های فراخوان سیستمی به گونه‌ای که تنها معماری بومی مجاز باشد.
فعال کردن فیلتر seccomp و قرار دادن فراخوان‌های سیستمی موجود در فهرست در لیست سیاه.
فعال کردن فیلتر seccomp و قرار دادن فراخوان‌های سیستمی موجود در فهرست در لیست سیاه برای فراخوان‌های سیستمی ۳۲ بیتی روی سیستم با معماری ۶۴ بیتی.
فعال کردن فیلتر seccomp و قرار دادن فراخوان‌های سیستمی موجود در فهرست در لیست سفید.
فعال کردن فیلتر seccomp و قرار دادن فراخوان‌های سیستمی موجود در فهرست در لیست سفید برای فراخوان‌های سیستمی ۳۲ بیتی روی سیستم با معماری ۶۴ بیتی.
seccomp-error-action kill | log | ERRNO
بازگرداندن یک خطای متفاوت به جای EPERM به فرآیند، خاتمه دادن به فرآیند (kill) هنگام تلاش برای فراخوانی یک فراخوان سیستمی مسدودشده، یا مجاز دانستن ولی ثبت کردن (log) این تلاش.
فعال کردن ایزوله‌سازی 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 برای x11 xephyr. این دستور باید در فایل نمایه قبل از دستور x11 xephyr گنجانده شود.

مثال:

xephyr-extra-params -grayscale
x11 xephyr

تنظیم اندازه صفحه برای x11 xephyr. این دستور باید در فایل نمایه قبل از دستور x11 xephyr گنجانده شود.

مثال:

xephyr-screen 640x480
x11 xephyr

دسترسی به سوکت‌های یونیکس نشست (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 سیستم. فیلترها را می‌توان با دستورهای dbus-system.talk و dbus-system.own مشخص کرد.
غیرفعال کردن دسترسی به DBus سیستم. پس از غیرفعال شدن دسترسی، نمی‌توان آن را به حالت فیلترشده تسهیل کرد.
اجازه به برنامه برای دریافت سیگنال‌های پخشی (Broadcast) از رابط org.freedesktop.Notifications مربوط به شیء ارائه‌شده در مسیر /org/freedesktop/Notifications توسط کلاینت مالک نام گذرگاه org.freedesktop.Notifications روی DBus سیستم.
اجازه به برنامه برای فراخوانی متدهای رابط org.freedesktop.Notifications مربوط به شیء ارائه‌شده در مسیر /org/freedesktop/Notifications توسط کلاینت مالک نام گذرگاه org.freedesktop.Notifications روی DBus سیستم.
اجازه به برنامه برای در اختیار گرفتن مالکیت نام org.gnome.ghex و تمامی نام‌های زیرمجموعه آن روی DBus سیستم.
اجازه به برنامه برای دیدن اما نه ارتباط با نام org.freedesktop.Notifications روی DBus سیستم.
اجازه به برنامه برای ارتباط با نام org.freedesktop.Notifications روی DBus سیستم.
فعال کردن دسترسی فیلترشده به DBus نشست. فیلترها را می‌توان با دستورهای dbus-user.talk و dbus-user.own مشخص کرد.
غیرفعال کردن دسترسی به DBus نشست. پس از غیرفعال شدن دسترسی، نمی‌توان آن را به حالت فیلترشده تسهیل کرد.
اجازه به برنامه برای دریافت سیگنال‌های پخشی از رابط org.freedesktop.Notifications مربوط به شیء ارائه‌شده در مسیر /org/freedesktop/Notifications توسط کلاینت مالک نام گذرگاه org.freedesktop.Notifications روی DBus نشست.
اجازه به برنامه برای فراخوانی متدهای رابط org.freedesktop.Notifications مربوط به شیء ارائه‌شده در مسیر /org/freedesktop/Notifications توسط کلاینت مالک نام گذرگاه org.freedesktop.Notifications روی DBus نشست.
اجازه به برنامه برای در اختیار گرفتن مالکیت نام org.gnome.ghex و تمامی نام‌های زیرمجموعه آن روی DBus نشست.
اجازه به برنامه برای دیدن اما نه ارتباط با نام org.freedesktop.Notifications روی DBus نشست.
اجازه به برنامه برای ارتباط با نام org.freedesktop.Notifications روی DBus نشست.
غیرفعال کردن دسترسی 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
[...]

این مدخل‌های نمایه محدودیت‌های مربوط به منابع سیستم (rlimits) را برای فرآیندهای درون جعبه‌شنی تعریف می‌کنند. این محدودیت‌ها را می‌توان در داخل جعبه‌شنی با استفاده از دستور استاندارد ulimit تغییر داد. دستور cpu هسته‌های پردازنده موجود را پیکربندی می‌کند.

مثال‌ها:

استفاده تنها از هسته‌های پردازنده 0، 1 و 2.
تنظیم مقدار nice برابر با -5 برای تمام فرآیندهای در حال اجرا درون جعبه‌شنی.
تنظیم حداکثر اندازه حافظه مجازی فرآیند به 123456789012 بایت.
تنظیم حداکثر زمان پردازنده به ثانیه.
تنظیم حداکثر اندازه فایلی که می‌تواند توسط یک فرآیند ایجاد شود به 1024 بایت.
تنظیم حداکثر تعداد فرآیندهایی که می‌توان برای شناسه واقعی کاربر فرآیند فراخواننده ایجاد کرد به 1000.
تنظیم حداکثر تعداد فایل‌هایی که می‌توان توسط یک فرآیند باز کرد به 500.
تنظیم حداکثر تعداد سیگنال‌های معلقی که می‌توان برای شناسه واقعی کاربر فرآیند فراخواننده ایجاد کرد به 200.
خاتمه دادن خودکار به جعبه‌شنی پس از سپری شدن زمان مشخص‌شده. زمان در قالب ساعت/دقیقه/ثانیه تعیین می‌شود.

تمامی دایرکتوری‌های خانه کاربران در داخل جعبه‌شنی قابل مشاهده خواهند بود. به طور پیش‌فرض، تنها دایرکتوری خانه کاربر جاری قابل مشاهده است.
تنظیم متغیر محیطی. مثال‌ها:

env LD_LIBRARY_PATH=/opt/test/lib
env CFLAGS="-W -Wall -Werror"

فعال کردن یک فضای‌نام IPC جدید در صورتی که جعبه‌شنی به عنوان کاربر معمولی آغاز شده باشد. فضای‌نام IPC به طور پیش‌فرض برای جعبه‌های شنی اجرا شده توسط root فعال است.

نکته: این دستور تنها بر روی منابع IPC که در ipc_namespaces(7) ذکر شده‌اند اثر می‌گذارد. بر سایر منابع IPC، از جمله سوکت‌های یونیکس (نگاه کنید به unix(7)) اثری ندارد.

به ارث بردن توصیف‌گرهای فایل باز در داخل جعبه‌شنی.
تنظیم نام جعبه‌شنی. مثال:

name browser

غیرفعال کردن شتاب‌دهی سخت‌افزاری سه‌بعدی (3D).
نگاه کنید به keep-config-pulse.
غیرفعال کردن دستگاه‌های DVD و CD صوتی.
غیرفعال کردن گروه‌های کاربری تکمیلی (Supplementary user groups).
غیرفعال کردن دستگاه‌های ورودی.
غیرفعال کردن سیستم صوتی.
برای سازگاری نادیده گرفته می‌شود.
دستگاه‌های TPM اکنون به طور پیش‌فرض مسدود هستند، نگاه کنید به keep-dev-tpm.
غیرفعال کردن دستگاه‌های تلویزیونی DVB (پخش ویدیوی دیجیتال).
غیرفعال کردن دستگاه‌های U2F.
غیرفعال کردن دستگاه‌های ضبط ویدیو.
جعل شماره شناسه در فایل /etc/machine-id - یک شناسه تصادفی جدید در داخل جعبه‌شنی تولید می‌شود.

قابلیت‌های شبکه موجود در فایل‌های نمایه.

استفاده از این آدرس به عنوان دروازه پیش‌فرض (Default gateway) در فضای‌نام شبکه جدید.
تنظیم یک سرور DNS برای جعبه‌شنی. حداکثر تا سه سرور DNS قابل تعریف است.
تنظیم نام میزبان (Hostname) برای جعبه‌شنی.
تنظیم نام میزبان جعبه‌شنی به یک مقدار تصادفی تولیدشده توسط firejail.
استفاده از file به عنوان /etc/hosts.
اختصاص آدرس‌های IP به آخرین رابط شبکه تعریف‌شده با یک دستور net. یک دروازه پیش‌فرض به صورت پیش‌فرض اختصاص می‌یابد.

مثال:
net eth0
ip 10.10.20.56

دریافت یک آدرس IP و دروازه پیش‌فرض برای آخرین رابط تعریف‌شده توسط دستور net، و همچنین تنظیم سرورهای DNS بر اساس پاسخ DHCP. این دستور مستلزم نصب بودن کلاینت DHCP به نام ISC dhclient است و آن را به طور خودکار درون جعبه‌شنی اجرا خواهد کرد.

مثال:
net br0
ip dhcp

این دستور در صورتی که سرور DHCP برای پیکربندی سرورهای DNS کلاینت‌ها تنظیم شده باشد، نباید هم‌زمان با دستور dns به کار رود؛ زیرا سرورهای DNS تعیین‌شده به صورت دستی بازنویسی خواهند شد.

کلاینت DHCP هنگام پایان کار جعبه‌شنی اجاره DHCP را آزاد نمی‌کند (Release). اگر سرور DHCP شما نیاز دارد که اجاره‌ها به طور صریح آزاد شوند، اجرای یک کلاینت DHCP و آزادسازی دستی اجاره را در ترکیب با دستور net none در نظر بگیرید.

هیچ آدرس IP و هیچ دروازه پیش‌فرضی برای آخرین رابط تعریف‌شده توسط دستور net پیکربندی نمی‌شود. از این گزینه در صورتی استفاده کنید که قصد دارید یک کلاینت خارجی DHCP را درون جعبه‌شنی اجرا نمایید.

مثال:
net eth0
ip none

اختصاص آدرس‌های IPv6 به آخرین رابط شبکه تعریف‌شده توسط یک دستور net.

مثال:
net eth0
ip6 2001:0db8:0:f101::1/64

دریافت یک آدرس IPv6 و دروازه پیش‌فرض برای آخرین رابط تعریف‌شده توسط دستور net، و همچنین تنظیم سرورهای DNS بر اساس پاسخ DHCP. این دستور مستلزم نصب بودن کلاینت DHCP به نام ISC dhclient است و آن را به طور خودکار درون جعبه‌شنی اجرا خواهد کرد.

مثال:
net br0
ip6 dhcp

این دستور در صورتی که سرور DHCP برای پیکربندی سرورهای DNS کلاینت‌ها تنظیم شده باشد، نباید هم‌زمان با دستور dns استفاده شود؛ زیرا سرورهای DNS تعیین‌شده به صورت دستی بازنویسی خواهند شد.

کلاینت DHCP هنگام پایان کار جعبه‌شنی اجاره DHCP را آزاد نخواهد کرد. اگر سرور DHCP شما نیازمند آزادسازی صریح اجاره‌ها است، اجرای یک کلاینت DHCP و آزادسازی دستی اجاره را در نظر بگیرید.

اختصاص یک آدرس IP در محدوده ارائه‌شده به آخرین رابط شبکه تعریف‌شده توسط دستور net. یک دروازه پیش‌فرض به طور پیش‌فرض اختصاص می‌یابد.

مثال:

net eth0
iprange 192.168.1.150,192.168.1.160

اختصاص آدرس MAC به آخرین رابط شبکه تعریف‌شده توسط دستور net.
اختصاص مقدار MTU به آخرین رابط شبکه تعریف‌شده توسط دستور net.
فعال کردن یک فضای‌نام شبکه جدید و اتصال آن به این رابط پل (Bridge). مگر در صورت تعیین با گزینه‌های --ip و --defaultgw، یک آدرس IP و یک دروازه پیش‌فرض به طور خودکار به جعبه‌شنی اختصاص داده می‌شود. آدرس IP پیش از تخصیص با استفاده از ARP بررسی می‌شود. آدرس پیکربندی‌شده به عنوان دروازه پیش‌فرض، همان آدرس IP دستگاه پل است. حداکثر تا چهار دستگاه پل --net قابل تعریف است. ترکیب دستگاه‌های پل و macvlan مجاز است.
فعال کردن یک فضای‌نام شبکه جدید و اتصال آن به این رابط اترنت با استفاده از درایور استاندارد macvlan یا ipvlan لینوکس. مگر در صورت تعیین با گزینه‌های --ip و --defaultgw، یک آدرس IP و یک دروازه پیش‌فرض به طور خودکار به جعبه‌شنی اختصاص داده می‌شود. آدرس IP پیش از تخصیص با استفاده از ARP تأیید می‌شود. آدرس پیکربندی‌شده به عنوان دروازه پیش‌فرض، همان دروازه پیش‌فرض میزبان است. حداکثر تا چهار دستگاه --net قابل تعریف است. ترکیب دستگاه‌های پل و macvlan مجاز است.
فعال کردن یک فضای‌نام شبکه جدید و نامتصل. تنها رابط موجود در فضای‌نام جدید، یک رابط لوپ‌بک جدید (lo) است. از این گزینه برای جلوگیری از دسترسی شبکه برنامه‌هایی استفاده کنید که واقعاً نیازی به دسترسی شبکه ندارند.
فعال کردن یک فضای‌نام شبکه جدید و اتصال آن به این رابط tap اترنت با استفاده از درایور استاندارد macvlan لینوکس. اگر رابط tap پیکربندی نشده باشد، جعبه‌شنی تلاشی برای پیکربندی رابط در داخل جعبه‌شنی نخواهد کرد. لطفاً برای مشخص کردن پیکربندی از ip، netmask و defaultgw استفاده کنید.
اگر یک فضای‌نام شبکه جدید ایجاد شود، فیلتر شبکه پیش‌فرض فعال می‌شود.
netfilter filename
اگر یک فضای‌نام شبکه جدید ایجاد شود، فیلتر شبکه موجود در filename فعال می‌شود.
تولید یک فیلتر شبکه سفارشی و فعال‌سازی آن.
از این گزینه زمانی استفاده کنید که می‌خواهید یک آدرس IP در یک فضای‌نام جدید اختصاص دهید و رابط والد مشخص‌شده توسط --net پیکربندی نشده است. یک آدرس IP و یک آدرس دروازه پیش‌فرض نیز باید افزوده شوند.
اجرای برنامه در یک فضای‌نام شبکه نام‌گذاری‌شده و ماندگار. این موارد را می‌توان با استفاده از "ip netns" ایجاد و پیکربندی کرد.
استفاده از این نام برای رابط متصل به پل برای دستورهای --net=bridge_interface، به جای نام پیش‌فرض.

همیشه با وضعیت خروج اولین فرزند از firejail خارج شو. رفتار پیش‌فرض استفاده از وضعیت خروج آخرین فرزند برای خروج است که می‌تواند غیرقطعی باشد.
همیشه پس از پایان اولین فرزند، جعبه‌شنی را خاموش کن. رفتار پیش‌فرض این است که جعبه‌شنی تا زمانی که حاوی فرآیندهای در حال اجرا باشد زنده نگه داشته شود.
پیوستن به جعبه‌شنی مشخص‌شده با نام یا شروع یک مورد جدید. مشابه با دستور "firejail --join=sandboxname" در صورتی که جعبه‌شنی با نام مشخص‌شده وجود داشته باشد، در غیر این صورت مشابه با "name sandboxname".

/etc/firejail/appname.profile
پیکربندی سراسری Firejail که عمدتاً متشکل از نمایه‌های مربوط به هر برنامه‌ای است که به طور پیش‌فرض پشتیبانی می‌شود.
$HOME/.config/firejail/appname.profile
نمایه‌های کاربری برنامه‌ها، که نسبت به نمایه‌های سراسری اولویت دارند.
/usr/share/doc/firejail/profile.template
قالب برای ساخت نمایه‌های جدید.
/usr/share/doc/firejail/redirect_alias-profile.template
قالب برای ایجاد نمایه‌های تغییر مسیر/نام مستعار.

نرم‌افزار Firejail یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط مجوز عمومی همگانی گنو (GNU General Public License) همان‌طور که توسط بنیاد نرم‌افزار آزاد منتشر شده است، چه نسخه ۲ مجوز و چه (به انتخاب خودتان) هر نسخه پس از آن، بازتوزیع کرده و/یا تغییر دهید.

صفحه اصلی: https://firejail.wordpress.com

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