| FIREJAIL(1) | firejail man page | FIREJAIL(1) |
نام (NAME)
Firejail - برنامه سندباکس فضاهای نام لینوکس (Linux namespaces)
خلاصه دستور (SYNOPSIS)
شروع یک سندباکس:
شروع یک برنامه AppImage:
انتقال فایل از یک سندباکس موجود:
شکلدهی ترافیک شبکه برای یک سندباکس موجود:
پایش و مانیتورینگ:
متفرقه:
توضیحات (DESCRIPTION)
دستور Firejail یک برنامه سندباکس دارای دسترسی SUID است که خطر رخنه و نفوذهای امنیتی را از طریق محدود ساختن محیط اجرای برنامههای غیرقابلاعتماد با استفاده از فضاهای نام لینوکس (namespaces)، مکانیزم seccomp-bpf و قابلیتهای لینوکس (Linux capabilities) کاهش میدهد. این ابزار به یک فرآیند و تمام فرزندان آن امکان میدهد تا نمایی اختصاصی از منابع اشتراکی سراسری هسته مانند پشته شبکه (network stack)، جدول فرآیندها (process table) و جدول سوارکردن (mount table) داشته باشند. ابزار Firejail میتواند در محیطهای SELinux یا AppArmor به کار گرفته شود و با گروههای کنترلی لینوکس (Linux Control Groups) نیز یکپارچه شده است.
این نرمافزار به زبان C و تقریباً بدون هیچ وابستگی جانبی نوشته شده است و روی هر رایانه لینوکسی با نسخه هسته 3.x یا جدیدتر اجرا میشود. این ابزار قادر است انواع مختلف فرآیندها را در سندباکس قرار دهد: سرورها، برنامههای گرافیکی و حتی نشستهای ورود کاربران.
دستور Firejail به کاربر اجازه میدهد تا امنیت برنامهها را با استفاده از پروفایلهای امنیتی مدیریت کند. هر پروفایل مجموعهای از مجوزها را برای یک برنامه خاص یا گروهی از برنامهها تعریف میکند. این نرمافزار شامل پروفایلهای امنیتی برای شماری از برنامههای پرکاربرد لینوکس مانند Mozilla Firefox، Chromium، VLC، Transmission و غیره است.
در حال حاضر Firejail به صورت یک باینری SUID پیادهسازی شده است؛ این بدان معناست که اگر یک حساب کاربری مخرب یا نفوذیافته موفق شود از نقصی در Firejail سوءاستفاده کند، این امر میتواند در نهایت به ارتقای دسترسی به کاربر ریشه (root) منجر شود. برای کاهش این ریسک، توصیه میشود فقط به کاربران مورد اعتماد اجازه اجرای firejail داده شود (برای جزئیات چگونگی دستیابی به این هدف، راهنمای firejail-users(5) را ببینید). برای جزئیات بیشتر درباره توازن میان امنیت و سهولت کاربری در Firejail، به نشانی زیر مراجعه کنید: #4601.
فناوریهای جایگزین سندباکس مانند Snap (ببینید https://snapcraft.io) و Flatpak (ببینید https://flatpak.org) پشتیبانی نمیشوند. بستههای Snap و Flatpak ابزارهای مدیریتی بومی خود را دارند و هنگام قرار گرفتن در سندباکس با Firejail کار نخواهند کرد.
نحوه استفاده (USAGE)
بدون مشخص کردن هیچ گزینهای، سندباکس از یک سیستم فایل ساختهشده در یک فضای نام سوارکردن (mount namespace) جدید، و فضاهای نام جدید PID و UTS تشکیل میشود. فضاهای نام IPC، شبکه و کاربر را میتوان با استفاده از گزینههای خط فرمان اضافه کرد. سیستم فایل پیشفرض Firejail بر پایه سیستم فایل میزبان بنا شده است که دایرکتوریهای اصلی سیستم در آن به صورت فقطخواندنی سوار میشوند. این دایرکتوریها عبارتند از /etc، /var، /usr، /bin، /sbin، /lib، /lib32، /libx32 و /lib64. فقط دایرکتوریهای /home و /tmp قابلنوشتن هستند.
هنگام اجرا، Firejail ابتدا در مسیر ~/.config/firejail/ به دنبال پروفایل میگردد و در صورت نیافتن، مسیر /etc/firejail/ را جستجو میکند. اگر پروفایل مناسبی پیدا نشود، Firejail از یک پروفایل پیشفرض استفاده خواهد کرد. پروفایل پیشفرض بسیار محدودکننده است. در صورتی که برنامه کار نکرد، از گزینه --noprofile برای غیرفعال کردن آن استفاده کنید.
اگر هیچ آرگومان برنامهای مشخص نشود، Firejail شل ترجیحی کاربر را اجرا میکند. مثالها:
$ firejail [OPTIONS] # اجرای برنامه مشخصشده در متغیر $SHELL، معمولاً /bin/bash
$ firejail [OPTIONS] /usr/bin/firefox # اجرای Mozilla Firefox
# sudo firejail [OPTIONS] /etc/init.d/nginx start
هنگامی که یک گزینه چندین بار مشخص شود (چه در یک پروفایل، چه در خط فرمان، یا هر دو) یا با یک گزینه مرتبط تداخل داشته باشد، اولویت و رفتار مربوطه مختص همان گزینه بوده و معمولاً در بخش گزینهها (OPTIONS) در ادامه مستند شده است. توجه داشته باشید که گزینهای که در یک پروفایل مشخص شده است را معمولاً میتوان در خط فرمان با استفاده از --ignore لغو و غیرفعال کرد.
گزینهها (OPTIONS)
- --پایان گزینهها را اعلام کرده و پردازش گزینههای بعدی را غیرفعال میکند.
- --llow-bwrap
- بهطور
پیشفرض، firejail
فایل
اجرایی /usr/bin/bwrap
را با
برنامهای
که هیچ کاری
انجام
نمیدهد
جایگزین
میکند.
جایگزین ما
فقط هدف bubblewrap
را اجرا
میکند و
تنها در
داخل
سندباکس firejail
قابل
مشاهده است.
از این
گزینه برای
غیرفعال
کردن این
رفتار
پیشفرض
استفاده
کنید.
مثال:
$ firejail --0profile --llow-bwrap bwrap --
firejail version 0.9.77Parent pid 44129, child pid 44130
Base filesystem installed in 0.04 ms
Child process initialized in 5.02 ms
usage: bwrap [OPTIONS...] [--] COMMAND [ARGS...]
--lp
--rsion
--rgs FD Parse NUL-separated args from FD - --llow-debuggers
- اجازه دادن
به
ابزارهایی
مانند strace و gdb
درون
سندباکس با
افزودن
فراخوانهای
سیستمی ptrace و
process_vm_readv به فهرست
سفید. این
گزینه تنها
هنگام اجرا
روی
هستههای
لینوکس
نسخه 4.8 یا
جدیدتر در
دسترس است -
یک نقص هسته
در فراخوان
سیستمی ptrace
امکان دور
زدن کامل
فیلتر seccomp را
فراهم
میسازد.
مثال:
$ firejail --allow-debuggers --profile=/etc/firejail/firefox.profile strace -f /usr/bin/firefoxهمچنین --rivate-etc
و --race را ببینید. - --llusers
- تمام
دایرکتوریهای
زیر /home درون
سندباکس
قابل
مشاهده
خواهند بود.
بهطور
پیشفرض،
فقط
دایرکتوری
خانگی
کاربر جاری
قابل
مشاهده است.
مثال:
$ firejail --llusers - --pparmor
- فعالسازی محدودسازی AppArmor با پروفایل "firejail-default". برای اطلاعات بیشتر، لطفاً بخش APPARMOR را در زیر ببینید.
- --pparmor=profile_name
- فعالسازی محدودسازی AppArmor با یک پروفایل سفارشی. توجه داشته باشید که پروفایل مورد نظر باید از قبل در هسته بارگذاری شده باشد. برای اطلاعات بیشتر، لطفاً بخش APPARMOR را در زیر ببینید.
- --pparmor.print=name|pid
- چاپ وضعیت
محدودسازی
AppArmor برای
سندباکس
مشخصشده
با نام یا
با PID.
مثال:
$ firejail --pparmor.print=browser
5074:netblue:/usr/bin/firejail /usr/bin/firefox-esr
AppArmor: firejail-default enforce - --ppimage
- اجرای یک
برنامه AppImage
(ببینید
https://appimage.org)
درون
سندباکس.
اگر
سندباکس به
عنوان یک
کاربر عادی
اجرا شود،
nonewprivs و فیلتر
پیشفرض
قابلیتها
فعال
میشوند.
هنگام
اجرای appimageها
گزینههای
private-bin و private-lib
بهطور
پیشفرض
غیرفعال
هستند.
مثال:
$ firejail --ppimage --rofile=krita
krita-3.0-x86_64.appimage
$ firejail --quiet --ppimage --rivate
--rofile=krita
krita-3.0-x86_64.appimage
$ firejail --ppimage --0t=none --1 --rofile=krita
krita-3.0-x86_64.appimageنکته: هنگام استفاده همزمان از هر دو گزینه --ppimage و --rofile،
توصیه میشود همیشه اولی پیش از دومی مشخص شود تا هرگونه شرط ?HAS_APPIMAGE درون پروفایل با مقدار درست ارزیابی شود (بخش ?CONDITIONAL در firejail-profile(5) را ببینید). - --me|pid
- تنظیم محدودیتهای پهنای باند برای سندباکس مشخصشده با نام یا PID، برای جزئیات بیشتر بخش TRAFFIC SHAPING را ببینید.
- --lename1,filename2
- سوار کردن
اتصالی (Mount-bind)
فایل filename1 بر
روی filename2. این
گزینه تنها
هنگام اجرا
به عنوان
کاربر ریشه
در دسترس
است.
مثال:
# firejail --g/etc/passwd,/etc/passwd - --ist=dirname_or_filename
- افزودن
دایرکتوری
یا فایل به
فهرست سیاه.
این کار
باعث
میشود
فایل یا
دایرکتوری
کاملاً
غیرقابلدسترس
گردد. سایر
فایلها و
دایرکتوریها
دستنخورده
باقی
میمانند.
فایل یا
دایرکتوری
قرارگرفته
در فهرست
سیاه
همچنان روی
سیستم فایل
قابل
مشاهده
است، حتی
اگر
دسترسیناپذیر
باشد.
مدیریت پیوندهای نمادین: افزودن مسیری که یک پیوند نمادین است به فهرست سیاه، مسیری را نیز که به آن اشاره میکند در فهرست سیاه قرار خواهد داد. برای نمونه، اگر ~/foo در فهرست سیاه قرار گیرد و به /bar اشاره داشته باشد، /bar نیز در فهرست سیاه قرار میگیرد.
تطبیق الگوهای فایلی (Globbing) پشتیبانی میشود، برای جزئیات بیشتر بخش FILE GLOBBING را ببینید.
مثال:
$ firejail --ist=/sbin --ist=/usr/sbin
$ firejail --ist=~/.mozilla
$ firejail --ist="/home/username/My Virtual Machines" - --
- این دستور
یک پروفایل
بر پایه
فهرست سفید
میسازد.
پروفایل
روی صفحه
نمایش داده
میشود.
برنامه در
یک سندباکس
بسیار
منعطف اجرا
میشود که
تنها
گزینههای
--aps.drop=all و --ccomp=!chroot روی
آن اعمال
شده است.
برنامههایی
که
امتیازات
کاربر را
ارتقا
میدهند
پشتیبانی
نمیشوند.
نکته: این گزینه برای اشکالزدایی و توسعه پروفایل طراحی شده است. پروفایل تولیدشده ممکن است ناقص، ناکارآمد و فاقد امنیت لازم باشد. اگر میخواهید ساخت یک پروفایل جدید را امتحان کنید، فایل CONTRIBUTING.md را ببینید.
مثال:
$ firejail --sr/bin/vlc ~/Videos/test.mp4
$ firejail --bsurface.AppImage - --
- این دستور
یک پروفایل
بر پایه
فهرست سفید
میسازد و
آن را در profile-file
ذخیره
میکند.
برنامه در
یک سندباکس
بسیار
منعطف اجرا
میشود که
تنها
گزینههای
--aps.drop=all و --ccomp=!chroot روی
آن اعمال
شده است.
برنامههایی
که
امتیازات
کاربر را
ارتقا
میدهند
پشتیبانی
نمیشوند.
نکته: این گزینه برای اشکالزدایی و توسعه پروفایل طراحی شده است. پروفایل تولیدشده ممکن است ناقص، ناکارآمد و فاقد امنیت لازم باشد. اگر میخواهید ساخت یک پروفایل جدید را امتحان کنید، فایل CONTRIBUTING.md را ببینید.
مثال:
$ firejail --sr/bin/vlc ~/Videos/test.mp4
$ firejail --bsurface.profile --ppimage ~/Downloads/Subsurface.AppImage - -c
- گزینه سازگاری با شل لاگین. این گزینه توسط برخی برنامههای ورود هنگام اجرای شل لاگین به کار میرود، مانند مواقعی که firejail به عنوان شل لاگین محدودشده استفاده میشود. این گزینه در حال حاضر تاثیری در نحوه اجرای firejail ایجاد نمیکند.
- --aps
- قابلیتهای
لینوکس (Linux capabilities)
یکی از
امکانات
هسته است که
برای تفکیک
امتیازات
کاربر ریشه
به
مجموعهای
از
امتیازات
مجزا طراحی
شده است.
این
امتیازات
میتوانند
به طور
مستقل فعال
یا غیرفعال
شوند، و
بدین ترتیب
آنچه را که
یک فرآیند
در حال اجرا
با دسترسی
ریشه
میتواند
در سیستم
انجام دهد
محدود
سازند. برای
جزئیات
بیشتر به capabilities(7)
مراجعه
فرمایید.
بهطور پیشفرض، برنامههای ریشه با تمامی قابلیتهای فعال اجرا میشوند. گزینه --aps قابلیتهای زیر را غیرفعال میکند: CAP_SYS_MODULE, CAP_SYS_RAWIO, CAP_SYS_BOOT, CAP_SYS_NICE, CAP_SYS_TTY_CONFIG, CAP_SYSLOG, CAP_MKNOD, CAP_SYS_ADMIN. این فیلتر روی تمامی فرآیندهای آغازشده در سندباکس اعمال میگردد.
مثال:
$ sudo firejail --aps /etc/init.d/nginx start - --aps.drop=all
- حذف تمامی
قابلیتها
برای
فرآیندهای
در حال اجرا
در سندباکس.
این گزینه
برای اجرای
برنامههای
گرافیکی (GUI)
یا هر
برنامه
دیگری که به
امتیازات
ریشه نیاز
ندارد
توصیه
میشود. این
یک گزینه
ضروری برای
اجرای امن
برنامههای
غیرقابلاعتماد
نصبشده از
منابع
غیررسمی
(مانند
بازیها،
برنامههای
جاوا و
غیره) در
سندباکس
است.
مثال:
$ firejail --aps.drop=all /usr/bin/warzone2100 - --aps.drop=capability,capability,capability
- تعریف یک
فیلتر
فهرست سیاه
سفارشی
برای
قابلیتهای
لینوکس.
مثال:
$ firejail --aps.drop=net_broadcast,net_admin,net_raw - --aps.keep=capability,capability,capability
- تعریف یک
فیلتر
فهرست سفید
سفارشی
برای
قابلیتهای
لینوکس.
مثال:
$ sudo firejail --aps.keep=chown,net_bind_service,setgid,\ setuid /etc/init.d/nginx start - --aps.print=name|pid
- چاپ فیلتر
قابلیتها
برای
سندباکس
مشخصشده
با نام یا PID.
مثال:
$ firejail --0me=mygame --aps.drop=all /usr/bin/warzone2100 &
$ firejail --aps.print=mygameمثال:
$ firejail --
3272:netblue::firejail --rivate
/usr/bin/firefox
$ firejail --aps.print=3272 - --at=name|pid filename
- چاپ محتوای فایل از ظرف سندباکس، برای جزئیات بیشتر بخش FILE TRANSFER را ببینید.
- --hroot=dirname
- تغییر ریشه
(Chroot) سندباکس
به یک سیستم
فایل ریشه.
بر خلاف ظرف
سیستم فایل
معمولی،
دایرکتوریهای
سیستمی به
صورت
خواندنی-نوشتنی
سوار
میشوند.
اگر
سندباکس به
عنوان یک
کاربر عادی
اجرا شود،
nonewprivs و فیلتر
پیشفرض
قابلیتها
فعال
میشوند.
مثال:
$ firejail --hroot=/media/ubuntu /usr/bin/warzone2100جهت سوار کردن خودکار سوکتهای X11 و PulseAudio متغیرهای محیطی FIREJAIL_CHROOT_X11 و FIREJAIL_CHROOT_PULSE را تنظیم نمایید.
نکته: پشتیبانی از این دستور در firejail.config با گزینه chroot کنترل میشود.
- --pu=cpu-number,cpu-number,cpu-number
- تنظیم
وابستگی
پردازنده (CPU
affinity).
مثال:
$ firejail --pu=0,1 /usr/bin/handbrake - --pu.print=name|pid
- چاپ
هستههای
پردازنده
مورد
استفاده
توسط
سندباکس
مشخصشده
با نام یا PID.
مثال:
$ firejail --0me=mygame --aps.drop=all /usr/bin/warzone2100 &
$ firejail --pu.print=mygameمثال:
$ firejail --
3272:netblue::firejail --rivate
/usr/bin/firefox
$ firejail --pu.print=3272 - --bus-log=file
- مشخص کردن
مسیر فایل
لاگ DBus.
در صورتی که هر دو گزینه --dbus-system.log و --dbus-user.log مشخص شده باشند، فایل لاگ شامل رویدادهای مربوط به هر دو گذرگاه سیستم و نشست خواهد بود. اگر مسیری برای فایل لاگ داده نشود، لاگها به جای آن در خروجی استاندارد نوشته میشوند.
مثال:
$ firejail --bus-system=filter --bus-system.log \
--bus-log=dbus.txt - --bus-system=filter|none
- تنظیم
خطمشی
سندباکس DBus
سیستمی.
خطمشی filter فیلتر DBus سیستمی را فعال میکند. این گزینه نیازمند نصب ابزار کمکی xdg-dbus-proxy است. مجوزهای نامهای شناختهشده را میتوان با گزینههای --dbus-system.talk و --dbus-system.own تعیین کرد.
خطمشی none دسترسی به DBus سیستم را غیرفعال میسازد.
تنها سوکت یونیکس معمولی DBus سیستم توسط این گزینه مدیریت میشود. برای غیرفعال کردن سوکتهای انتزاعی (و اجبار برنامهها به استفاده از سوکت فیلترشده یونیکس) باید با استفاده از دستور --0t یک فضای نام جدید شبکه درخواست کنید. گزینه دیگر حذف unix از مجموعه --rotocol
است.مثال:
$ firejail --bus-system=none - --bus-system.broadcast=name=[member][@path]
- به برنامه
اجازه
میدهد تا
سیگنالهای
پخشی (broadcast) را
از عضو رابط
مشخصشده
در مسیر شیء
مشخصشده
که توسط نام
گذرگاهِ
مشخصشده
روی DBus سیستم
عرضه شده
است،
دریافت کند.
نام
میتواند
پسوند .*
داشته باشد
تا با تمامی
نامهای
زیرمجموعه
آن، شامل
خودش،
مطابقت
یابد. عضو
رابط
میتواند
دارای .*
باشد تا با
تمام اعضای
یک رابط
تطبیق
یابد، یا *
باشد تا با
همه
رابطها
مطابقت کند.
مسیر
میتواند
پسوند /*
داشته باشد
تا کلیه
اشیاء
زیرمجموعه
آن، شامل
خودش را در
بر گیرد.
حذف عضو
رابط یا
مسیر شیء به
ترتیب با
کلیه اعضا و
مسیرهای
شیء مطابقت
خواهد داشت.
مثال:
$ firejail --bus-system=filter --bus-system.broadcast=\
org.freedesktop.Notifications=\
org.freedesktop.Notifications.*@/org/freedesktop/Notifications - --bus-system.call=name=[member][@path]
- به برنامه
اجازه
میدهد تا
عضو رابط
مشخصشده
را در مسیر
شیء
مشخصشده
که توسط نام
گذرگاه
مشخصشده
روی DBus سیستم
عرضه شده
است،
فراخوانی
کند. نام
میتواند
پسوند .*
داشته باشد
تا با تمام
نامهای
زیرمجموعه
آن، از جمله
خودش،
مطابقت
یابد. عضو
رابط
میتواند
دارای .*
باشد تا با
تمامی
اعضای یک
رابط
مطابقت
کند، یا *
باشد تا با
تمام
رابطها
تطبیق یابد.
مسیر
میتواند
پسوند /*
داشته باشد
تا کلیه
اشیاء
زیرمجموعه
آن، شامل
خودش را
نشان دهد.
حذف عضو
رابط یا
مسیر شیء به
ترتیب با
تمام اعضا و
مسیرهای
شیء مطابقت
خواهد داشت.
مثال:
$ firejail --bus-system=filter --bus-system.call=\
org.freedesktop.Notifications=\
org.freedesktop.Notifications.*@/org/freedesktop/Notifications - --bus-system.log
- روشن کردن
لاگگیری DBus
برای DBus
سیستم. این
گزینه به
--dbus-system=filter نیاز
دارد.
مثال:
$ firejail --bus-system=filter --bus-system.log - --bus-system.own=name
- به برنامه
اجازه
میدهد تا
مالکیت نام
شناختهشده
مشخصشده
را روی DBus
سیستم در
اختیار
بگیرد. نام
میتواند
پسوند .*
داشته باشد
تا با کلیه
نامهای
زیر آن،
شامل خودش
مطابقت کند
(مثلاً "foo.bar.*"
با "foo.bar"، "foo.bar.baz"
و "foo.bar.baz.quux"
تطبیق
مییابد،
اما نه با
"foobar").
مثال:
$ firejail --bus-system=filter --bus-system.own=\
org.gnome.ghex.* - --bus-system.see=name
- به برنامه
امکان
میدهد تا
نام
شناختهشده
مشخصشده
روی DBus سیستم
را مشاهده
کند، اما
قادر به
برقراری
ارتباط با
آن نباشد.
نام
میتواند
پسوند .*
داشته باشد
تا با تمام
نامهای
زیر آن،
شامل خودش
تطبیق یابد
(مثلاً "foo.bar.*"
با "foo.bar"، "foo.bar.baz"
و "foo.bar.baz.quux"
تطبیق
مییابد،
اما نه با
"foobar").
مثال:
$ firejail --bus-system=filter --bus-system.see=\
org.freedesktop.Notifications - --bus-system.talk=name
- به برنامه
اجازه
میدهد با
نام
شناختهشده
مشخصشده
روی DBus سیستم
ارتباط
برقرار کند.
نام
میتواند
پسوند .*
داشته باشد
تا با تمام
نامهای
زیر آن،
شامل خودش
مطابقت
داشته باشد
(مثلاً "foo.bar.*"
با "foo.bar"، "foo.bar.baz"
و "foo.bar.baz.quux"
مطابقت
میکند،
اما نه با
"foobar").
مثال:
$ firejail --bus-system=filter --bus-system.talk=\
org.freedesktop.Notifications - --bus-user=filter|none
- تنظیم
خطمشی
سندباکس DBus
نشست (session).
خطمشی filter فیلتر DBus نشست را فعال میکند. این گزینه نیازمند نصب ابزار کمکی xdg-dbus-proxy است. مجوزها برای نامهای شناختهشده را میتوان با گزینههای --dbus-user.talk و --dbus-user.own اضافه کرد.
خطمشی none دسترسی به DBus نشست را غیرفعال میسازد.
تنها سوکت یونیکس معمولی DBus نشست توسط این گزینه مدیریت میشود. برای غیرفعال کردن سوکتهای انتزاعی (و اجبار برنامهها به استفاده از سوکت یونیکس فیلترشده) باید با استفاده از دستور --0t یک فضای نام جدید شبکه درخواست کنید. گزینه دیگر حذف unix از مجموعه --rotocol
است.مثال:
$ firejail --bus-user=none - --bus-user.broadcast=name=[member][@path]
- به برنامه
اجازه
میدهد تا
سیگنالهای
پخشی (broadcast) را
از عضو
رابطِ
مشخصشده
در مسیر
شیءِ
مشخصشده
که توسط نام
گذرگاهِ
مشخصشده
روی DBus نشست (session)
ارائه شده
است،
دریافت کند.
نام
میتواند
پسوند .*
داشته باشد
تا با تمام
نامهای
زیرمجموعه
آن، از جمله
خودش،
مطابقت
یابد. عضو
رابط
میتواند
دارای .*
باشد تا با
تمامی
اعضای یک
رابط تطبیق
یابد، یا *
باشد تا با
تمام
رابطها
مطابقت کند.
مسیر
میتواند
پسوند /*
داشته باشد
تا کلیه
اشیاء
زیرمجموعه
آن، شامل
خودش را در
بر گیرد.
حذف عضو
رابط یا
مسیر شیء به
ترتیب با
کلیه اعضا و
مسیرهای
شیء مطابقت
خواهد داشت.
مثال:
$ firejail --bus-user=filter --bus-user.broadcast=\
org.freedesktop.Notifications=\
org.freedesktop.Notifications.*@/org/freedesktop/Notifications - --bus-user.call=name=[member][@path]
- به برنامه
اجازه
میدهد تا
عضو رابط
مشخصشده
را در مسیر
شیء
مشخصشده
که توسط نام
گذرگاه
مشخصشده
روی DBus نشست
ارائه شده
است،
فراخوانی
کند. نام
میتواند
پسوند .*
داشته باشد
تا با کلیه
نامهای
زیر آن،
شامل خودش،
مطابقت کند.
عضو رابط
میتواند
دارای .*
باشد تا با
تمامی
اعضای یک
رابط تطبیق
یابد، یا *
باشد تا با
تمام
رابطها
مطابقت کند.
مسیر
میتواند
پسوند /*
داشته باشد
تا کلیه
اشیاء زیر
آن، شامل
خودش را
نشان دهد.
حذف عضو
رابط یا
مسیر شیء به
ترتیب با
تمامی اعضا
و مسیرهای
شیء تطبیق
خواهد یافت.
مثال:
$ firejail --bus-user=filter --bus-user.call=\
org.freedesktop.Notifications=\
org.freedesktop.Notifications.*@/org/freedesktop/Notifications - --bus-user.log
- روشن کردن
لاگگیری DBus
برای DBus نشست.
این گزینه
به --dbus-user=filter نیاز
دارد.
مثال:
$ firejail --bus-user=filter --bus-user.log - --bus-user.own=name
- به برنامه
اجازه
میدهد تا
مالکیت نام
شناختهشده
مشخص را روی
DBus نشست در
اختیار
گیرد. نام
میتواند
دارای
پسوند .*
باشد تا با
تمامی
نامهای
زیرمجموعه
آن، شامل
خودش،
مطابقت
یابد (مثلاً
"foo.bar.*" با "foo.bar"،
"foo.bar.baz" و "foo.bar.baz.quux"
مطابقت
دارد، اما
با "foobar"
تطبیق
ندارد).
مثال:
$ firejail --bus-user=filter --bus-user.own=org.gnome.ghex.* - --bus-user.see=name
- به برنامه
اجازه
میدهد تا
نام
شناختهشده
مشخص را روی
DBus نشست
ببیند، اما
نتواند با
آن گفتگو
کند. نام
میتواند
پسوند .*
داشته باشد
تا با تمامی
نامهای
زیر آن،
شامل خودش
مطابقت
داشته باشد
(برای نمونه
"foo.bar.*" با "foo.bar"،
"foo.bar.baz" و "foo.bar.baz.quux"
تطبیق
دارد، اما
نه با "foobar").
مثال:
$ firejail --bus-user=filter --bus-user.see=\
org.freedesktop.Notifications - --bus-user.talk=name
- به برنامه
اجازه
میدهد با
نام
شناختهشده
مشخص روی DBus
نشست گفتگو
و ارتباط
برقرار کند.
نام
میتواند
دارای
پسوند .*
باشد تا با
کلیه
نامهای
زیر آن، از
جمله خودش،
مطابقت
یابد (مثلاً
"foo.bar.*" با "foo.bar"،
"foo.bar.baz" و "foo.bar.baz.quux"
تطبیق
دارد، ولی
نه با "foobar").
مثال:
$ firejail --bus-user=filter --bus-user.talk=\
org.freedesktop.Notifications - --ebug
- چاپ
پیامهای
اشکالزدایی
(دیباگ).
مثال:
$ firejail --ebug /usr/bin/firefox - --ebug-blacklists
- اشکالزدایی
فهرستهای
سیاه (blacklists).
مثال:
$ firejail --ebug-blacklists /usr/bin/firefox - --ebug-caps
- چاپ تمامی
قابلیتهای
شناساییشده
در بیلد
جاری
نرمافزار
Firejail و خروج.
مثال:
$ firejail --ebug-caps - --ebug-errnos
- چاپ تمامی
شمارههای
خطای
شناختهشده
در بیلد
جاری
نرمافزار
Firejail و خروج.
مثال:
$ firejail --ebug-errnos - --ebug-protocols
- چاپ تمامی
پروتکلهای
شناختهشده
در بیلد
جاری
نرمافزار
Firejail و خروج.
مثال:
$ firejail --ebug-protocols - --ebug-syscall-groups[=@group1,@group2,@all,...]
- چاپ تمامی
گروههای
فراخوان
سیستمی و
توضیحات
آنها، سپس
خروج.
گروههای seccomp را با کاما جدا کنید تا فراخوانهای سیستمی آنها در بیلد جاری نرمافزار Firejail چاپ شده و برنامه خارج شود. گروه ویژه @all میتواند جهت چاپ تمام گروههای seccomp و فراخوانهای سیستمی مربوطه به کار رود.
مثال:
$ firejail --ebug-syscall-groups
$ firejail --ebug-syscall-groups=@chown,@mount,@swap
$ firejail --ebug-syscall-groups=@all - --ebug-syscalls
- چاپ تمامی
فراخوانهای
سیستمی
شناختهشده
در بیلد
جاری
نرمافزار
Firejail و خروج.
مثال:
$ firejail --ebug-syscallsنکته: نگاشت فراخوانهای سیستمی مستقیماً از فایلهای .tbl مختص معماری در سورسهای هسته لینوکس گرفته شده است، که به فایلهای هدر در src/include تبدیل شده و درون firejail ساخته شدهاند. تنها فراخوانهای سیستمی برای معماری هدفِ ساخت و گونههای ۳۲ بیتی (در صورت کاربرد) در ساخت گنجانده شدهاند، مانند x86_64 و x86 (به ترتیب). اگر شماره یا نام یک فراخوان سیستمی در فهرست نباشد، توسط firejail شناخته نمیشود. این امر ممکن است به دلیل عدم وجود فراخوان سیستمی در فایل .tbl (مانند فراخوانهای سیستمی منسوخ)، اضافه نشدن آن به firejail تا این لحظه، یا بیش از حد قدیمی بودن بیلد فعلی firejail باشد.
فایلهای نمونه .tbl برای x86_64 و x86 در لینوکس v6.19:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/entry/syscalls/syscall_64.tbl?h=v6.19
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/x86/entry/syscalls/syscall_32.tbl?h=v6.19 - --ebug-syscalls32
- چاپ تمامی فراخوانهای سیستمی ۳۲ بیتی شناختهشده در بیلد جاری نرمافزار Firejail و خروج. این گزینه همانند --ebug-syscalls است، اما برای فراخوانهای سیستمی ۳۲ بیتی کاربرد دارد.
- --ebug-whitelists
- اشکالزدایی
فهرستهای
سفید (whitelists).
مثال:
$ firejail --ebug-whitelists /usr/bin/firefox - --efaultgw=address
- استفاده از
این آدرس به
عنوان
درگاه
پیشفرض (default gateway)
در فضای نام
جدید شبکه.
مثال:
$ firejail --0t=eth0 --efaultgw=10.10.20.1 /usr/bin/firefox - --eterministic-exit-code
- همیشه با وضعیت خروجِ نخستین فرزند، از firejail خارج شوید. رفتار پیشفرض استفاده از وضعیت خروج آخرین فرزندِ پایانیافته است که میتواند نامعین باشد.
- --eterministic-shutdown
- همیشه پس از خاتمه یافتن نخستین فرزند، سندباکس را خاموش کنید. رفتار پیشفرض این است که سندباکس تا زمانی که حاوی فرآیندهای در حال اجرا باشد زنده نگه داشته شود.
- --isable-mnt
- قرار دادن
دسترسی به
مسیرهای /mnt،
/media، /run/mount و /run/media در
فهرست سیاه.
مثال:
$ firejail --isable-mnt /usr/bin/firefox - --ns=address
- تنظیم یک
سرور DNS برای
سندباکس. تا
سه سرور DNS
قابل تعریف
است. اگر به
پیکربندی DNS
در شبکه خود
اطمینان
ندارید از
این گزینه
بهره
بگیرید.
مثال:
$ firejail --ns=8.8.8.8 --ns=8.8.4.4 /usr/bin/firefoxنکته: این ویژگی روی پیکربندیهای مبتنی بر systemd-resolved پشتیبانی نمیشود.
- --ns.print=name|pid
- چاپ
پیکربندی DNS
برای
سندباکس
مشخصشده
با نام یا
با PID.
مثال:
$ firejail --0me=mygame --aps.drop=all /usr/bin/warzone2100 &
$ firejail --ns.print=mygameمثال:
$ firejail --
3272:netblue::firejail --rivate
/usr/bin/firefox
$ firejail --ns.print=3272 - --nstrace[=name|pid]
- پایش
پرسوجوهای
DNS. سندباکس
میتواند
با نام یا pid
تعیین شود.
تنها
سندباکسهای
شبکهای
ایجادشده
با --0t
پشتیبانی
میشوند.
این گزینه
تنها هنگام
اجرای
سندباکس با
دسترسی
ریشه در
دسترس است.
بدون مشخص کردن نام/pid، فایرجیل فضای نام شبکه اصلی سیستم را پایش خواهد کرد.
مثال:
$ sudo firejail --nstrace
11:31:43 9.9.9.9 linux.com (type 1)
11:31:45 9.9.9.9 fonts.googleapis.com (type 1) NXDOMAIN
11:31:45 9.9.9.9 js.hs-scripts.com (type 1) NXDOMAIN
11:31:45 9.9.9.9 www.linux.com (type 1)
11:31:45 9.9.9.9 fonts.googleapis.com (type 1) NXDOMAIN
11:31:52 9.9.9.9 js.hs-scripts.com (type 1) NXDOMAIN
11:32:05 9.9.9.9 secure.gravatar.com (type 1)
11:32:06 9.9.9.9 secure.gravatar.com (type 1)
11:32:08 9.9.9.9 taikai.network (type 1)
11:32:08 9.9.9.9 cdn.jsdelivr.net (type 1)
11:32:08 9.9.9.9 taikai.azureedge.net (type 1)
11:32:08 9.9.9.9 www.youtube.com (type 1) - --\nv=name=value
- تنظیم
متغیر
محیطی در
سندباکس
جدید.
مثال:
$ firejail --\nv=LD_LIBRARY_PATH=/opt/test/lib - --.print=name|pid
- چاپ لاگ
سیستم فایل
برای
سندباکس
مشخصشده
با نام یا
با PID.
مثال:
$ firejail --0me=mygame --aps.drop=all /usr/bin/warzone2100 &
$ firejail --.print=mygameمثال:
$ firejail --
3272:netblue::firejail --rivate
/usr/bin/firefox
$ firejail --.print=3272 - --t=name|pid filename
- دریافت یک فایل از ظرف سندباکس، برای جزئیات بیشتر بخش FILE TRANSFER را ببینید.
- -?, --
- چاپ گزینهها و خروج.
- --
- تنظیم نام
میزبان (hostname)
سندباکس.
این گزینه با --mize ناسازگار است.
برای نامهای معتبر، بخش NAME VALIDATION را ببینید.مثال:
$ firejail --fficepc /usr/bin/firefox - --mize
- تنظیم نام
میزبان
سندباکس به
یک مقدار
تصادفی
تولیدشده
توسط firejail.
این گزینه با --مثال:
$ firejail --mize /usr/bin/firefox
نکته: تغییر نام میزبان ممکن است منجر به بروز اشکالات مرتبط با شبکه گردد (ببینید #7048) و همچنین ممکن است سبب خرابی برنامههای X11 در زمان راهاندازی به دلیل ناتوانی در احراز هویت با سرور X شود (ببینید #7062). - --
- استفاده از
file به عنوان /etc/hosts.
مثال:
$ firejail --sts /usr/bin/firefox - --icmptrace[=name|pid]
- پایش
ترافیک ICMP.
سندباکس را
میتوان با
نام یا pid
مشخص کرد.
تنها
سندباکسهای
شبکهای
ایجادشده
با --0t
پشتیبانی
میشوند.
این گزینه
تنها هنگام
اجرای
سندباکس با
دسترسی
ریشه در
دسترس است.
بدون مشخص کردن نام/pid، فایرجیل فضای نام شبکه اصلی سیستم را پایش خواهد کرد.
مثال:
$ sudo firejail --icmptrace
20:53:54 192.168.1.60 -> 142.250.65.174 - 98 bytes - Echo request/0
20:53:54 142.250.65.174 -> 192.168.1.60 - 98 bytes - Echo reply/0
20:53:55 192.168.1.60 -> 142.250.65.174 - 98 bytes - Echo request/0
20:53:55 142.250.65.174 -> 192.168.1.60 - 98 bytes - Echo reply/0
20:53:55 192.168.1.60 -> 1.1.1.1 - 154 bytes - Destination unreachable/Port unreachable - --ignore=command
- نادیده
گرفتن
دستور
مشخصشده
در فایل
پروفایل.
مثال:
$ firejail --ignore=seccomp --ignore=caps /usr/bin/firefox
$ firejail --ignore="net eth0" /usr/bin/firefox - --include=file.profile
- افزودن یک
فایل
پروفایل
پیش از
استفاده از
پروفایلهای
معمولی.
مثال:
$ firejail --include=/etc/firejail/disable-devel.inc /usr/bin/gedit - --interface=interface
- انتقال
رابط شبکه
به یک فضای
نام جدید
شبکه.
حداکثر تا
چهار گزینه
--interface قابل
تعیین است.
نکته:
دستگاههای
wlan برای این
گزینه
پشتیبانی
نمیشوند.
مثال:
$ firejail --interface=eth1 --interface=eth0.vlan100 - --ip=address
- اختصاص
نشانی IP به
آخرین رابط
شبکه
تعریفشده
توسط یک
گزینه --0t. یک
درگاه
پیشفرض به
صورت
خودکار
تعیین
میشود.
مثال:
$ firejail --0t=eth0 --ip=10.10.20.56 /usr/bin/firefox - --ip=dhcp
- دریافت
آدرس IP و
درگاه
پیشفرض
برای آخرین
رابط
تعریفشده
با گزینه --0t،
و همچنین
تنظیم
سرورهای DNS
طبق پاسخ DHCP.
این گزینه
نیازمند
نصب کلاینت
ISC dhclient است و آن
را درون
سندباکس به
طور خودکار
اجرا
میکند.
مثال:
$ firejail --0t=br0 --ip=dhcpاین گزینه در صورتی که سرور DHCP اقدام به پیکربندی سرورهای DNS برای کلاینتها نماید، نباید همراه با گزینه --ns استفاده شود، زیرا سرورهای DNS مشخصشده به صورت دستی بازنویسی خواهند شد.
کلاینت DHCP با پایان یافتن سندباکس اجاره DHCP (lease) را آزاد نخواهد کرد. اگر سرور DHCP شما نیازمند آزادسازی صریح اجارهها است، اجرای یک کلاینت DHCP و آزادسازی دستی اجاره در کنار گزینه --0t=none را مد نظر قرار دهید.
- --ip=none
- هیچ نشانی IP
و درگاه
پیشفرضی
برای آخرین
رابط
تعریفشده
توسط یک
گزینه --0t
پیکربندی
نمیشود. در
صورتی که
قصد دارید
یک کلاینت DHCP
خارجی را
درون
سندباکس
اجرا
نمایید از
این گزینه
استفاده
کنید.
مثال:
$ firejail --0t=eth0 --ip=noneاگر برای رابط متناظر هیچ نشانی IP پیکربندی نشده باشد، این گزینه به صورت پیشفرض فعال خواهد بود.
- --ip6=address
- اختصاص
نشانیهای
IPv6 به آخرین
رابط شبکه
تعریفشده
توسط یک
گزینه --0t.
مثال:
$ firejail --0t=eth0 --ip6=2001:0db8:0:f101::1/64 /usr/bin/firefoxنکته: اگر نشانی ip6 خود را از روتر از طریق SLAAC دریافت میکنید به این گزینه نیازی ندارید (نشانی ip6 و مسیر پیشفرض شما به صورت خودکار توسط هسته پیکربندی میشود).
- --ip6=dhcp
- دریافت
نشانی IPv6 و
درگاه
پیشفرض
برای آخرین
رابط
تعریفشده
توسط یک
گزینه --0t، و
همچنین
تنظیم
سرورهای DNS
بر اساس
پاسخ DHCP. این
گزینه
نیازمند
نصب کلاینت
DHCP یعنی ISC dhclient
است و آن را
به طور
خودکار
درون
سندباکس
اجرا
میکند.
مثال:
$ firejail --0t=br0 --ip6=dhcpاین گزینه نباید همزمان با گزینه --ns به کار رود اگر سرور DHCP برای پیکربندی سرورهای DNS روی کلاینتها تنظیم شده باشد، زیرا سرورهای DNS دستی رونویسی خواهند شد.
کلاینت DHCP با پایان سندباکس اجاره DHCP را آزاد نخواهد کرد. اگر سرور DHCP شما نیازمند آزادسازی صریح اجارههاست، اجرای کلاینت DHCP و آزادسازی دستی اجاره را مد نظر قرار دهید.
- --iprange=address,address
- اختصاص یک
نشانی IP در
محدوده
ارائهشده
به آخرین
رابط شبکه
تعریفشده
با یک گزینه
--0t. یک درگاه
پیشفرض به
صورت
خودکار
اختصاص
مییابد.
مثال:
$ firejail --0t=eth0 --iprange=192.168.1.100,192.168.1.150 - --ipc-namespace
- فعالسازی
یک فضای نام
جدید IPC در
صورتی که
سندباکس به
عنوان یک
کاربر عادی
اجرا شده
باشد. فضای
نام IPC به طور
پیشفرض
برای
سندباکسهایی
که با
دسترسی
ریشه اجرا
میشوند
فعال است.
نکته: این مورد تنها بر منابع IPC ذکرشده در ipc_namespaces(7) اثر میگذارد. بر سایر منابع IPC مانند سوکتهای یونیکس (ببینید unix(7)) اثری ندارد.
مثال:
$ firejail --ipc-namespace /usr/bin/firefox - --join=name|pid
- پیوستن به
سندباکس
مشخصشده
با نام یا PID.
به طور
پیشفرض پس
از پیوستن
به سندباکس
یک شل /bin/bash
اجرا
میشود. اگر
برنامهای
مشخص شود،
آن برنامه
درون
سندباکس
اجرا خواهد
شد. اگر
دستور --join به
عنوان یک
کاربر عادی
صادر شود،
تمامی
فیلترهای
امنیتی
برای
فرآیند
جدید به
همان شکلی
که در
سندباکس
تنظیم
شدهاند
پیکربندی
میشوند.
اگر دستور --join
با دسترسی
ریشه صادر
شود،
فیلترهای
امنیتی و
پیکربندیهای
پردازندهها
(cpus) روی
فرآیند
ملحقشده
به سندباکس
اعمال
نخواهند شد.
مثال:
$ firejail --0me=mygame --aps.drop=all /usr/bin/warzone2100 &
$ firejail --join=mygameمثال:
$ firejail --
3272:netblue::firejail --rivate
/usr/bin/firefox
$ firejail --join=3272 - --join-filesystem=name|pid
- پیوستن به فضای نام سوارکردن (mount namespace) مربوط به سندباکس مشخصشده با نام یا PID. به طور پیشفرض پس از پیوستن به سندباکس، یک شل /bin/bash اجرا میشود. اگر برنامهای مشخص شود، آن برنامه در سندباکس اجرا خواهد شد. این دستور تنها برای کاربر ریشه (root) در دسترس است. فیلترهای امنیتی و پیکربندیهای پردازندهها (cpus) روی فرآیند ملحقشده به سندباکس اعمال نمیشوند.
- --join-network=name|pid
- پیوستن به
فضای نام
شبکه مربوط
به سندباکس
مشخصشده
با نام. به
طور
پیشفرض پس
از پیوستن
به سندباکس
یک شل /bin/bash
اجرا
میگردد.
اگر
برنامهای
مشخص شود،
آن برنامه
درون
سندباکس
اجرا خواهد
شد. این
دستور فقط
برای کاربر
ریشه در
دسترس است.
فیلترهای
امنیتی و
پیکربندیهای
cpus بر روی
فرآیند
ملحقشده
به سندباکس
اعمال
نخواهند شد.
مثال:
# شروع firefox
$ firejail --0t=eth0 --0me=browser /usr/bin/firefox &# تغییر پیکربندی netfilter
$ sudo firejail --join-network=browser bash -c "cat /etc/firejail/nolocal.net | /sbin/iptables-restore"# اعتبارسنجی پیکربندی netfilter
$ sudo firejail --join-network=browser /sbin/iptables -vL# بررسی نشانیهای IP
$ sudo firejail --join-network=browser ip addr
Switching to pid 1932, the first child process inside the sandbox
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0-1931: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
link/ether 76:58:14:42:78:e4 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.158/24 brd 192.168.1.255 scope global eth0-1931
valid_lft forever preferred_lft forever
inet6 fe80::7458:14ff:fe42:78e4/64 scope link
valid_lft forever preferred_lft forever - --join-or-start=name
- پیوستن به
سندباکس
مشخصشده
با نام یا
آغاز یک
سندباکس
جدید. اگر
سندباکسی
با نام
مشخصشده
از قبل
موجود باشد
مشابه "firejail --join=name"
عمل
میکند، و
در غیر این
صورت
همانند "firejail
--name=name ..." خواهد
بود. برای
جزئیات
بیشتر به --0me
مراجعه
کنید.
توجه داشته باشید که بر خلاف دیگر گزینههای join، برای این گزینه یک معادل در فایل پروفایل وجود دارد. - --ep-config-pulse
- غیرفعال
کردن
مقداردهی
خودکار ~/.config/pulse
برای
راهاندازیهای
پیچیده
مانند
سرورهای
راه دور pulse یا
مسیرهای
سوکت
غیرمعمول.
مثال:
$ firejail --ep-config-pulse /usr/bin/firefox - --ep-dev-ntsync
- اجازه
دسترسی به
دستگاه
کاراکتری
/dev/ntsync (حتی
همراه با
--rivate-dev)
که به صورت پیشفرض مسدود است. این دستگاه عمدتاً جهت بهبود کارایی و سازگاری هنگام اجرای برخی برنامهها از طریق Wine به کار میرود.مثال:
$ firejail --ep-dev-ntsync --rivate-dev
- --ep-dev-shm
- دایرکتوری
/dev/shm
دستنخورده
باقی
میماند
(حتی در
حضور --rivate-dev).
مثال:
$ firejail --ep-dev-shm --rivate-dev
- --ep-dev-tpm
- اجازه
دسترسی به
دستگاههای
ماژول
رمزنگاری
مورد
اعتماد (TCM) و
ماژول بستر
معتمد (TPM) (حتی
همراه با
--rivate-dev)
که بهطور پیشفرض مسدود هستند.مسیرها:
/dev/tcm[0-9]*
/dev/tcmrm[0-9]*
/dev/tpm[0-9]*
/dev/tpmrm[0-9]*مثال:
$ firejail --ep-dev-tpm --rivate-dev
- --ep-fd=all
- انتقال و به
ارث رسیدن
تمام
توصیفکنندههای
فایلِ باز
به درون
سندباکس.
بهطور
پیشفرض
فقط
توصیفکنندههای
فایل ۰، ۱ و
۲ به
سندباکس به
ارث
میرسند و
سایر
توصیفکنندهها
بسته
میشوند.
مثال:
$ firejail --ep-fd=all - --ep-fd=file_descriptor
- عدم بستن
توصیفکنندههای
فایل باز
مشخصشده.
بهطور
پیشفرض
تنها
توصیفکنندههای
فایل ۰، ۱ و
۲ به
سندباکس به
ارث
میرسند و
بقیه بسته
خواهند شد.
مثال:
$ firejail --ep-fd=3,4,5 - --ep-shell-rc
- بهطور پیشفرض، هنگام استفاده از دایرکتوری خانگی خصوصی، firejail فایلها را از الگوی کاربر سیستم (/etc/skel) درون آن کپی میکند که این امر تلاشها برای افزودن فایلهای اصلی (مانند ~/.bashrc و ~/.zshrc) به فهرست سفید را بیاثر میسازد. این گزینه این قابلیت را غیرفعال کرده و به کاربر امکان میدهد تا فایلهای اصلی را در فهرست سفید قرار دهد.
- --ep-var-tmp
- دایرکتوری
/var/tmp
دستنخورده
باقی
میماند.
مثال:
$ firejail --ep-var-tmp - --
- اجرای اجباری مجموعه قوانین Landlock. بدون این گزینه، سایر دستورات Landlock اثری نخواهند داشت. برای اطلاعات بیشتر بخش LANDLOCK را در ادامه ببینید.
- --d=path (آزمایشی)
- ایجاد یک مجموعه قوانین Landlock (اگر قبلاً وجود نداشته باشد) و افزودن یک قانون دسترسی خواندن برای path.
- --th (آزمایشی)
- ایجاد یک مجموعه قوانین Landlock (در صورت عدم وجود) و افزودن قانون دسترسی نوشتن برای path.
- --keipc=path (آزمایشی)
- ایجاد یک مجموعه قوانین Landlock (اگر از قبل موجود نباشد) و افزودن قانونی که ساخت لولههای نامگذاریشده (FIFOs) و سوکتهای دامنه یونیکس را در زیر مسیر ارائهشده مجاز میسازد.
- --kedev=path (آزمایشی)
- ایجاد یک مجموعه قوانین Landlock (اگر وجود نداشته باشد) و افزودن قانونی که ایجاد دستگاههای بلوکی و کاراکتری را در زیر مسیر مشخصشده مجاز میکند.
- --th (آزمایشی)
- ایجاد یک
مجموعه
قوانین Landlock
(در صورت
عدم وجود) و
افزودن
قانون مجوز
اجرا برای path.
مثال:
$ firejail --d=/ -- -- - --
- فهرست کردن
تمامی
سندباکسها،
برای
جزئیات
بیشتر بخش
MONITORING را
ببینید.
مثال:
$ firejail --
7015:netblue:browser:firejail /usr/bin/firefox
7056:netblue:torrent:firejail --0t=eth0 /usr/bin/transmission-gtk
7064:netblue::firejail --0root /usr/bin/xterm
- --
- فهرست کردن فایلها درون ظرف سندباکس، برای جزئیات بیشتر بخش FILE TRANSFER را ببینید.
- --c=address
- اختصاص
نشانیهای
MAC به آخرین
رابط شبکه
تعریفشده
توسط یک
گزینه --0t. این
گزینه برای
رابطهای
بیسیم
پشتیبانی
نمیشود.
مثال:
$ firejail --0t=eth0 --c=00:11:22:33:44:55 /usr/bin/firefox - --chine-id
- جعل شناسه
موجود در
فایل /etc/machine-id - یک
شناسه
تصادفی
جدید درون
سندباکس
تولید
میشود.
توجه داشته
باشید که
این گزینه
پشتیبانی
از صدا را
از کار
میاندازد.
زمانی آن را
فعال کنید
که نیازی به
صدا نیست.
مثال:
$ firejail --chine-id - --mory-deny-write-execute
- نصب یک
فیلتر seccomp
برای
مسدودسازی
تلاشها
جهت ایجاد
نگاشتهای
حافظهای
که همزمان
قابل نوشتن
و قابل اجرا
هستند، یا
تغییر
نگاشتها
به حالت
قابل اجرا،
یا ایجاد
حافظه
مشترکِ
قابل اجرا.
این فیلتر
آرگومانهای
فراخوانهای
سیستمی mmap،
mmap2، mprotect، pkey_mprotect، memfd_create و
shmat را بررسی
کرده و در
صورت لزوم
خطای EPERM را به
فرآیند
بازمیگرداند
(یا آن را
خاتمه داده
یا اقدام را
لاگ
میکند؛
گزینه --ccomp-error-action
را در ادامه
ببینید).
نکته: فراخوان سیستمی shmat روی برخی بسترها از جمله i386 پیادهسازی نشده است و توسط seccomp-bpf قابل مدیریت نیست.
- --dir=dirname
- ایجاد یک
دایرکتوری
در خانه
کاربر.
دایرکتوریهای
والد در
صورت نیاز
ایجاد
میشوند.
مثال:
$ firejail --dir=~/work/project - --file=filename
- ایجاد یک
فایل خالی
در خانه
کاربر.
مثال:
$ firejail --file=~/work/project/readme - --u=number
- اختصاص
مقدار MTU به
آخرین رابط
شبکه
تعریفشده
توسط یک
گزینه --0t.
مثال:
$ firejail --0t=eth0 --u=1492 - --0me=name
- تعیین نام
سندباکس.
چندین
گزینه
مانند --join و --utdown
میتوانند
از این نام
برای
شناسایی یک
سندباکس
استفاده
کنند. نام
نمیتواند
تنها حاوی
ارقام
باشد، زیرا
در سایر
گزینهها
مانند --join به
عنوان یک PID
تلقی
میشود.
برای نامهای معتبر، بخش NAME VALIDATION را ببینید.در صورتی که نام ارائهشده توسط کاربر پیشتر توسط سندباکس دیگری در حال استفاده باشد، Firejail نام جدیدی را به شکل "name-PID" اختصاص میدهد که در آن PID شناسه فرآیند سندباکس است. این ویژگی میتواند در زمان اجرا در فایل /etc/firejail/firejail.config با قرار دادن فلگ "name-change" روی "no" غیرفعال شود.
مثال:
$ firejail --0me=browser /usr/bin/firefox &
$ firejail --0me=browser --rivate
\ /usr/bin/firefox --0-remote &
$ firejail --
1198:netblue:browser:firejail --name=browser /usr/bin/firefox
1312:netblue:browser-1312:firejail --name=browser --private /usr/bin/firefox --no-remote
- --0t=bridge_interface
- فعالسازی
یک فضای نام
جدید شبکه و
اتصال آن به
این رابط پل
(bridge). مگر در
مواردی که
با
گزینههای
--ip و --efaultgw مشخص
شده باشد،
یک آدرس IP و
یک درگاه
پیشفرض به
طور خودکار
به سندباکس
اختصاص
مییابد.
آدرس IP پیش
از تخصیص با
استفاده از
ARP
اعتبارسنجی
میشود.
آدرسی که به
عنوان
درگاه
پیشفرض
پیکربندی
میشود
آدرس IP
دستگاه پل
است. حداکثر
تا چهار
گزینه --0t
قابل تعیین
است.
مثال:
$ sudo brctl addbr br0
$ sudo ifconfig br0 10.10.20.1/24
$ sudo brctl addbr br1
$ sudo ifconfig br1 10.10.30.1/24
$ firejail --0t=br0 --0t=br1 - --0t=ethernet_interface|wireless_interface
- فعالسازی
یک فضای نام
جدید شبکه و
اتصال آن به
این رابط
اترنت با
استفاده از
درایور
استاندارد
macvlan|ipvlan لینوکس.
مگر اینکه
با
گزینههای
--ip و --efaultgw تعیین
شده باشد،
یک آدرس IP و
درگاه
پیشفرض به
صورت
خودکار به
سندباکس
اختصاص
مییابد.
آدرس IP پیش
از تخصیص
توسط ARP
بررسی
میشود.
آدرس
پیکربندیشده
به عنوان
درگاه
پیشفرض،
درگاه
پیشفرض
میزبان
خواهد بود.
تا چهار
گزینه --0t
قابل تعیین
است.
پشتیبانی
از درایور ipvlan
در هسته
نسخه 3.19
لینوکس
معرفی شده
است.
مثال:
$ firejail --0t=eth0 --ip=192.168.1.80 --ns=8.8.8.8 /usr/bin/firefox
$ firejail --0t=wlan0 /usr/bin/firefox - --0t=none
- فعالسازی
یک فضای نام
جدید و
غیرمتصل
شبکه. تنها
رابط موجود
در فضای نام
جدید، یک
رابط
لوپبک (lo)
جدید است.
از این
گزینه برای
سلب دسترسی
شبکه از
برنامههایی
که واقعاً
به شبکه
نیازی
ندارند
استفاده
نمایید.
مثال:
$ firejail --0t=none /usr/bin/vlcنکته: گزینه --0t=none ممکن است روی برخی پلتفرمها موجب کرش کردن برنامه شود. در این موارد میتوان آن را با --rotocol=unix
جایگزین نمود. - --0t=tap_interface
- فعالسازی
فضای نام
جدید شبکه و
اتصال آن به
این رابط
اترنت tap با
استفاده از
درایور
استاندارد
macvlan لینوکس.
اگر رابط tap
پیکربندی
نشده باشد،
سندباکس
تلاشی برای
پیکربندی
رابط درون
سندباکس
نخواهد کرد.
لطفاً از --ip،
--0tmask و --efaultgw برای
مشخص کردن
پیکربندی
استفاده
فرمایید.
مثال:
$ firejail --0t=tap0 --ip=10.10.20.80 --0tmask=255.255.255.0 --efaultgw=10.10.20.1 /usr/bin/firefox - --0t.print=name|pid
- در صورت
فعال بودن
یک فضای نام
جدید شبکه،
پیکربندی
رابط شبکه
را برای
سندباکس
مشخصشده
با نام یا PID
چاپ میکند.
مثال:
$ firejail --0t.print=browser
Switching to pid 1853, the first child process inside the sandbox
Interface MAC IP Mask Status
lo 127.0.0.1 255.0.0.0 UP
eth0-1852 5e:fb:8e:27:29:26 192.168.1.186 255.255.255.0 UP - --0tfilter
- فعالسازی
فایروال
پیشفرض در
صورت ایجاد
فضای نام
جدید شبکه
درون
سندباکس.
این گزینه
برای
سندباکسهایی
که از فضای
نام شبکه
سیستم
استفاده
میکنند بی
اثر است.
فایروال پیشفرض برای برنامههای رومیزی متداول بهینهسازی شده است. هیچ اتصال ورودی پذیرفته نمیشود:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --ate RELATED,ESTABLISHED -j ACCEPT
# allow ping
-A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
-A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# drop STUN (WebRTC) requests
-A OUTPUT -p udp --port 3478 -j DROP
-A OUTPUT -p udp --port 3479 -j DROP
-A OUTPUT -p tcp --port 3478 -j DROP
-A OUTPUT -p tcp --port 3479 -j DROP
COMMITمثال:
$ firejail --0t=eth0 --0tfilter /usr/bin/firefox - --0tfilter=filename
- فعالسازی
فایروال
مشخصشده
توسط filename در
صورت ایجاد
فضای نام
جدید شبکه
درون
سندباکس.
این گزینه
روی
سندباکسهایی
که از فضای
نام شبکه
سیستم
استفاده
میکنند
تاثیری
ندارد.
لطفاً از فرمت استاندارد iptables-save/iptables-restore برای فایل فیلتر استفاده کنید. مثالهای زیر در دایرکتوری /etc/firejail در دسترس هستند:
webserver.net یک فایروال سرور وب است که تنها به درگاههای TCP شماره ۸۰ و ۴۴۳ اجازه دسترسی میدهد. مثال:
$ firejail --0tfilter=/etc/firejail/webserver.net --0t=eth0 \
/etc/init.d/apache2 startnolocal.net/nolocal6.net یک فایروال کلاینت دسکتاپ است که دسترسی به شبکه محلی را غیرفعال میسازد. مثال:
$ firejail --0tfilter=/etc/firejail/nolocal.net \
--0t=eth0 /usr/bin/firefox - --0tfilter=filename,arg1,arg2,arg3 ...
- این نسخه
قالبی (template) از
دستور قبلی
است.
متغیرهای $ARG1,
$ARG2, $ARG3 ... در
اسکریپت
فایروال با
مقادیر arg1, arg2, arg3 ...
ارسالشده
در خط فرمان
جایگزین
میشوند.
حداکثر تا
۱۶ آرگومان
پشتیبانی
میشود.
مثال:
$ firejail --0t=eth0 --ip=192.168.1.105 \
--0tfilter=/etc/firejail/tcpserver.net,5001 server-program - --0tfilter.print=name|pid
- چاپ
فایروال
نصبشده در
سندباکس
مشخصشده
با نام یا PID.
مثال:
$ firejail --0me=browser --0t=eth0 --0tfilter /usr/bin/firefox &
$ firejail --0tfilter.print=browser - --0tfilter6=filename
- فعالسازی فایروال IPv6 مشخصشده توسط filename در صورت ایجاد فضای نام جدید شبکه درون سندباکس. این گزینه برای سندباکسهایی که از فضای نام شبکه سیستم استفاده میکنند اثری ندارد. لطفاً از فرمت استاندارد iptables-save/iptables-restore برای فایل فیلتر استفاده فرمایید.
- --0tfilter6.print=name|pid
- چاپ
فایروال IPv6
نصبشده در
سندباکس
مشخصشده
با نام یا PID.
مثال:
$ firejail --0me=browser --0t=eth0 --0tfilter /usr/bin/firefox &
$ firejail --0tfilter6.print=browser - --0tlock
- بسیاری از
انواع
برنامهها
(کلاینتهای
ایمیل،
بازیهای
چندنفره و...)
با تعداد
بسیار
اندکی از
آدرسهای IP
ارتباط
برقرار
میکنند.
اما بهترین
نمونه
مرورگر tor
است. این
مرورگر
تنها با یک
گره نگهبان
(guard node) گفتگو
میکند، و
دو یا سه
گره
آمادهباش
دیگر نیز
برای مواقع
خرابی گره
اصلی در نظر
دارد. در
حین
راهاندازی،
مرورگر با
تمامی
آنها
ارتباط
برقرار
میکند، و
پس از آن به
ارتباط خود
با گره اصلی
ادامه
میدهد...
برای چندین
هفته!
از قابلیت قفل شبکه (netlock) برای ایجاد و استقرار یک فایروال شبکه سفارشی در سندباکس خود بهره ببرید. این فایروال تنها ترافیک به سمت نشانیهای IP شناساییشده در حین راهاندازی برنامه را مجاز میداند. ترافیک به سوی هر نشانی دیگری بیصدا دور انداخته میشود (drop). به طور پیشفرض زمان پایش شبکه یک دقیقه است.
وجود یک فضای نام شبکه (--0t=eth0) برای کارکرد این قابلیت ضروری است. مثال:
$ firejail --0t=eth0 --0tlock \
--rivate=~/tor-browser_en-US
./start-tor-browser.desktop - --0tmask=address
- از این
گزینه
زمانی
استفاده
کنید که
میخواهید
یک آدرس IP در
یک فضای نام
جدید
اختصاص
دهید و رابط
والد
مشخصشده
توسط --net
پیکربندی
نشده باشد.
یک آدرس IP و
یک آدرس
درگاه
پیشفرض
نیز باید
اضافه شوند.
به طور
پیشفرض
رابط فضای
نام جدید
بدون آدرس IP
و درگاه
پیشفرض
پیکربندیشده
عرضه
میشود.
مثال:
$ sudo /sbin/brctl addbr br0
$ sudo /sbin/ifconfig br0 up
$ firejail --ip=10.10.20.67 --0tmask=255.255.255.0 --efaultgw=10.10.20.1 - --0tns=name
- اجرای برنامه در یک فضای نام شبکه نامگذاریشده و پایدار. این فضاها میتوانند با استفاده از "ip netns" ایجاد و پیکربندی شوند.
- --0tstats
- پایش
آمارهای
فضای نام
شبکه، برای
جزئیات
بیشتر بخش
MONITORING را
ببینید.
مثال:
$ firejail --0tstats
PID User RX(KB/s) TX(KB/s) Command
1294 netblue 53.355 1.473 firejail --0t=eth0 /usr/bin/firefox
7383 netblue 9.045 0.112 firejail --0t=eth0 /usr/bin/transmission - --0ttrace[=name|pid]
- پایش
ترافیکهای
دریافتی TCP، UDP
و ICMP. سندباکس
را میتوان
با نام یا pid
تعیین نمود.
تنها
سندباکسهای
شبکهای
ایجادشده
با --0t
پشتیبانی
میشوند.
این گزینه
فقط هنگام
اجرای
سندباکس با
دسترسی
ریشه در
دسترس است.
بدون مشخص کردن نام/pid، ابزار Firejail فضای نام شبکه اصلی سیستم را پایش خواهد کرد.
مثال:
$ sudo firejail --0ttrace
93 KB/s address:port (protocol) network
14 B/s ** 104.24.8.4:443(QUIC) Cloudflare
80 KB/s ***************** 192.187.97.90:443(TLS) BitChute
1 B/s 149.56.228.45:443(DoH) Canada
(D)isplay, (S)ave, (C)lear, e(X)itدر صورتی که /usr/bin/geoiplookup نصب باشد (بسته geoip-bin در دبیان)، کشوری که ترافیک از آن سرچشمه میگیرد به ردگیری اضافه میشود. ما همچنین از نگاشت IP ایستا در مسیر /usr/lib/firejail/static-ip-map جهت چاپ نام دامنههای برخی از وبسایتها و بسترهای ابری رایجتر بهره میگیریم. هیچ سرویس خارجی برای جستجوی معکوس IP فراخوانی نمیشود.
- --0ce=value
- تنظیم
مقدار nice
برای تمامی
فرآیندهای
در حال اجرا
در داخل
سندباکس.
تنها کاربر
ریشه
میتواند
یک مقدار
منفی تعیین
کند.
مثال:
$ firejail --0ce=2 /usr/bin/firefox - --03d
- غیرفعال
ساختن
شتابدهنده
سختافزاری
سهبعدی (3D).
مثال:
$ firejail --03d /usr/bin/firefox - --0autopulse (منسوخشده)
- به --ep-config-pulse مراجعه فرمایید.
- --0blacklist=dirname_or_filename
- غیرفعالسازی
فهرست سیاه
برای این
دایرکتوری
یا فایل.
توجه داشته باشید که ورودیهای فهرست سیاه حاوی ${PATH} در حال حاضر نمیتوانند به صورت جزئی برای مسیرهای بسطیافته مجزا غیرفعال شوند. فقط کل مسیر بسطنیافته شامل ${PATH} میتواند غیرفعال گردد که سپس بر تمامی بسطها اعمال میشود. این محدودیت برای بسطهای متغیرهای دیگر یا کاراکترهای عمومی صدق نمیکند. برای جزئیات، ببینید: #6360.
مثال:
$ firejail
$ nc dict.org 2628
bash: /bin/nc: Permission denied
$ exit$ firejail --0blacklist=/bin/nc
bash: /bin/nc: Permission denied
$ exit$ firejail --0blacklist='${PATH}/nc'
$ nc dict.org 2628
220 pan.alephnull.com dictd 1.12.1/rf on Linux 3.14-1-amd64
- --0dbus (منسوخشده)
- غیرفعال
کردن
دسترسی به D-Bus
(هر دو
گذرگاه
سیستم و
نشست).
معادل با
--dbus-system=none --dbus-user=none.
مثال:
$ firejail --0dbus --0t=none - --0dvd
- غیرفعال
ساختن
دستگاههای
DVD و CD صوتی.
مثال:
$ firejail --0dvd - --0exec=dirname_or_filename
- سوار کردن
مجدد
دایرکتوری
یا فایل با
گزینههای
noexec، nodev و nosuid.
تطبیق
الگوی
فایلی
پشتیبانی
میشود،
برای
جزئیات
بیشتر بخش FILE
GLOBBING را
ببینید.
مثال:
$ firejail --0exec=/tmpدر صورتی که سندباکس به عنوان یک کاربر عادی اجرا شده باشد، دایرکتوریهای /etc و /var به طور پیشفرض noexec هستند.
- --0groups
- غیرفعال
کردن
گروههای
تکمیلی (supplementary groups).
بدون این
گزینه،
گروههای
تکمیلی
برای
کاربری که
سندباکس را
راهاندازی
میکند
فعال هستند.
برای کاربر
ریشه
گروههای
تکمیلی
همواره
غیرفعال
هستند.
نکته: بهطور پیشفرض تمامی گروههای کاربر عادی به استثنای کاربر جاری حذف میشوند. این مورد با استفاده از گزینه --llusers قابل تغییر است.
مثال:
$ id
uid=1000(netblue) gid=1000(netblue) groups=1000(netblue),24(cdrom),25(floppy),27(sudo),29(audio)
$ firejail --0groups
Parent pid 8704, child pid 8705
Child process initialized
$ id
uid=1000(netblue) gid=1000(netblue) groups=1000(netblue)
$ - --0input
- غیرفعال
ساختن
دستگاههای
ورودی.
مثال:
$ firejail --0input - --0newprivs
- تنظیم فلگ NO_NEW_PRIVS در prctl. این ویژگی تضمین میکند که فرآیندهای فرزند نتوانند با استفاده از execve(2) امتیازات جدیدی کسب نمایند؛ به ویژه، این بدان معناست که فراخوانی یک باینری suid (یا برنامهای با قابلیتهای فایلی) منجر به افزایش سطح دسترسی نخواهد شد. این گزینه در صورت فعال بودن فیلتر seccomp به صورت پیشفرض فعال است.
- --0printers
- غیرفعال ساختن چاپگرها.
- --0profile
- عدم
استفاده از
پروفایل
امنیتی.
مثال:
$ firejail
Reading profile /etc/firejail/default.profile
Parent pid 8553, child pid 8554
Child process initialized
[...]$ firejail --0profile
Parent pid 8553, child pid 8554
Child process initialized
[...] - --0root
- نصب یک فضای
نام کاربر
با یک کاربر
منفرد -
کاربر جاری.
کاربر ریشه
در فضای نام
جدید وجود
ندارد. این
گزینه به
نگارش 3.8
هسته
لینوکس یا
بالاتر
نیاز دارد.
این گزینه
برای
پیکربندیهای
--hroot و --ppimage، یا
برای
سندباکسهایی
که به عنوان
ریشه اجرا
میشوند
پشتیبانی
نمیگردد.
مثال:
$ firejail --0root
Parent pid 8553, child pid 8554
Child process initialized
$ ping google.com
ping: icmp open socket: Operation not permitted
$ - --0sound
- غیرفعال
کردن
سامانه
صوتی.
مثال:
$ firejail --0sound /usr/bin/firefox - --0tpm (منسوخشده)
- برای
سازگاری
نادیده
گرفته
میشود.
دستگاههای TPM در حال حاضر به صورت پیشفرض مسدود هستند، --ep-dev-tpm را ببینید. - --0tv
- غیرفعال
ساختن
دستگاههای
تلویزیون DVB
(پخش ویدیوی
دیجیتال).
مثال:
$ firejail --0tv /usr/bin/vlc - --0u2f
- غیرفعال
ساختن
دستگاههای
U2F.
مثال:
$ firejail --0u2f - --0video
- غیرفعال ساختن دستگاههای ویدیویی (دوربین و وبکم).
- --0whitelist=dirname_or_filename
- غیرفعال کردن فهرست سفید برای این دایرکتوری یا فایل.
- --
- پیکربندی
امتیاز
قاتل کمبود
حافظه هسته
(OutOfMemory-killer) برای
این
سندباکس.
مقادیر
امتیاز
مجاز بین 0
تا 1000 برای
کاربران
عادی، و -1000 تا
1000 برای
کاربر ریشه
است. برای
اطلاعات
بیشتر در
خصوص ویژگی
OOM هسته به man choom
رجوع
فرمایید.
مثال:
$ firejail --fx - --pt=logfile
- لاگگیری
خروجی
استاندارد
(stdout) و چرخش
لاگها.
رونوشت
خروجی
استاندارد
در logfile قرار
میگیرد و
با استفاده
از چرخش لاگ
حجم فایل
زیر ۵۰۰
کیلوبایت
نگه داشته
میشود. پنج
فایل با
پسوندهای .1
تا .5 در این
چرخش به کار
میروند.
مثال:
$ firejail --pt=sandboxlog /bin/bash
[...]
$ ls -l sandboxlog*
-rw-r--r-- 1 netblue netblue 333890 Jun 2 07:48 sandboxlog
-rw-r--r-- 1 netblue netblue 511488 Jun 2 07:48 sandboxlog.1
-rw-r--r-- 1 netblue netblue 511488 Jun 2 07:48 sandboxlog.2
-rw-r--r-- 1 netblue netblue 511488 Jun 2 07:48 sandboxlog.3
-rw-r--r-- 1 netblue netblue 511488 Jun 2 07:48 sandboxlog.4
-rw-r--r-- 1 netblue netblue 511488 Jun 2 07:48 sandboxlog.5 - --pt-stderr=logfile
- مشابه --pt، ولی خطای استاندارد (stderr) نیز ذخیره میگردد.
- --rivate
- سوار کردن
دایرکتوریهای
جدید /root و /home/user
در
سیستمهای
فایل موقت.
تمامی
تغییرات پس
از بسته شدن
سندباکس
دور ریخته
میشوند.
مثال:
$ firejail --rivate
/usr/bin/firefox - --rivate=directory
- استفاده از
directory به عنوان
دایرکتوری
خانگی
کاربر.
گزینههای
--rivate
و --rivate=directory
همزمان قابل استفاده نیستند.مثال:
$ firejail --rivate=/home/netblue/firefox-home
/usr/bin/firefoxنقص فنی: حتی در صورت فعال بودن این گزینه، برخی دستورات firejail (مانند mkdir، mkfile و private-cache) همچنان بر روی دایرکتوری خانگی اصلی عمل خواهند کرد. راهحل: دستورات ناسازگار را با استفاده از "ignore mkdir" و "ignore mkfile" غیرفعال نمایید. برای جزئیات، ببینید: #903.
- --rivate-bin=file,file
- ساخت یک /bin
جدید در یک
سیستم فایل
موقت، و کپی
کردن
برنامههای
فهرستشده
در آن.
فایلهای
موجود در
فهرست باید
به صورت
نسبی نسبت
به
دایرکتوریهای
/bin، /sbin، /usr/bin، /usr/sbin یا
/usr/local/bin بیان
شوند. اگر
هیچ فایلی
از فهرست
یافت نشود،
دایرکتوری
/bin خالی
خواهد ماند.
همین
دایرکتوری
بر روی /sbin، /usr/bin،
/usr/sbin و /usr/local/bin نیز bind-mount
میشود.
تمامی
تغییرات با
بسته شدن
سندباکس
دور ریخته
میشوند.
چندین
دستور private-bin
مجاز است و
اثر آنها
متراکم
میشود.
تطبیق
الگوی
فایلی
پشتیبانی
میشود،
برای
جزئیات
بیشتر بخش FILE
GLOBBING را
ببینید.
مثال:
$ firejail --rivate-bin=bash,cat,ls,sed
Parent pid 20841, child pid 20842
Child process initialized
$ ls /bin
bash cat ls sed - --rivate-cache
- سوار کردن
یک سیستم
فایل موقت
خالی بر روی
دایرکتوری
.cache در خانه
کاربر.
تمامی
تغییرات با
بسته شدن
سندباکس
دور ریخته
میشوند.
مثال:
$ firejail --rivate-cache
/usr/bin/openbox - --rivate-cwd
- تنظیم
دایرکتوری
کاری درون
سندباکس به
دایرکتوری
خانگی، و در
صورت شکست
به
دایرکتوری
ریشه. بر
دایرکتوری
کاری
مسیرهای include
در فایل
پروفایل
تاثیری
نمیگذارد.
مثال:
$ pwd
/tmp
$ firejail --rivate-cwd
$ pwd
/home/user - --rivate-cwd=directory
- تنظیم
دایرکتوری
کاری درون
سندباکس.
مسیر کامل
دایرکتوری
الزامی است.
پیوندهای
نمادین
مجاز
نیستند. بر
دایرکتوری
کاری
مسیرهای include
در فایل
پروفایل
اثری ندارد.
مثال:
$ pwd
/tmp
$ firejail --rivate-cwd=/opt
$ pwd
/opt - --rivate-dev
- ایجاد یک
دایرکتوری
جدید /dev. تنها
دستگاههای
disc، dri، dvb، full، hidraw،
log، null، ptmx، pts، random،
shm، snd، tty، urandom، usb، video
و zero در دسترس
خواهند بود.
از
گزینههای
--03d، --0dvd، --0sound، --0tv، --0u2f
و --0video برای
محدودیتهای
تکمیلی
استفاده
فرمایید.
مثال:
$ firejail --rivate-dev
Parent pid 9887, child pid 9888
Child process initialized
$ ls /dev
cdrom cdrw dri dvd dvdrw full log null ptmx pts random shm snd sr0 tty urandom zero
$ - --rivate-etc,
--rivate-etc=@group,file,directory
- فایلهای
نصبشده
توسط --rivate-etc
رونوشتهایی از فایلهای اصلی سیستم از دایرکتوری /etc هستند. بهطور پیشفرض، این دستور اسکلتی از فایلها و دایرکتوریهای مورد استفاده اکثر ابزارهای کنسول را به همراه میآورد:$ firejail --rivate-etc
/usr/bin/dig debian.orgبرای برنامههای X11/GTK/QT/Gnome/KDE گروه @x11 را به عنوان یک پارامتر اضافه کنید. مثال:
$ firejail --rivate-etc=@x11,gcrypt,python*
/usr/bin/gimpدایرکتوریهای gcrypt و /etc/python* بخشی از گروه عمومی @x11 نیستند. تطبیق الگوی فایلی (Globbing) پشتیبانی میشود.
برای بازیها، گروه @games را بیفزایید:
$ firejail --rivate-etc=@games,@x11
/usr/bin/warzone2100فایلهای صوتی و شبکه به طور خودکار گنجانده میشوند، مگر اینکه --0sound یا --0t=none تعیین شده باشد. فایلهای مربوط به پروتکلهای رمزگذاریشده TLS/SSL در گروه @tls-ca قرار دارند:
$ firejail --rivate-etc=@tls-ca,wgetrc
/usr/bin/wget https://debian.orgنکته: سادهترین راه برای استخراج فهرست فایلهای /etc که توسط برنامه شما فراخوانی میشوند، بهرهگیری از ابزار strace است.
مثال:
$ strace -f --race=%file /usr/bin/transmission-qt 2>&1 | grep etc
$ firejail --llow-debuggers --rofile=/etc/firejail/transmission-qt.profile
strace -f --race=%file /usr/bin/transmission-qt 2>&1 | grep etcهمچنین --llow-debuggers و --race را ببینید.
- --rivate-home=file,directory
- ساخت یک
خانه کاربر
جدید در یک
سیستم فایل
موقت، و کپی
کردن
فایلها و
دایرکتوریهای
موجود در
فهرست به
داخل خانه
جدید.
فایلها و
دایرکتوریهای
موجود در
فهرست باید
به صورت
نسبی نسبت
به
دایرکتوری
خانه کاربر
جاری بیان
شوند. تمامی
تغییرات با
بسته شدن
سندباکس
دور ریخته
خواهند شد.
مثال:
$ firejail --rivate-home=.mozilla
/usr/bin/firefox - --rivate-opt=file,directory
- ساخت یک
دایرکتوری
/opt جدید در یک
سیستم فایل
موقت، و کپی
کردن
فایلها و
دایرکتوریهای
موجود در
فهرست.
فایلها و
دایرکتوریهای
موجود در
فهرست باید
به صورت
نسبی نسبت
به
دایرکتوری
/opt بیان
شوند، و
نباید حاوی
نویسه /
باشند
(مثلاً /opt/foo
باید به
صورت foo
نوشته شود،
اما /opt/foo/bar که به
شکل foo/bar نوشته
شود
غیرمجاز
است). اگر
هیچ فایل
فهرستشدهای
یافت نشود،
دایرکتوری
/opt خالی
خواهد بود.
تمامی
تغییرات پس
از بسته شدن
سندباکس
دور ریخته
میشوند.
مثال:
$ firejail --rivate-opt=firefox
/opt/firefox/firefoxنکته: برنامههای نصبشده در /opt معمولاً نسبتاً حجیم هستند و private-opt کل مسیر(ها) را درون حافظه رم کپی میکند که ممکن است مصرف RAM را به طور چشمگیری افزایش دهد و محدودیت file-copy-limit در firejail.config را نقض کند. از این رو، به طور کلی توصیه میشود به جای "private-opt PATH" از "whitelist /opt/PATH" استفاده گردد. برای جزئیات، ببینید: #5307.
- --rivate-srv=file,directory
- ساخت یک
دایرکتوری
/srv جدید در یک
سیستم فایل
موقت، و کپی
کردن
فایلها و
دایرکتوریهای
موجود در
فهرست.
فایلها و
دایرکتوریهای
موجود در
این فهرست
باید به
صورت نسبی
نسبت به
دایرکتوری
/srv بیان شوند
و نباید
حاوی نویسه
/ باشند
(مثلاً /srv/foo
باید به
صورت foo بیان
شود، ولی /srv/foo/bar
که به شکل srv/bar
بیان شود
غیرمجاز
است). اگر
هیچ فایلی
یافت نشود،
دایرکتوری
/srv خالی
خواهد بود.
تمام
تغییرات با
بستن
سندباکس
دور ریخته
میشوند.
مثال:
# firejail --rivate-srv=www
/etc/init.d/apache2 start - --rivate-tmp
- سوار کردن
یک سیستم
فایل موقت
خالی بر روی
دایرکتوری
/tmp با قرار
دادن
سوکتهای X11
و PulseAudio در
فهرست سفید.
مثال:
$ firejail --rivate-tmp
$ ls -al /tmp
drwxrwxrwt 4 nobody nogroup 80 Apr 30 11:46 .
drwxr-xr-x 30 nobody nogroup 4096 Apr 26 22:18 ..
drwx------ 2 nobody nogroup 4096 Apr 30 10:52 pulse-PKdhtXMmr18n
drwxrwxrwt 2 nobody nogroup 4096 Apr 30 10:52 .X11-unix - --rofile=filename|appname
- بارگذاری
یک پروفایل
امنیتی
سفارشی از
filename، یا
استفاده از
نام یک
برنامه خاص.
اگر گزینه خط فرمان --rofile
ارائه نشود، Firejail تلاش خواهد کرد نام برنامه (appname) را از نام فایل برنامه هدف استخراج کند. سپس دایرکتوری ~/.config/firejail را برای یک پروفایل مناسب جستجو کرده، و پس از آن دایرکتوری /etc/firejail را جستجو خواهد کرد.مثال:
$ firejail /usr/bin/firefox
Reading profile /home/netblue/.config/firejail/firefox.profile
Reading profile /etc/firejail/firefox.profile
Reading profile /etc/firejail/firefox-common.profile
[...]هنگام استفاده از یک نام فایل، لطفاً یک مسیر کامل یا یک مسیر نسبی را درج فرمایید.
$ firejail --rofile=./firefox.profile
/usr/bin/firefox
Reading profile ./firefox.profile
Reading profile /etc/firejail/firefox.profile
Reading profile /etc/firejail/firefox-common.profile
[...]گزینه --rofile=appname
هنگام اجرای appimageها بسیار سودمند است:$ firejail --ppimage --rofile=firefox
firefox-nightly-148.0.r20260103-x86_64.AppImage
Reading profile /home/netblue/.config/firejail/firefox.profile
Reading profile /etc/firejail/firefox.profile
Reading profile /etc/firejail/firefox-common.profile
[...]برای اطلاعات مربوط به ساختار نحوی فایل پروفایل به man 5 firejail-profile مراجعه فرمایید. برای جزئیات نحوه تشخیص و تطبیق پروفایل، ببینید: https://github.com/netblue30/firejail/wiki/Creating-Profiles
- --rofile.print=name|pid
- چاپ نام
فایل
پروفایل
برای
سندباکس
مشخصشده
با نام یا
با PID.
مثال:
$ firejail --rofile.print=browser
/etc/firejail/firefox.profile
- --rotocol=protocol,protocol,protocol
- فعالسازی
فیلتر
پروتکل. این
فیلتر بر
پایه seccomp بوده
و نخستین
آرگومانِ
ارسالی به
فراخوان
سیستمی socket را
بررسی
میکند.
مقادیر
شناساییشده:
unix، inet، inet6، netlink، packet و
bluetooth. این
گزینه برای
معماری i386
پشتیبانی
نمیشود.
تعریف
چندباره
دستور protocol
مجاز است و
به صورت
تجمعی
اعمال
میشوند.
مثال:
$ firejail --rotocol=unix,inet,inet6
/usr/bin/firefox - --rotocol.print=name|pid
- چاپ فیلتر
پروتکل
برای
سندباکس
مشخصشده
با نام یا PID.
مثال:
$ firejail --0me=mybrowser /usr/bin/firefox &
$ firejail --rotocol.print=mybrowser
unix,inet,inet6,netlinkمثال:
$ firejail --
3272:netblue::firejail --rivate
/usr/bin/firefox
$ firejail --rotocol.print=3272
unix,inet,inet6,netlink - --ut=name|pid
src-filename dest-filename - قرار دادن یک فایل در ظرف سندباکس، برای جزئیات بیشتر بخش FILE TRANSFER را ببینید.
- --quiet
- خاموش کردن
خروجی متنی
Firejail.
همین اثر را میتوان با تنظیم متغیر محیطی FIREJAIL_QUIET روی مقدار yes به دست آورد.
- --ead-only=dirname_or_filename
- تنظیم
دایرکتوری
یا فایل به
حالت
فقطخواندنی.
تطبیق
الگوی
فایلی
پشتیبانی
میشود،
برای
جزئیات
بیشتر بخش FILE
GLOBBING را
ببینید.
مثال:
$ firejail --ead-only=~/.mozilla /usr/bin/firefox - --ead-write=dirname_or_filename
- تنظیم
دایرکتوری
یا فایل به
صورت
خواندنی-نوشتنی.
تنها
فایلها یا
دایرکتوریهای
متعلق به
کاربر جاری
برای این
عملیات
مجاز هستند.
تطبیق
الگوی
فایلی
پشتیبانی
میشود،
برای
جزئیات
بیشتر بخش FILE
GLOBBING را
ببینید.
مثال:
$ mkdir ~/test
$ touch ~/test/a
$ firejail --ead-only=~/test --ead-write=~/test/a - --estrict-namespaces
- نصب یک
فیلتر seccomp که
تلاشها
برای ایجاد
فضاهای نام
جدید cgroup، ipc، net،
mount، pid، time، user یا uts
را مسدود
میکند.
مثال:
$ firejail --estrict-namespaces - --estrict-namespaces=cgroup,ipc,net,mnt,pid,time,user,uts
- نصب یک
فیلتر seccomp که
تلاشها
برای ایجاد
هر یک از
فضاهای نام
مشخصشده
را مسدود
میسازد.
فیلتر
آرگومانهای
فراخوانهای
سیستمی clone، unshare
و setns را بررسی
کرده و در
صورت نیاز
خطای EPERM را به
فرآیند
بازمیگرداند
(یا آن را
خاتمه داده
یا تلاش را
لاگ
میکند،
گزینه --ccomp-error-action
را در ادامه
ببینید).
توجه داشته
باشید که
فیلتر قادر
به بررسی
آرگومانهای
فراخوانهای
سیستمی clone3
نیست و
همواره به
این
فراخوانها
با خطای ENOSYS
پاسخ
میدهد.
مثال:
$ firejail --estrict-namespaces=user,net - --limit-as=number
- تنظیم حداکثر اندازه حافظه مجازی فرآیند (فضای آدرس) بر حسب بایت. میتوانید از پسوندهای K (کیبیبایت)، M (مبیبایت) یا G (گیبیبایت) استفاده کنید، مانند "100M" (که معادل 104857600 بایت است).
- --limit-cpu=number
- تنظیم
حداکثر حد
مجاز، بر
حسب ثانیه،
برای میزان
زمان
پردازندهای
که هر
فرآیند
درون
سندباکس
میتواند
مصرف کند.
با رسیدن به
این حد،
فرآیندها
متوقف
میشوند.
محدودیت CPU محدودیتی بر روی ثانیههای CPU است نه زمان سپریشده تقویمی. ثانیههای CPU اساساً بیانگر این است که پردازنده چند ثانیه مورد استفاده قرار گرفته است و لزوماً ارتباط مستقیمی با زمان سپریشده واقعی ندارد. هسته لینوکس ثانیههای CPU را برای هر فرآیند به طور مستقل ردیابی میکند.
- --limit-fsize=number
- تنظیم حداکثر اندازه فایلی که میتواند توسط یک فرآیند ایجاد شود. میتوانید از پسوندهای K (کیبیبایت)، M (مبیبایت) یا G (گیبیبایت) بهره ببرید، مانند "100M" (که معادل 104857600 بایت است).
- --limit-nofile=number
- تنظیم حداکثر تعداد فایلهایی که میتواند توسط یک فرآیند باز شود.
- --limit-nproc=number
- تنظیم حداکثر تعداد فرآیندهایی که میتواند برای شناسه کاربری واقعی (real user ID) فرآیند فراخواننده ایجاد شود.
- --limit-sigpending=number
- تنظیم حداکثر تعداد سیگنالهای معلق برای یک فرآیند.
- --menv=name
- حذف متغیر
محیطی در
سندباکس
جدید.
مثال:
$ firejail --menv=DBUS_SESSION_BUS_ADDRESS - --an
- اسکن ARP
تمامی
شبکهها از
داخل یک
فضای نام
شبکه. این
کار امکان
شناسایی
درایورهای
دستگاه
هسته macvlan در
حال اجرا
روی میزبان
جاری را
فراهم
میسازد.
مثال:
$ firejail --0t=eth0 --an - --ccomp
- فعالسازی
فیلتر seccomp و
قرار دادن
فراخوانهای
سیستمی
فهرست
پیشفرض در
فهرست
سیاه، که
برابر با
@default-nodebuggers است مگر
اینکه --llow-debuggers
مشخص شده
باشد که در
آن صورت @default
خواهد بود.
برای تسهیل در ایجاد فیلترهای seccomp سودمند، گروههای فراخوان سیستمی زیر تعریف شدهاند: @aio, @basic-io, @chown, @clock, @cpu-emulation, @debug, @default, @default-nodebuggers, @default-keep, @file-system, @io-event, @ipc, @keyring, @memfd, @memlock, @module, @mount, @network-io, @obsolete, @privileged, @process, @raw-io, @reboot, @resources, @sandbox, @setuid, @swap, @sync, @system-service و @timer. اطلاعات بیشتر درباره این گروهها را میتوانید در فایل /usr/share/doc/firejail/syscalls.txt بیابید، همچنین --ebug-syscall-groups را ببینید.
فهرست پیشفرض قابل سفارشیسازی است، برای توضیحات به --ccomp= مراجعه فرمایید. همچنین میتوان آن را به صورت سراسری در فایل /etc/firejail/firejail.config سفارشی کرد.
معماری سیستم تنها زمانی به طور اکید اعمال میشود که فلگ --ccomp.block-secondary به کار رود. فیلتر در زمان اجرا تنها در صورتی اعمال میشود که معماری صحیح شناسایی شده باشد. در خصوص I386 و AMD64 هر دو فیلتر ۳۲ بیتی و ۶۴ بیتی نصب میشوند.
اگر هسته با پشتیبانی از audit کامپایل شده باشد (فلگ CONFIG_AUDIT)، Firejail تخلفات seccomp را در لاگ audit چاپ خواهد کرد.
مثال:
$ firejail --ccomp - --ccomp=syscall,@group,!syscall2
- فعالسازی
فیلتر seccomp،
قرار دادن
فهرست
پیشفرض و
فراخوانهای
سیستمی یا
گروههای
فراخوان
سیستمی
تعیینشده
توسط دستور
در فهرست
سیاه، اما
استثنا
کردن "syscall2" از
فهرست سیاه.
در یک
معماری ۶۴
بیتی، یک
فیلتر
تکمیلی
برای
فراخوانهای
سیستمی ۳۲
بیتی
میتواند
با --ccomp.32 نصب
گردد.
مثال:
$ firejail --ccomp=utime,utimensat,utimes /usr/bin/firefox
$ firejail --ccomp=@clock,mkdir,unlinkat /usr/bin/transmission-gtk
$ firejail '--ccomp=@ipc,!pipe,!pipe2' audaciousفراخوانهای سیستمی را میتوان در صورت درج پیشوند "$" با شماره آنها مشخص کرد، بنابراین برای نمونه "$165" متناظر با "mount" در معماری x86_64 است.
شمارهها و نامهای فراخوانهای سیستمی برای --ccomp را میتوان با استفاده از --ebug-syscalls و برای --ccomp.32 با --ebug-syscalls32 یافت.
به جای دور انداختن فراخوان سیستمی با بازگرداندن EPERM، میتوان شماره خطای دیگری را با نحو syscall:errno بازگرداند. این مورد را میتوان به صورت سراسری نیز با --ccomp-error-action یا در فایل /etc/firejail/firejail.config تغییر داد. فرآیند را همچنین میتوان با نحو syscall:kill متوقف کرد، یا تلاش صورتگرفته را با syscall:log ثبت نمود.
مثال:
$ firejail --ccomp=unlinkat:ENOENT,utimensat,utimes
Parent pid 10662, child pid 10663
Child process initialized
$ touch testfile
$ ls testfile
testfile
$ rm testfile
rm: cannot remove `testfile': No such file or directoryاگر فراخوانهای سیستمی مسدودشده مانع از عملکرد خود Firejail نیز بشوند، با افزودن یک کتابخانه از پیش بارگذاریشده (preload) مدیریت میگردند که فراخوانهای سیستمی seccomp را دیرتر اجرا میکند. با این وجود، این روش با فیلترهای seccomp ۳۲ بیتی ناسازگار است.
مثال:
$ firejail --0profile --ccomp=execve sh
Parent pid 32751, child pid 32752
Post-exec seccomp protector enabled
list in: execve, check list: @default-keep prelist: (null), postlist: execve
Child process initialized in 46.44 ms
$ ls
Operation not permitted - --ccomp.block-secondary
- فعالسازی فیلتر seccomp و فیلتر کردن معماریهای فراخوان سیستمی به گونهای که تنها معماری بومی مجاز باشد. برای نمونه در amd64، فراخوانهای سیستمی i386 و x32 مسدود میشوند و همچنین تغییر دامنه اجرا با فراخوان سیستمی personality(2) مسدود میگردد.
- --ccomp.drop=syscall,@group
- فعالسازی
فیلتر seccomp، و
قرار دادن
فراخوانهای
سیستمی یا
گروههای
فراخوان
سیستمی
مشخصشده
توسط دستور
در فهرست
سیاه. در یک
معماری ۶۴
بیتی، یک
فیلتر
اضافی برای
فراخوانهای
سیستمی ۳۲
بیتی را
میتوان با
--ccomp.32.drop نصب کرد.
مثال:
$ firejail --ccomp.drop=utime,utimensat,utimes,@clockبه جای دور انداختن فراخوان سیستمی با بازگرداندن EPERM، شماره خطای دیگری را میتوان با استفاده از نحو syscall:errno بازگرداند. این مورد را میتوان به صورت سراسری با --ccomp-error-action یا در فایل /etc/firejail/firejail.config نیز تغییر داد. فرآیند همچنین میتواند با ساختار syscall:kill خاتمه یابد، یا اقدام مربوطه با syscall:log لاگ شود.
مثال:
$ firejail --ccomp.drop=unlinkat:ENOENT,utimensat,utimes
Parent pid 10662, child pid 10663
Child process initialized
$ touch testfile
$ ls testfile
testfile
$ rm testfile
rm: cannot remove `testfile': No such file or directory - --ccomp.keep=syscall,@group,!syscall2
- فعالسازی
فیلتر seccomp،
قرار دادن
تمامی
فراخوانهای
سیستمی
فهرستنشده
در فهرست
سیاه به جز
"syscall2".
فراخوانهای
سیستمی
مورد نیاز Firejail
(گروه @default-keep: prctl, execve, execveat)
با
کتابخانه
پیشبارگذاری
مدیریت
میشوند. در
یک معماری
۶۴ بیتی، یک
فیلتر
تکمیلی
برای
فراخوانهای
سیستمی ۳۲
بیتی را
میتوان با
--ccomp.32.keep نصب کرد.
مثال:
$ firejail --ccomp.keep=poll,select,[...] /usr/bin/transmission-gtk - --ccomp.print=name|pid
- چاپ فیلتر seccomp
برای
سندباکس
مشخصشده
با نام یا PID.
مثال:
$ firejail --0me=browser /usr/bin/firefox &
$ firejail --ccomp.print=browser
line OP JT JF K
=================================
0000: 20 00 00 00000004 ld data.architecture
0001: 15 01 00 c000003e jeq ARCH_64 0003 (false 0002)
0002: 06 00 00 7fff0000 ret ALLOW
0003: 20 00 00 00000000 ld data.syscall-number
0004: 35 01 00 40000000 jge X32_ABI true:0006 (false 0005)
0005: 35 01 00 00000000 jge read 0007 (false 0006)
0006: 06 00 00 00050001 ret ERRNO(1)
0007: 15 41 00 0000009a jeq modify_ldt 0049 (false 0008)
0008: 15 40 00 000000d4 jeq lookup_dcookie 0049 (false 0009)
0009: 15 3f 00 0000012a jeq perf_event_open 0049 (false 000a)
000a: 15 3e 00 00000137 jeq process_vm_writev 0049 (false 000b)
000b: 15 3d 00 0000009c jeq _sysctl 0049 (false 000c)
000c: 15 3c 00 000000b7 jeq afs_syscall 0049 (false 000d)
000d: 15 3b 00 000000ae jeq create_module 0049 (false 000e)
000e: 15 3a 00 000000b1 jeq get_kernel_syms 0049 (false 000f)
000f: 15 39 00 000000b5 jeq getpmsg 0049 (false 0010)
0010: 15 38 00 000000b6 jeq putpmsg 0049 (false 0011)
0011: 15 37 00 000000b2 jeq query_module 0049 (false 0012)
0012: 15 36 00 000000b9 jeq security 0049 (false 0013)
0013: 15 35 00 0000008b jeq sysfs 0049 (false 0014)
0014: 15 34 00 000000b8 jeq tuxcall 0049 (false 0015)
0015: 15 33 00 00000086 jeq uselib 0049 (false 0016)
0016: 15 32 00 00000088 jeq ustat 0049 (false 0017)
0017: 15 31 00 000000ec jeq vserver 0049 (false 0018)
0018: 15 30 00 0000009f jeq adjtimex 0049 (false 0019)
0019: 15 2f 00 00000131 jeq clock_adjtime 0049 (false 001a)
001a: 15 2e 00 000000e3 jeq clock_settime 0049 (false 001b)
001b: 15 2d 00 000000a4 jeq settimeofday 0049 (false 001c)
001c: 15 2c 00 000000b0 jeq delete_module 0049 (false 001d)
001d: 15 2b 00 00000139 jeq finit_module 0049 (false 001e)
001e: 15 2a 00 000000af jeq init_module 0049 (false 001f)
001f: 15 29 00 000000ad jeq ioperm 0049 (false 0020)
0020: 15 28 00 000000ac jeq iopl 0049 (false 0021)
0021: 15 27 00 000000f6 jeq kexec_load 0049 (false 0022)
0022: 15 26 00 00000140 jeq kexec_file_load 0049 (false 0023)
0023: 15 25 00 000000a9 jeq reboot 0049 (false 0024)
0024: 15 24 00 000000a7 jeq swapon 0049 (false 0025)
0025: 15 23 00 000000a8 jeq swapoff 0049 (false 0026)
0026: 15 22 00 000000a3 jeq acct 0049 (false 0027)
0027: 15 21 00 00000141 jeq bpf 0049 (false 0028)
0028: 15 20 00 000000a1 jeq chroot 0049 (false 0029)
0029: 15 1f 00 000000a5 jeq mount 0049 (false 002a)
002a: 15 1e 00 000000b4 jeq nfsservctl 0049 (false 002b)
002b: 15 1d 00 0000009b jeq pivot_root 0049 (false 002c)
002c: 15 1c 00 000000ab jeq setdomainname 0049 (false 002d)
002d: 15 1b 00 000000aa jeq sethostname 0049 (false 002e)
002e: 15 1a 00 000000a6 jeq umount2 0049 (false 002f)
002f: 15 19 00 00000099 jeq vhangup 0049 (false 0030)
0030: 15 18 00 000000ee jeq set_mempolicy 0049 (false 0031)
0031: 15 17 00 00000100 jeq migrate_pages 0049 (false 0032)
0032: 15 16 00 00000117 jeq move_pages 0049 (false 0033)
0033: 15 15 00 000000ed jeq mbind 0049 (false 0034)
0034: 15 14 00 00000130 jeq open_by_handle_at 0049 (false 0035)
0035: 15 13 00 0000012f jeq name_to_handle_at 0049 (false 0036)
0036: 15 12 00 000000fb jeq ioprio_set 0049 (false 0037)
0037: 15 11 00 00000067 jeq syslog 0049 (false 0038)
0038: 15 10 00 0000012c jeq fanotify_init 0049 (false 0039)
0039: 15 0f 00 00000138 jeq kcmp 0049 (false 003a)
003a: 15 0e 00 000000f8 jeq add_key 0049 (false 003b)
003b: 15 0d 00 000000f9 jeq request_key 0049 (false 003c)
003c: 15 0c 00 000000fa jeq keyctl 0049 (false 003d)
003d: 15 0b 00 000000ce jeq io_setup 0049 (false 003e)
003e: 15 0a 00 000000cf jeq io_destroy 0049 (false 003f)
003f: 15 09 00 000000d0 jeq io_getevents 0049 (false 0040)
0040: 15 08 00 000000d1 jeq io_submit 0049 (false 0041)
0041: 15 07 00 000000d2 jeq io_cancel 0049 (false 0042)
0042: 15 06 00 000000d8 jeq remap_file_pages 0049 (false 0043)
0043: 15 05 00 00000116 jeq vmsplice 0049 (false 0044)
0044: 15 04 00 00000087 jeq personality 0049 (false 0045)
0045: 15 03 00 00000143 jeq userfaultfd 0049 (false 0046)
0046: 15 02 00 00000065 jeq ptrace 0049 (false 0047)
0047: 15 01 00 00000136 jeq process_vm_readv 0049 (false 0048)
0048: 06 00 00 7fff0000 ret ALLOW
0049: 06 00 01 00000000 ret KILL
$ - --ccomp-error-action= kill | ERRNO | log
- بهطور پیشفرض، اگر یک فیلتر seccomp یک فراخوان سیستمی را مسدود سازد، فرآیند خطای EPERM را دریافت میکند. با --ccomp-error-action=error، شماره خطای دیگری مانند ENOSYS یا EACCES قابل بازگردانی است. همچنین میتوان فرآیند را (همانند نسخههای قبل از 0.9.63 نرمافزار Firejail) با ساختار --ccomp-error-action=kill متوقف کرد، یا تلاش صورتگرفته را با --ccomp-error-action=log ثبت نمود. متوقف نکردن فرآیند در هنگام مهار نفوذ اندکی Firejail را تضعیف میکند، ولی اگر تنها راهکار جایگزین مجاز دانستن یک فراخوان سیستمی باشد، امکان اعمال فیلترهای سختگیرانهتر را فراهم میسازد.
- --utdown=name|pid
- خاموش کردن
سندباکس
مشخصشده
با نام یا PID.
مثال:
$ firejail --0me=mygame --aps.drop=all /usr/bin/warzone2100 &
$ firejail --utdown=mygameمثال:
$ firejail --
3272:netblue::firejail --rivate
/usr/bin/firefox
$ firejail --utdown=3272 - --itrace[=name|pid]
- پایش
نشانگر نام
سرور (TLS/SNI).
سندباکس را
میتوان با
نام یا pid
مشخص کرد.
تنها
سندباکسهای
شبکهای
ایجادشده
با --0t
پشتیبانی
میشوند.
این گزینه
تنها هنگام
اجرای
سندباکس به
عنوان ریشه
در دسترس
است.
بدون مشخص کردن نام/pid، ابزار Firejail فضای نام شبکه اصلی سیستم را پایش خواهد کرد.
مثال:
$ sudo firejail --itrace
07:49:51 23.185.0.3 linux.com
07:49:51 23.185.0.3 www.linux.com
07:50:05 192.0.73.2 secure.gravatar.com
07:52:35 172.67.68.93 www.howtoforge.com
07:52:37 13.225.103.59 sf.ezoiccdn.com
07:52:42 142.250.176.3 www.gstatic.com
07:53:03 173.236.250.32 www.linuxlinks.com
07:53:05 192.0.77.37 c0.wp.com
07:53:08 192.0.78.32 jetpack.wordpress.com
07:53:09 192.0.77.32 s0.wp.com
07:53:09 192.0.77.2 i0.wp.com
07:53:10 192.0.77.2 i0.wp.com
07:53:11 192.0.73.2 1.gravatar.com - --ab
- فعالسازی
تکمیل با
کلید Tab در شل
درون
سندباکسهایی
که از
دایرکتوریهای
خانگی
خصوصی یا
موجود در
فهرست سفید
استفاده
میکنند.
$ firejail --rivate
--ab - --imeout=hh:mm:ss
- خاتمه
خودکار
سندباکس پس
از سپری شدن
زمان معین.
زمان در
قالب
ساعت:دقیقه:ثانیه
تعیین
میگردد.
$ firejail --imeout=01:30:00 /usr/bin/firefox
- --mpfs=dirname
- سوار کردن
یک سیستم
فایل موقتِ
قابلنوشتن
tmpfs بر روی
دایرکتوری
dirname.
دایرکتوریهای
خارج از
دایرکتوری
خانگی
کاربر یا
دایرکتوریهایی
که متعلق به
کاربر
نیستند
مجاز
نمیباشند.
سندباکسهای
در حال اجرا
به عنوان
ریشه از این
محدودیتها
مستثنی
هستند.
تطبیق
الگوی
فایلی
پشتیبانی
میشود،
برای
جزئیات
بیشتر بخش FILE
GLOBBING را
ببینید.
مثال:
$ firejail --mpfs=~/.local/share - --op
- پایش
سندباکسهای
دارای
بیشترین
میزان مصرف
پردازنده،
برای
جزئیات
بیشتر بخش
MONITORING را
ببینید.
مثال:
$ firejail --op - --race[=filename]
- ردگیری
فراخوانهای
سیستمی open، access
و connect. اگر filename
تعیین شده
باشد،
خروجی
ردگیری در filename
ذخیره
میشود؛ در
غیر این
صورت در
کنسول ثبت
میگردد.
مثال:
$ firejail --race /usr/bin/wget -q www.debian.org
Reading profile /etc/firejail/wget.profile
3:wget:fopen64 /etc/wgetrc:0x5c8e8ce6c0
3:wget:fopen /etc/hosts:0x5c8e8cfb70
3:wget:socket AF_INET SOCK_DGRAM IPPROTO_IP:3
3:wget:connect 3 8.8.8.8 port 53:0
3:wget:socket AF_INET SOCK_STREAM IPPROTO_IP:3
3:wget:connect 3 130.89.148.14 port 80:0
3:wget:fopen64 index.html:0x5c8e8d1a60parent is shutting down, bye...
همچنین --llow-debuggers و --rivate-etc
را ببینید. - --racelog
- این گزینه
بازرسی
فایلها و
دایرکتوریهای
قرارگرفته
در فهرست
سیاه را
فعال
میسازد. در
صورت
دسترسی به
فایل یا
دایرکتوری،
پیامی به syslog
فرستاده
میشود.
مثال:
$ firejail --racelog /usr/bin/firefoxپیامهای نمونه:
$ sudo tail -f /var/log/syslog
[...]
Dec 3 11:43:25 debian firejail[70]: blacklist violation - sandbox 26370, exe firefox, syscall open64, path /etc/shadow
Dec 3 11:46:17 debian firejail[70]: blacklist violation - sandbox 26370, exe firefox, syscall opendir, path /boot
[...]نکته: پشتیبانی از این دستور در firejail.config با گزینه tracelog کنترل میشود.
- --ree
- چاپ ساختار
درختی
تمامی
فرآیندهای
درون
سندباکس،
برای
جزئیات
بیشتر بخش
MONITORING را
ببینید.
مثال:
$ firejail --ree
11903:netblue:firejail /usr/bin/iceweasel
11904:netblue:iceweasel
11957:netblue:/usr/lib/iceweasel/plugin-container
11969:netblue:firejail --0t=eth0 /usr/bin/transmission-gtk
11970:netblue:transmission-gtk - --nhide-pid1
- شناسه
فرآیند ۱ (Pid 1)
همواره
درون
سندباکس Firejail
وجود دارد.
با محدود
ساختن
دسترسی به
رابط هسته
/proc،
ابزارهای
عمومی
مانند ps
قادر به
مشاهده و
دسترسی به
این فرآیند
نیستند.
گزینه --nhide-pid1
این قابلیت
را غیرفعال
میسازد.
مثال:
$ firejail --0me=test ### به صورت پیشفرض pid 1 قابل مشاهده نیست
[...]
Child process initialized in 59.41 ms
$ ps a
PID TTY STAT TIME COMMAND
4 ? S 0:00 /bin/bash
5 ? R+ 0:00 ps a
$ exit
Parent is shutting down, bye…$ firejail --0me=test --nhide-pid1 ### اکنون pid 1 قابل مشاهده است
[...]
Child process initialized in 58.29 ms
$ ps a
PID TTY STAT TIME COMMAND
1 ? S 0:00 firejail --0me=test --nhide-pid1
4 ? S 0:00 /bin/bash
6 ? R+ 0:00 ps a
$ exit
Parent is shutting down, bye… - --
- چاپ نسخه
برنامه/پشتیبانی
زمان
کامپایل و
خروج.
مثال:
$ firejail --
firejail version 0.9.27Compile time support:
- AppArmor support is enabled
- AppImage support is enabled
- chroot support is enabled
- file and directory whitelisting support is enabled
- file transfer support is enabled
- firetunnel support is enabled
- networking support is enabled
- private-home support is enabled
- seccomp-bpf support is enabled
- user namespace support is enabled
- X11 sandboxing support is enabled
- --=name
- استفاده از
این نام
برای رابط
متصل به پل
برای
دستورات
--0t=bridge_interface به جای
نام
پیشفرض.
مثال:
$ firejail --0t=br0 --=if0 - --648
- قرار دادن
دایرکتوری
یا فایل در
فهرست سفید.
یک سیستم
فایل موقت
بر روی
دایرکتوری
بالادست (top directory)
سوار
میشود. در
زمینه
عملکرد firejail،
دایرکتوری
بالادست
بدین
معناست که
اگر مسیر
فایل موجود
در فهرست
سفید برای
نمونه /etc/somedir/somefile
باشد،
آنگاه
دایرکتوری
بالادست /etc
خواهد بود.
تمام
دایرکتوریهای
بالادست
دیگر مانند
/opt، /usr و غیره
تغییر
نیافته
باقی
میمانند،
بنابراین
تمامی
فایلهای
موجود در
آنها
همچنان
قابلدسترس
خواهند
بود، مگر
اینکه
فایلی یا
دایرکتوری
در درون
آنها نیز
در فهرست
سفید قرار
گیرد. به
همین دلیل
گاهی اوقات
استفاده از
فهرست سیاه
در ترکیب با
فهرست سفید
در صورتی که
برای
دایرکتوریهای
بالادست
متفاوتی به
کار روند
سودمند است.
فایلهای قرارگرفته در فهرست سفید به صورت mount-bind در داخل متصل میشوند. تغییرات روی فایلهای فهرست سفید ماندگار هستند؛ هر چیز دیگری در همان دایرکتوری بالادست هنگام بستن سندباکس دور ریخته میشود.
دایرکتوری بالادست میتواند اکثر دایرکتوریهای موجود در / باشد، اما برخی موارد خاص نیز وجود دارد. دایرکتوریهای بالادست /proc و /sys مجاز نیستند، اما /sys/module مجاز است. همچنین /run/user/$UID، $HOME و تمامی دایرکتوریهای موجود در /usr به عنوان دایرکتوری بالادست تلقی میشوند.
مدیریت پیوندهای نمادین: قرار دادن مسیری که یک پیوند نمادین است در فهرست سفید، مسیری را نیز که به آن اشاره دارد در فهرست سفید قرار خواهد داد. برای نمونه، اگر ~/foo در فهرست سفید قرار گیرد و به ~/bar اشاره کند، ~/bar نیز در فهرست سفید قرار میگیرد.
محدودیتها: به استثنای دایرکتوری خانه کاربر، هر دو پیوند و فایل واقعی باید در یک دایرکتوری بالادست قرار داشته باشند. برای پیوندهای نمادین در دایرکتوری خانه کاربر، هر دو پیوند و فایل واقعی باید متعلق به کاربر باشند.تطبیق الگوی فایلی (Globbing) پشتیبانی میشود، برای جزئیات بیشتر بخش FILE GLOBBING را ببینید.
مثال:
$ firejail --0profile --432
$ firejail --672
$ firejail --240ome/username/My Virtual Machines"
$ firejail --216ome/username/My\ Virtual\ Machines
$ firejail --504 - --240
- سوار کردن
دایرکتوری
/etc به صورت
خواندنی-نوشتنی.
مثال:
$ sudo firejail --240 - --168un-user
- غیرفعالسازی
قرارگیری
پیشفرض
/run/user/$UID/systemd و /run/user/$UID/gnupg در
فهرست سیاه.
مثال:
$ sudo firejail --168un-user - --216
- سوار کردن
دایرکتوری
/var به صورت
خواندنی-نوشتنی.
مثال:
$ sudo firejail --216 - --216-log
- استفاده از
دایرکتوری
واقعی /var/log به
جای نسخه
شبیهسازیشده
آن. بهطور
پیشفرض یک
tmpfs بر روی
دایرکتوری
/var/log سوار
میشود و یک
سیستم فایل
اسکلتی بر
اساس /var/log اصلی
ساخته
میشود.
مثال:
$ sudo firejail --216-log - --1
- قرار دادن
برنامه در
سندباکس با
استفاده از
افزونههای
امنیتی Xpra،
Xephyr، Xvfb یا Xorg. این
سندباکس از
دسترسی
برنامههای
عکسبرداری
از صفحه و
ثبتکننده
کلید
(کیلاگر)
اجراشده در
داخل
سندباکس به
کلاینتهای
در حال اجرا
در خارج از
سندباکس
ممانعت به
عمل
میآورد.
ابزار Firejail
ابتدا Xephyr را
امتحان
میکند، و
اگر روی
سیستم نصب
نباشد، Xpra را
جستجو
خواهد کرد.
اگر
هیچکدام
یافت نشد، Firejail
تلاشی برای
استفاده از
Xvfb یا افزونه
امنیتی X11
نخواهد
نمود.
حالتهای Xpra، Xephyr و Xvfb برای غیرفعال ساختن سوکت یونیکس انتزاعی X11 نیازمند نمونهسازی از یک فضای نام شبکه هستند. اگر این امر مقدور نباشد، کاربر میتواند سوکت انتزاعی را با افزودن "-nolisten local" در خط فرمان Xorg در سطح سیستم غیرفعال نماید.
مثال:
$ firejail --1 --0t=eth0 /usr/bin/firefox - --1=none
- قرار دادن دایرکتوری /tmp/.X11-unix، فایل ${HOME}/.Xauthority و فایل مشخصشده در متغیر محیطی ${XAUTHORITY} در فهرست سیاه. حذف متغیرهای محیطی DISPLAY و XAUTHORITY. توقف با پیام خطا در صورتی که سوکت انتزاعی X11 در سندباکس قابل دسترس باشد.
- --1=xephyr
- راهاندازی
Xephyr و متصل
کردن
سندباکس به
این سرور.
سرور Xephyr یک
سرور نمایش
است که
پروتکل
سرور نمایش
X11 را
پیادهسازی
میکند. جهت
سلب دسترسی
به سوکت
دامنه
یونیکس
انتزاعی X11،
یک فضای نام
شبکه باید
نمونهسازی
شود.
سرور Xephyr درست همانند هر برنامه X11 دیگری در یک پنجره اجرا میشود. اندازه پیشفرض پنجره 800x600 است. این مورد در فایل /etc/firejail/firejail.config قابل تغییر است.
شیوه پیشنهادی برای بهرهگیری از این ویژگی اجرای یک مدیر پنجره درون سندباکس است. یک پروفایل امنیتی برای OpenBox ارائه شده است.
سرور Xephyr توسط پروژه Xorg توسعه داده شده است. در سیستمهای دبیان با دستور sudo apt-get install xserver-xephyr نصب میگردد. این قابلیت هنگام اجرا با دسترسی ریشه در دسترس نیست.
مثال:
$ firejail --1=xephyr --net=eth0 /usr/bin/openbox - --1=xorg
- قرار دادن
برنامه در
سندباکس با
استفاده از
حالت
غیرقابلاعتمادِ
پیادهسازیشده
توسط
افزونه
امنیتی X11.
این افزونه
در بسته Xorg
ارائه شده و
به صورت
پیشفرض در
اکثر
توزیعهای
لینوکس نصب
است. این
افزونه از
یک مدل
ارتباطی
ساده
معتمد/نامعتمد
پشتیبانی
میکند.
کلاینتهای
غیرقابلاعتماد
از روشهای
خاصی برای
جلوگیری از
خواندن
محتوای
پنجرههای
سایر
کلاینتها،
ربودن
رویدادهای
ورودی و
غیره محدود
میشوند.
حالت غیرقابلاعتماد دارای چندین محدودیت است. بسیاری از برنامههای متداول فرض میکنند که یک کلاینت مورد اعتماد X11 هستند و در صورت اجرا در حالت غیرقابلاعتماد دچار خرابی یا قفل میشوند. مرورگر Chromium و xterm دو نمونه از این دست هستند. به نظر میرسد Firefox و transmission-gtk به خوبی کار میکنند. برای این گزینه به یک فضای نام شبکه نیازی نیست.
مثال:
$ firejail --1=xorg /usr/bin/firefox - --1=xpra
- راهاندازی
Xpra (ببینید
https://xpra.org) و
متصل ساختن
سندباکس به
این سرور.
ابزار Xpra یک
سرور نمایش
و کلاینت
راه دور
ماندگار
برای هدایت
برنامههای
X11 و صفحات
دسکتاپ است.
برای سلب
دسترسی به
سوکت دامنه
یونیکس
انتزاعی X11
نیاز به
نمونهسازی
یک فضای نام
شبکه است.
در پلتفرمهای دبیان ابزار Xpra با دستور sudo apt-get install xpra نصب میشود. این ویژگی هنگام اجرا با دسترسی ریشه در دسترس نیست.
مثال:
$ firejail --1=xpra --0t=eth0 /usr/bin/firefox - --1=xvfb
- راهاندازی
سرور X11 یعنی Xvfb
و متصل کردن
سندباکس به
این سرور.
سرور Xvfb که
مخفف X virtual framebuffer
است، تمامی
عملیات
گرافیکی را
در حافظه و
بدون نمایش
هیچگونه
خروجی روی
صفحه انجام
میدهد.
سرور Xvfb
عمدتاً
برای
دسترسی راه
دور و آزمون
نرمافزار
روی
سرورهای
فاقد
نمایشگر (headless)
به کار
میرود.
در پلتفرمهای دبیان Xvfb با دستور sudo apt-get install xvfb نصب میگردد. این قابلیت هنگام اجرا با دسترسی ریشه در دسترس نمیباشد.
مثال: دسترسی راه دور با VNC
روی سرور یک سندباکس را با استفاده از Xvfb و مدیر پنجره openbox راهاندازی میکنیم. اندازه پیشفرض صفحه Xvfb برابر 800x600 است که میتواند در /etc/firejail/firejail.config (xvfb-screen) تغییر یابد. نوعی شبکه (--net) به منظور جداسازی سوکتهای انتزاعی مورد استفاده سایر سرورهای X مورد نیاز است.
$ firejail --0t=none --1=xvfb /usr/bin/openbox
*** Attaching to Xvfb display 792 ***
Reading profile /etc/firejail/openbox.profile
Reading profile /etc/firejail/disable-common.inc
Reading profile /etc/firejail/disable-common.local
Parent pid 5400, child pid 5401بر روی سرور همچنین یک سرور VNC را آغاز کرده و آن را به نمایشگری که توسط سرور Xvfb ما مدیریت میشود (792) متصل میکنیم.
$ x11vnc -display :792
روی ماشین کلاینت یک نرمافزار مشاهده VNC اجرا کرده و با استفاده از آن به سرور خود متصل میشویم:
$ vncviewer
- --xtra-params=OPTIONS
- تنظیم
پارامترهای
اضافی
دستور سرور
Xephyr برای --1=xephyr.
این تنظیم
مقدار
پیشفرض
تعیینشده
در /etc/firejail/firejail.config را
برای
سندباکس
جاری
رونویسی
میکند. جهت
مشاهده
فهرست
گزینههای
موجود Xephyr -help را
اجرا
فرمایید.
مثال:
$ firejail --0t=eth0 --1=xephyr --xtra-params="-title firefox" /usr/bin/firefox - --en=WIDTHxHEIGHT
- تنظیم
اندازه
صفحه نمایش
برای --1=xephyr. این
تنظیم
مقدار
پیشفرض در
/etc/firejail/firejail.config را
برای
سندباکس
جاری
رونویسی
میکند. جهت
دریافت
فهرست
وضوحهای
پشتیبانیشده
روی رایانه
خود xrandr را
اجرا
نمایید.
مثال:
$ firejail --0t=eth0 --1=xephyr --en=640x480 /usr/bin/firefox
اپآرمور (APPARMOR)
- پشتیبانی از AppArmor به طور پیشفرض در زمان کامپایل غیرفعال است. از گزینه پیکربندی --\nable-apparmor برای فعالسازی آن استفاده کنید:
-
$ ./configure --refix=/usr
--\nable-apparmor - در زمان نصب نرمافزار، یک فایل پروفایل عمومی AppArmor به نام firejail-default در دایرکتوری /etc/apparmor.d قرار داده میشود. سفارشیسازیهای محلی باید در /etc/apparmor.d/local/firejail-local قرار گیرند. این پروفایل باید با بارگذاری مجدد apparmor.service، راهاندازی مجدد سیستم یا اجرای دستور زیر به عنوان کاربر ریشه در هسته بارگذاری شود:
-
# apparmor_parser -r /etc/apparmor.d/firejail-default
- پروفایل نصبشده مکمل عملکردهای اصلی firejail است و علاوه بر سایر موارد، اقدامات زیر را انجام میدهد:
-
- غیرفعال کردن ptrace. با ptrace امکان بازرسی و ربودن برنامههای در حال اجرا وجود دارد. معمولاً این قابلیت فقط برای اشکالزدایی مورد نیاز است. شما نباید مشکلی در اجرای Chromium یا Firefox داشته باشید. این ویژگی فقط روی هستههای اوبونتو در دسترس است.
- قرار دادن دسترسی نوشتن به چندین فایل در زیر مسیرهای /run، /proc و /sys در فهرست سفید.
- اجازه اجرای برنامهها تنها از مسیرهای شناختهشده سیستم، مانند /bin، /sbin، /usr/bin و غیره. این مسیرها به صورت فقطخواندنی در دسترس هستند. اجرای برنامهها و اسکریپتها از دایرکتوری خانگی کاربر یا سایر دایرکتوریهای قابلنوشتن توسط کاربر مجاز نیست.
- جلوگیری از استفاده از سوکتهای شبکه غیراستاندارد. تنها سوکتهای unix، inet، inet6، netlink، raw و packet مجاز هستند.
- رد دسترسی به مسیرهای حساس شناختهشده مانند .snapshots.
- جهت فعالسازی محدودسازی AppArmor بر روی ویژگیهای امنیتی فعلی Firejail خود، فلگ --pparmor را به خط فرمان Firejail ارسال کنید. همچنین میتوانید دستور apparmor را در یک فایل پروفایل Firejail درج فرمایید. مثال:
-
$ firejail --apparmor /usr/bin/firefox
یکپارچهسازی با میزکار (DESKTOP INTEGRATION)
یک پیوند نمادین به /usr/bin/firejail با نام یک برنامه، آن برنامه را درون سندباکس Firejail اجرا خواهد کرد. پیوند نمادین باید در نخستین موقعیت متغیر $PATH قرار گیرد. در اکثر سیستمها، یک مکان مناسب دایرکتوری /usr/local/bin است. مثال:
ایجاد یک پیوند نمادین firefox به /usr/bin/firejail:
$ sudo ln -s /usr/bin/firejail /usr/local/bin/firefox
بررسی $PATH:
$ which -a firefox
/usr/local/bin/firefox
/usr/bin/firefox
اجرای firefox در این لحظه، به طور خودکار “firejail /usr/bin/firefox” را فراخوانی میکند.
این سازوکار هنگام کلیک کردن روی آیکونهای محیط میزکار، منوها و غیره کار میکند. از "firejail --ree" برای بررسی سندباکس بودن برنامه استفاده نمایید.
$ firejail --ree
1189:netblue:firejail /usr/bin/firefox
1190:netblue:firejail /usr/bin/firefox
1220:netblue:/bin/sh -c "/usr/lib/firefox/firefox"
1221:netblue:/usr/lib/firefox/firefox
ما ابزاری ارائه میدهیم که تمام این یکپارچهسازی را به صورت خودکار انجام میدهد؛ لطفاً برای جزئیات بیشتر به firecfg(1) مراجعه کنید.
مثالها (EXAMPLES)
- firejail
- اجرای یک نشست شل معمولی در سندباکس.
- firejail /usr/bin/firefox
- اجرای Mozilla Firefox.
- firejail --ebug /usr/bin/firefox
- اشکالزدایی سندباکس Firefox.
- firejail --rivate
/usr/bin/firefox - اجرای Firefox با یک دایرکتوری خانگی جدید و خالی.
- firejail --0t=none /usr/bin/vlc
- اجرای VLC در یک فضای نام شبکه متصلنشده.
- firejail --0t=eth0 /usr/bin/firefox
- اجرای Firefox در یک فضای نام جدید شبکه. یک آدرس IP به صورت خودکار تخصیص مییابد.
- firejail --0t=br0 --ip=10.10.20.5 --0t=br1 --0t=br2
- شروع یک نشست شل در یک فضای نام جدید شبکه و اتصال آن به دستگاههای پل میزبان br0، br1 و br2. آدرسهای IP به صورت خودکار برای رابطهای متصل به br1 و br2 تخصیص مییابند.
- firejail --
- فهرست کردن تمامی فرآیندهای درون سندباکس.
تطبیق الگوی فایل (FILE GLOBBING)
- تطبیق الگو (Globbing) عملیاتی است که یک الگوی کاراکتر عمومی را به فهرستی از مسیرهای مطابق با الگو بسط میدهد. این الگو در زمان شروع firejail مطابقت داده میشود و در زمان اجرا بهروزرسانی نمیشود. فایلهایی که با یک فهرست سیاه مطابقت دارند اما پس از شروع firejail ایجاد میشوند، درون سندباکس قابل دسترس خواهند بود. مطابقت به صورت زیر تعریف میشود:
-
- '?' با هر تکنویسهای مطابقت دارد
- '*' با هر رشتهای مطابقت دارد
- '[' محدودهای از نویسهها را مشخص میکند
- قابلیت تطبیق الگو با استفاده از دستور glob در glibc پیادهسازی شده است. برای اطلاعات بیشتر در مورد نحو نویسههای عمومی به man 7 glob مراجعه فرمایید.
- گزینههای
زیر در خط
فرمان
پشتیبانی
میشوند: --ist،
--rivate-bin،
--0exec، --ead-only، --ead-write، --mpfs و --192 - مثالها:
-
$ firejail --rivate-bin=sh,bash,python*
$ firejail --ist=~/dir[1234]
$ firejail --ead-only=~/dir[1-4]
انتقال فایل (FILE TRANSFER)
این قابلیتها به کاربر اجازه میدهند تا سیستم فایل ظرفِ یک سندباکس موجود را بازرسی نموده و فایلها را میان ظرف و سیستم فایل میزبان منتقل سازد.
- --at=name|pid filename
- نوشتن محتوای یک فایل درون ظرف در خروجی استاندارد. ظرف با نام یا PID مشخص میشود. اگر خروجی استاندارد یک ترمینال باشد، تمامی نویسههای کنترلی ASCII به جز خط جدید و تب افقی جایگزین میشوند.
- --t=name|pid filename
- دریافت فایل از ظرف و ذخیره آن روی میزبان در دایرکتوری کاری جاری. ظرف با نام یا PID مشخص میشود.
- --
- فهرست کردن فایلهای ظرف. ظرف با نام یا PID مشخص میشود.
- --ut=name|pid
src-filename dest-filename - قرار دادن src-filename در ظرف سندباکس. ظرف با نام یا PID مشخص میشود.
- مثالها:
-
$ firejail --0me=mybrowser --rivate
/usr/bin/firefox$ firejail --er ~/Downloads
drwxr-xr-x netblue netblue 4096 .
drwxr-xr-x netblue netblue 4096 ..
-rw-r--r-- netblue netblue 7847 x11-x305.png
-rw-r--r-- netblue netblue 6800 x11-x642.png
-rw-r--r-- netblue netblue 34139 xpra-clipboard.png$ firejail --t=mybrowser ~/Downloads/xpra-clipboard.png
$ firejail --ut=mybrowser
xpra-clipboard.png ~/Downloads/xpra-clipboard.png$ firejail --at=mybrowser ~/.bashrc
لندلاک (LANDLOCK)
هشدار: پشتیبانی از Landlock در firejail آزمایشی و ناپایدار تلقی میشود. محتویات landlock-common.inc احتمالاً تغییر خواهد کرد و این قابلیت همچنان در هسته لینوکس در حال گسترش است. همچنین توجه داشته باشید که عملکرد آن با قابلیتهای موجود در firejail مانند دستورات blacklist، read-only و read-write همپوشانی دارد. قواعد دسترسی به سیستم فایل آن در حال حاضر تنها میتواند دسترسی مستقیم به مسیرها را محدود سازد؛ قادر نیست همانند دستورات whitelist و private-etc تنها مسیرهای برگزیده را در سندباکس نمایان کند (همچنین unveil(2) را در OpenBSD ببینید). در نهایت، توجه داشته باشید که بسته به نسخه هسته لینوکس، ممکن است Landlock از تمامی فراخوانهای سیستمی مربوطه محافظت به عمل نیاورد (برای جزئیات مستندات Landlock در هسته را بررسی فرمایید). از این رو، توصیه میشود با Landlock به عنوان یک لایه حفاظتی تکمیلی برخورد شود تا همراه با سایر قابلیتهای firejail به کار رود (نه به عنوان یک سازوکار کاملاً نفوذناپذیر به تنهایی).
ماژول امنیتی Landlock یک ماژول امنیتی لینوکس است که نخستین بار در نگارش 5.13 هسته لینوکس معرفی گردید. این ابزار به فرآیندهای بدون امتیاز اجازه میدهد تا دسترسی خود به سیستم فایل را محدود سازند. پس از اعمال، این محدودیتها هرگز قابل لغو نیستند، و کلیه فرآیندهای فرزند ایجادشده توسط یک فرآیند محدودشده با Landlock این محدودیتها را به ارث میبرند. ابزار Firejail از Landlock به عنوان یک ویژگی سندباکس تکمیلی پشتیبانی میکند. میتوان از آن جهت اطمینان از اینکه یک برنامه سندباکسشده تنها قادر است به فایلها و دایرکتوریهایی که صراحتاً مجاز دانسته شدهاند دسترسی یابد، استفاده کرد. دستور Firejail از بارگذاری مجموعه قوانین چه با یک مجموعه قوانین پایهای (landlock-common.inc را ببینید) و چه با یک مجموعه قوانین سفارشی پشتیبانی میکند.
- نکات مهم:
- اگر در خط فرمان هسته از "lsm=" استفاده شده باشد، باید حاوی "landlock" باشد (مانند "lsm=apparmor,landlock")، در غیر این صورت غیرفعال خواهد بود.
- یک فرآیند تنها در صورتی میتواند یک مجموعه قوانین Landlock را نصب کند که یا دارای CAP_SYS_ADMIN در مجموعه قابلیتهای مؤثر خود باشد، یا محدودیت "No New Privileges" برای آن فعال شده باشد. به همین دلیل، فعالسازی قابلیت Landlock همچنین موجب خواهد شد Firejail محدودیت "No New Privileges" را صرفنظر از فایل پروفایل یا گزینه خط فرمان --0newprivs فعال سازد.
- دسترسی
به
دایرکتوری
/etc به طور
خودکار
مجاز است.
جهت
بازنویسی
این رفتار،
از گزینه خط
فرمان --576
همچنین
میتوانید
از گزینه
--rivate-etc
جهت محدود
ساختن
دسترسی به
دایرکتوری
/etc بهره
ببرید.
جهت فعالسازی خودمحدودسازی Landlock افزون بر قابلیتهای امنیتی فعلی Firejail خود، فلگ --il ارسال فرمایید. بدون این گزینه، سایر دستورات Landlock تاثیری نخواهند داشت. مثال:
$ firejail -- /usr/bin/mc
جهت غیرفعالسازی خودمحدودسازی Landlock، از --ignore=landlock.enforce استفاده نمایید.
پایش (MONITORING)
گزینه --
PID:USER:Sandbox Name:Command
گزینه --ree ساختار درختی فرآیندهای در حال اجرا در سندباکس را چاپ میکند. قالب هر مدخل فرآیند به قرار زیر است:
PID:USER:Sandbox Name:Command
گزینه --op شبیه به دستور top در یونیکس است، با این تفاوت که تنها روی سندباکسها اعمال میشود.
گزینه --0tstats آمارهای شبکه را برای سندباکسهای فعالی که فضاهای نام جدید شبکه نصب کردهاند چاپ میکند.
فیلدهای (ستونهای) در دسترس به ترتیب الفبا برای گزینههای --op و --0tstats به شرح زیر هستند:
- Command
- دستوری که برای راهاندازی سندباکس به کار رفته است.
- CPU%
- میزان مصرف پردازنده، سهم سندباکس از زمان سپریشده پردازنده از آخرین بهروزرسانی صفحه.
- PID
- شناسه یکتای فرآیند (PID) برای وظیفه کنترلکننده سندباکس.
- Prcs
- تعداد فرآیندهای در حال اجرا در سندباکس، از جمله فرآیند کنترلکننده.
- RES
- اندازه حافظه مقیم (KiB)، حافظه فیزیکی سواپنشده سندباکس. این مقدار مجموع مقادیر RES برای تمامی فرآیندهای در حال اجرا در سندباکس است.
- RX(KB/s)
- سرعت دریافت شبکه.
- Sandbox Name
- نام سندباکس، در صورت وجود.
- SHR
- اندازه حافظه اشتراکی (KiB)، حافظه به اشتراک گذاشتهشده با سایر فرآیندها را منعکس میسازد. این مقدار مجموع مقادیر SHR برای تمامی فرآیندهای در حال اجرا در سندباکس، از جمله فرآیند کنترلکننده است.
- TX(KB/s)
- سرعت ارسال شبکه.
- Uptime
- مدتزمان کارکرد سندباکس در قالب ساعت:دقیقه:ثانیه.
- USER
- مالک سندباکس.
اعتبارسنجی نام (NAME VALIDATION)
برای سادگی، اعتبارسنجی نام یکسانی برای گزینههای متعدد به کار گرفته میشود. قوانین:
طول نام باید بین ۱ تا ۲۵۳ نویسه باشد. نام تنها میتواند شامل حروف ASCII، ارقام و نویسههای ویژه "-._" باشد (یعنی نام نمیتواند حاوی فاصلهها یا نویسههای کنترلی باشد). نام نمیتواند تنها از ارقام تشکیل شده باشد. نویسههای نخست و پایانی باید یک حرف ASCII یا رقم باشند و نام میتواند نویسههای ویژه را در میانه خود جای دهد.
پوسته محدود (RESTRICTED SHELL)
برای پیکربندی یک شل محدودشده، /bin/bash را با /usr/bin/firejail در فایل /etc/passwd برای هر کاربری که باید محدود گردد جایگزین نمایید. همچنین میتوانید /usr/bin/firejail را در دستور adduser مشخص کنید:
adduser --ell /usr/bin/firejail username
آرگومانهای اضافی ارسالی به باینری اجرایی firejail پس از ورود، در فایل /etc/firejail/login.users اعلان میشوند.
شکلدهی ترافیک (TRAFFIC SHAPING)
پهنای باند شبکه یک منبع گرانبها است که میان تمامی سندباکسهای در حال اجرا بر روی یک سیستم به اشتراک گذاشته میشود. شکلدهی ترافیک به کاربر امکان میدهد با کنترل میزان دادههای ورودی و خروجی به سندباکسها، عملکرد شبکه را بهبود بخشد.
ابزار Firejail یک شکلدهنده محدودکننده نرخ ساده بر پایه دستور tc لینوکس پیادهسازی میکند. این شکلدهنده در سطح سندباکس عمل میکند و تنها برای سندباکسهای پیکربندیشده با فضاهای نام جدید شبکه قابل استفاده است.
تنظیم محدودیتهای نرخ:
$ firejail --me|pid set network download upload
پاک کردن محدودیتهای نرخ:
$ firejail --me|pid clear network
وضعیت:
$ firejail --me|pid status
که در آن:
name - نام
سندباکس
pid - شناسه
فرآیند (pid)
سندباکس
network - رابط شبکه
همانطور
که توسط
گزینه --0t
استفاده
شده است
download - سرعت
دانلود به KB/s
(کیلوبایت
بر ثانیه)
upload - سرعت
آپلود به KB/s
(کیلوبایت
بر ثانیه)
مثال:
$ firejail --0me=mybrowser --0t=eth0 /usr/bin/firefox &
$ firejail --
$ firejail --tus
$ firejail --r eth0
مجوز (LICENSE)
این برنامه نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط مجوز عمومی همگانی گنو (GNU General Public License) همانگونه که توسط بنیاد نرمافزارهای آزاد منتشر شده است، چه نسخه ۲ مجوز یا (به انتخاب خود) هر نسخه بعدی، بازتوزیع نموده و/یا تغییر دهید.
صفحه وب: https://firejail.wordpress.com
همچنین ببینید (SEE ALSO)
firemon(1), firecfg(1), firejail-profile(5), firejail-login(5), firejail-users(5), jailcheck(1)
https://github.com/netblue30/firejail/wiki, https://github.com/netblue30/firejail
| Mar 2026 | 0.9.80 |