SYD-LOCK(1) General Commands Manual SYD-LOCK(1)

syd-lock - اجرای برنامه تحت لایه ایزولاسیون امنیتی landlock

syd-lock [-bchrvwASUV] [-C level] [-E errata] [-F flag]... [-l category[,category...]{+|-}path|port[-port][,port[-port]...]]... {command [args...]}

ابزار syd-lock یک برنامه را تحت لایه امنیتی landlock(7) اجرا می‌کند. برنامه توسط دسته‌بندی‌های ارائه‌شده landlock(7) محدود (ایزوله) می‌شود. دسته‌بندی‌های پشتیبانی‌شده عبارتند از: read، write، exec، ioctl، create، delete، rename، symlink، truncate، readdir، mkdir، rmdir، mkbdev، mkcdev، mkfifo، bind و connect. دسته‌بندی‌های غیر از bind و connect باید مسیرهایی را برای محدودسازی مشخص کنند. هر دو مسیر مطلق و نسبی مجاز هستند. مسیر نباید شامل پیوندهای نمادین جادویی (magic symbolic links) یا مؤلفه‌های والد («..») باشد. مسیر مجاز است شامل پیوندهای نمادین معمولی باشد. این پیوندهای نمادین معمولی مجاز هستند به مقاصدی ارجاع دهند که حاوی مؤلفه‌های والد («..») هستند. دسته‌بندی‌های bind و connect باید یک پورت شبکه، یک محدوده پورت بسته که با خط تیره جدا شده است، یا فهرستی از پورت‌ها و محدوده‌های جداشده با کاما را مشخص کنند. صفر نیز یک شماره پورت معتبر برای محدودسازی اتصال‌ها و پیوندها به پورت‌های موقت (ephemeral) است. دسته‌بندی bind همچنین از مسیرهای مطلق سوکت‌های یونیکس دامین (UNIX domain socket) برای محدود کردن ایجاد آن‌ها از طریق mknod(2) پشتیبانی می‌کند. برای جزئیات کامل و رفتار خاص هر دسته‌بندی landlock(7)، به بخش‌های Sandboxing و Lock Sandboxing در صفحه راهنمای syd(7) مراجعه کنید.

-h نمایش راهنما.
-v حالت پرگو (verbose). چاپ وضعیت landlock(7) در stderr(3) پیش از اجرای برنامه.
-V چاپ نسخه ABI مربوط به landlock(7) در stdout(3).
-A چاپ نسخه ABI مربوط به landlock(7) در stdout(3) و خروج با استفاده از آن به عنوان کد خروج. مناسب برای اسکریپت‌نویسی.
-l cat[,cat...]{+|-}path|port[-port] افزودن یا حذف یک قاعده landlock(7) به همراه دسته‌بندی‌ها و یک منبع مرتبط (مسیر یا پورت)، این گزینه قابل تکرار است.
دسته‌بندی‌ها و منابع را با استفاده از «+» (مثبت) برای افزودن یا «-» (منفی) برای حذف به یکدیگر متصل کنید.
منبع باید برای تمام دسته‌بندی‌ها به جز bind و connect یک مسیر باشد.
منبع برای bind و connect باید یک پورت، یک محدوده پورت بسته که با خط تیره جدا شده، یا فهرستی از پورت‌ها و محدوده‌ها جداشده با کاما باشد.
منبع همچنین می‌تواند یک مسیر سوکت یونیکس دامین برای bind جهت محدود کردن mknod(2) با S_IFSOCK باشد.
منبع همچنین می‌تواند یک مسیر سوکت یونیکس دامین برای connect جهت محدود کردن connect(2) و sendmsg(2) به سوکت‌های ایجادشده خارج از دامین باشد.
مسیرهای مطلق و نسبی برای تمام دسته‌بندی‌ها به جز bind و connect مجاز هستند؛ این دو مورد نیازمند مسیر مطلق می‌باشند.
مسیرها به صورت مجموعه درهم‌سازی‌شده و پورت‌ها به صورت مجموعه‌های بیتی ثابت ذخیره می‌شوند تا انباشت گزینه‌ها ساده و قابل پیش‌بینی باشد.
-C level تنظیم سطح سازگاری landlock(7). باید یکی از مقادیر hard-requirement، soft-requirement و best-effort باشد.
مقدار پیش‌فرض hard-requirement است تا اصل امنیت پیش‌فرض رعایت شود.
سطح را می‌توان به شکل کوتاه به صورت hard (یا h)، soft (یا s) و best (یا b) مشخص کرد.
-E errata استعلام اصلاحات خطای (errata) پشتیبانی‌شده در landlock(7). از -E list برای چاپ فهرستی از خطاهای شناخته‌شده استفاده کنید.
آرگومان می‌تواند یک نام یا یک شماره باشد. از یک شماره برای استعلام خطاهای تعریف‌نشده استفاده کنید.
می‌توان چندین خطا را با کاما از هم جدا و مشخص کرد.
-F flags تنظیم فلگ‌های landlock_restrict_self(2). از -F list برای چاپ فهرستی از فلگ‌ها استفاده کنید.
برای اطلاعات بیشتر درباره فلگ‌ها و کارکرد آن‌ها، بخش FLAGS را ببینید.
-S فعال‌سازی سیگنال‌های محدودشده (scoped signals) که در landlock(7) ABI 6 معرفی شدند.
-U فعال‌سازی سوکت‌های انتزاعی یونیکس محدودشده (scoped UNIX abstract sockets) که در landlock(7) ABI 6 معرفی شدند.
-r path مشخص کردن یک مسیر فقط‌خواندنی، قابل تکرار است. معادل با -l read,readdir,exec,ioctl+path است.
-w path مشخص کردن یک مسیر خواندن-نوشتن، قابل تکرار است. معادل با -l all+path است.
-b port[-port][,port[-port]...] مشخص کردن پورت(ها) برای bind(2)، قابل تکرار است. معادل با -l bind+port است.
-c port[-port][,port[-port]...] مشخص کردن پورت(ها) برای connect(2)، قابل تکرار است. معادل با -l connect+port است.

دسته‌بندی‌های landlock(7) و منابع مرتبط با آن‌ها (مسیرها یا پورت‌ها) با گزینه -l مشخص می‌شوند. این گزینه یک فهرست جداشده با کاما از دسته‌بندی‌ها را دریافت می‌کند که پس از آن یکی از نمادهای «+» (مثبت) یا «-» (منفی) می‌آید که نشان‌دهنده افزودن یا حذف قاعده داده‌شده است. مجموعه‌های قواعد، مسیرها را به عنوان مجموعه درهم‌سازی‌شده و پورت‌ها را به عنوان مجموعه‌های بیتی ثابت ذخیره می‌کنند تا امکان انباشت ساده و قابل پیش‌بینی چندین گزینه -l فراهم شود. از گزینه -V برای بررسی پشتیبانی از landlock(7) در هسته لینوکس استفاده کنید. سطح پشتیبانی خاص را می‌توان بر اساس کد خروج تعیین کرد. از گزینه -A برای بررسی نسخه ABI مربوط به landlock(7) استفاده کنید.

نسخه‌بندی ABI در landlock(7) تنظیم خط‌مشی امنیتی را بر اساس قابلیت‌های هسته ممکن می‌سازد. ابزار syd-lock از landlock(7) ABI 10 که در لینوکس 7.2 جدید است پشتیبانی می‌کند. برای اطلاعات در مورد زمان معرفی هر نسخه ABI در landlock(7) به هسته لینوکس، بخش HISTORY را ببینید.

از نسخه 3.38.0 به بعد، می‌توان چند دسته‌بندی را به صورت جداشده با کاما مشخص کرد و مجموعه‌های زیر برای ساده‌سازی ساخت پروفایل سندباکس تعریف شده‌اند. نام‌ها عمداً به گونه‌ای انتخاب شده‌اند که با pledge(2) در OpenBSD سازگار باشند:

all تمام حقوق دسترسی به سیستم فایل
all-x تمام حقوق دسترسی به سیستم فایل به جز exec
rpath read، readdir
wpath write، truncate
cpath create، delete، rename
dpath mkbdev، mkcdev
spath mkfifo، symlink
tpath mkdir، rmdir
inet bind، connect

از نسخه 3.35.0 به بعد، سطح سازگاری landlock(7) را می‌توان با استفاده از گزینه -C به یکی از سطوح زیر تنظیم کرد: hard-requirement (یا به صورت کوتاه hard یا h)، soft-requirement (یا به صورت کوتاه short یا s)، و best-effort (یا به صورت کوتاه best یا b). مقدار پیش‌فرض hard-requirement است تا از اصل امنیت پیش‌فرض پیروی شود. در این سطح، محدودیت‌های درخواستی landlock(7) تنها در صورتی اعمال می‌شوند که توسط سیستمِ در حال اجرا پشتیبانی شوند؛ اگر هر یک از قابلیت‌های درخواستی پشتیبانی نشود، عملیات خطای سازگاری بازمی‌گرداند و سندباکس آغاز نمی‌گردد. خطاهای فراخوانی open(2) در طول راه‌اندازی سندباکس، از جمله کد خطای ENOENT («چنین فایل یا دایرکتوری وجود ندارد») در errno(3)، در این سطح خطای مهلک (fatal) برمی‌گردانند. در سطح soft-requirement، محدودیت‌های درخواستی در صورت پشتیبانی توسط سیستم در حال اجرا اعمال می‌شوند و در غیر این صورت کل درخواست سندباکس در سکوت نادیده گرفته می‌شود؛ هیچ خطای سازگاری برگردانده نمی‌شود. در سطح best-effort، محدودیت‌های درخواستی در صورت پشتیبانی اعمال می‌شوند و هرگونه محدودیت پشتیبانی‌نشده در سکوت نادیده گرفته می‌شود؛ هیچ خطای سازگاری برگردانده نمی‌شود. در سطوح soft-requirement و best-effort، خطاهای فراخوانی open(2) با کد خطای ENOENT («چنین فایل یا دایرکتوری وجود ندارد») در errno(3) در سکوت نادیده گرفته می‌شوند. سایر خطاهای open(2) مهلک هستند.

از نسخه 3.38.0 به بعد، فلگ‌های landlock(7) را می‌توان با استفاده از گزینه -F تنظیم کرد. فلگ‌ها را می‌توان با استفاده از نام‌ها یا مقادیر عددی‌شان مشخص کرد. تنظیم همزمان چندین فلگ با ارائه‌شان به صورت فهرستی از مقادیر جداشده با کاما امکان‌پذیر است. فلگ‌ها از نسخه 7 رابط ABI در landlock(7) که در لینوکس 6.15 جدید است پشتیبانی می‌شوند. فهرست فلگ‌های پشتیبانی‌شده در زیر آورده شده است. تنظیم یک فلگ در نسخه‌های ABI پشتیبانی‌نشده عملیاتی بی‌اثر (NO-OP) است مگر اینکه خلاف آن ذکر شده باشد.

log_same_exec_off 1: ثبت لاگ دسترسی‌های رد شده صادر شده از رشته‌ای (thread) که دامنه landlock(7) را ایجاد کرده و همچنین فرزندان آن را تا زمانی که به اجرای همان کد اجرایی ادامه می‌دهند (یعنی بدون فراخوانی مداخله‌گر execve(2)) غیرفعال می‌کند. این مورد برای برنامه‌هایی در نظر گرفته شده که کدهای نامشخص را بدون فراخوانی execve(2) اجرا می‌کنند، مانند مفسرهای اسکریپت. برنامه‌هایی که فقط خودشان را در سندباکس قرار می‌دهند نباید این فلگ را تنظیم کنند تا کاربران بتوانند از طریق لاگ‌های سیستم از تلاش‌های دسترسی غیرمجاز مطلع شوند. این فلگ نیازمند پشتیبانی از ABI 7 در landlock(7) است که در لینوکس 6.15 جدید است.
log_new_exec_on 2: ثبت لاگ دسترسی‌های رد شده را پس از یک فراخوانی execve(2) فعال می‌کند و امکان مشاهده تلاش‌های دسترسی غیرمجاز توسط برنامه‌های تازه اجرا شده در دامنه landlock(7) ایجاد شده را فراهم می‌سازد. این فلگ تنها زمانی توصیه می‌شود که انتظار رود تمام فایل‌های اجرایی بالقوه در دامنه با محدودیت‌های دسترسی مطابقت داشته باشند، زیرا لاگ‌های ممیزی بیش از حد می‌تواند شناسایی رویدادهای بحرانی را دشوارتر کند. این فلگ نیازمند پشتیبانی از ABI 7 در landlock(7) است که در لینوکس 6.15 جدید است.
log_subdomains_off 4: ثبت لاگ دسترسی‌های رد شده منشأ گرفته از دامنه‌های تودرتوی landlock(7) ایجادشده توسط فراخواننده یا فرزندان آن را غیرفعال می‌کند. این فلگ باید بر اساس پیکربندی زمان اجرا تنظیم شود، نه اینکه به صورت ثابت کدگذاری گردد، تا از نادیده گرفتن رویدادهای امنیتی مهم جلوگیری شود. این فلگ برای ران‌تایم‌های کانتینر یا ابزارهای سندباکس که ممکن است برنامه‌هایی را راه‌اندازی کنند که خودشان دامنه‌های landlock(7) ایجاد می‌کنند و در غیر این صورت لاگ‌های زیادی تولید می‌کنند، مفید است. بر خلاف log_same_exec_off، این فلگ فقط بر دامنه‌های تودرتوی آینده تأثیر می‌گذارد، نه دامنه‌ای که در حال ایجاد است. این فلگ نیازمند پشتیبانی از ABI 7 در landlock(7) است که در لینوکس 6.15 جدید است.

از نسخه 3.35.0 به بعد، سطح سازگاری پیش‌فرض landlock(7) از best-effort به hard-requirement تغییر یافته است، و خطاهای ENOENT (No such file or directory) به عنوان خطای مهلک در نظر گرفته می‌شوند مگر اینکه سطح روی best-effort تنظیم شده باشد. این تغییر از اصل امنیت پیش‌فرض پیروی می‌کند و بیش از هر چیز از تله خاموش و خطرناکی جلوگیری می‌کند که در آن یک فایل یا دایرکتوری ناموجود که در زمان راه‌اندازی دسترسی به آن رد (و نادیده گرفته) شده بود، پس از آن ایجاد شود و در نهایت landlock(7) دسترسی به فایل یا دایرکتوری تازه‌تأسیس را مجاز بداند. برای اطلاعات بیشتر ببینید: https://landlock.io/rust-landlock/landlock/trait.Compatible.html

از نسخه 3.46.0 به بعد، مسیر نباید شامل پیوندهای نمادین جادویی یا مؤلفه‌های والد («..») باشد. مسیر مجاز است شامل پیوندهای نمادین معمولی باشد. این پیوندهای نمادین معمولی مجاز هستند به مقاصدی ارجاع دهند که حاوی مؤلفه‌های والد («..») هستند. دسته‌بندی bind نیازمند مسیرهای مطلق سوکت یونیکس است. مسیر برای سایر دسته‌بندی‌ها می‌تواند نسبی باشد که در این صورت نسبت به دایرکتوری محل اجرای syd-lock(1) حل‌وفصل می‌شود.

ترکیب استفاده از syd-lock(1) با syd-mdwe(1) را جهت دستیابی به حفاظت‌های حافظه W^X مد نظر قرار دهید. برای اطلاعات بیشتر به صفحه راهنمای syd-mdwe(1) مراجعه کنید.

  • نسخه 1 از ABI مربوط به landlock(7) در لینوکس 5.13 معرفی شد.
  • نسخه 2 از ABI مربوط به landlock(7) در لینوکس 5.19 معرفی شد.
  • نسخه 3 از ABI مربوط به landlock(7) در لینوکس 6.2 معرفی شد.
  • نسخه 4 از ABI مربوط به landlock(7) در لینوکس 6.7 معرفی شد.
  • نسخه 5 از ABI مربوط به landlock(7) در لینوکس 6.10 معرفی شد.
  • نسخه 6 از ABI مربوط به landlock(7) در لینوکس 6.12 معرفی شد.
  • نسخه 7 از ABI مربوط به landlock(7) در لینوکس 6.15 معرفی شد.
  • نسخه 8 از ABI مربوط به landlock(7) در لینوکس 7.0 معرفی شد.
  • نسخه 9 از ABI مربوط به landlock(7) در لینوکس 7.1 معرفی شد.
  • نسخه 10 از ABI مربوط به landlock(7) در لینوکس 7.2 معرفی شد.

برای اطلاعات بیشتر به پیوندهای زیر مراجعه کنید:

ابزار syd-lock در صورت خروج تمیز، با همان کد خروج فرآیند فرزند خارج می‌شود. در صورت خاتمه غیرعادی، کد خروج برابر با ۱۲۸ به‌علاوه شماره سیگنال خواهد بود. در صورتی که اجرای فرآیند فرزند با شکست مواجه شود، syd-lock(1) با شماره errno(3) خارج می‌شود. دستور syd-lock -A با نسخه ABI مربوط به landlock(7) به عنوان کد خروج خارج می‌شود.

دستور syd-lock -E با یکی از کدهای خروج زیر خارج می‌شود:

0 تمام خطاهای مشخص‌شده در دسترس هستند.
1 برخی از خطاهای مشخص‌شده در دسترس نیستند.
2 هیچ‌یک از خطاهای مشخص‌شده در دسترس نیستند.

دستور syd-lock -V بر اساس میزان پشتیبانی از آخرین نسخه ABI در landlock(7) با یکی از کدهای خروج زیر خارج می‌شود:

0 اعمال کامل (Fully enforced)
1 اعمال جزئی (Partially enforced)
2 اعمال‌نشده (Not enforced)
127 پشتیبانی‌نشده (Not supported)

ابزار syd-lock برای آرگومان‌های نامعتبر در خط فرمان با کد 22 (EINVAL) خارج می‌شود.

$ syd-lock wget -O/dev/null chesswob.org
$ syd-lock -l read,exec+/ wget -O/dev/null chesswob.org
/dev/null: Permission denied
$ syd-lock -l read,exec+/ -l write+/dev/null wget -O/dev/null chesswob.org
Prepended http:// to chesswob.org
--2025-04-30 16:24:35--  http://chesswob.org
Resolving chesswob.org (chesswob.org)... 95.216.39.164, fe80::468a:5bff:fe88:2141
Connecting to chesswob.org (chesswob.org)|95.216.39.164|:80... failed: Permission denied.
Connecting to chesswob.org (chesswob.org)|fe80::468a:5bff:fe88:2141|:80... failed: Permission denied.
Retrying.
^C
$ syd-lock -l read,exec+/ -l write+/dev/null -l connect+80 -l connect+443 wget -O/dev/null chesswob.org
Prepended http:// to chesswob.org
--2025-04-30 16:25:59--  http://chesswob.org
Resolving chesswob.org (chesswob.org)... 95.216.39.164, fe80::468a:5bff:fe88:2141
Connecting to chesswob.org (chesswob.org)|95.216.39.164|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://www.chesswob.org [following]
--2025-04-30 16:25:59--  https://www.chesswob.org
Loaded CA certificate /etc/ssl/certs/ca-certificates.crt
Resolving www.chesswob.org (www.chesswob.org)... 95.216.39.164, fe80::468a:5bff:fe88:2141
Connecting to www.chesswob.org (www.chesswob.org)|95.216.39.164|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 148827 (145K) [text/html]
Saving to: ‘/dev/null’
/dev/null                         100%[=============================================================>] 145.34K  --.-KB/s    in 0.01s
2025-04-30 16:25:59 (11.9 MB/s) - ‘/dev/null’ saved [148827/148827]
$

landlock(7), syd(1), syd(2), syd(5), syd(7), syd-mdwe(1), syd-ofd(1), syd-pds(1), syd-ring(1), syd-sec(1), syd-tsc(1)

وبگاه اصلی syd: https://sydbox.exherbo.org

وبگاه اصلی Landlock: https://landlock.io

مستندات Landlock: https://docs.kernel.org/userspace-api/landlock.html

راهنمای مدیر Landlock: https://docs.kernel.org/admin-guide/LSM/landlock.html

توسعه و نگهداری توسط Ali Polatel. کدهای منبع به‌روز را می‌توانید در https://gitlab.exherbo.org/sydbox/sydbox.git و در Radicle در rad:z38HCnbmcDegA2BMxuPaPRPMdp6wF بیابید. گزارش‌های اشکال و وصله‌ها را می‌توان به https://gitlab.exherbo.org/groups/sydbox/-/issues ارسال کرد. گفتگو و تبادل نظر در کانال #sydbox در Libera Chat یا در #sydbox:mailstation.de در Matrix.

2026-09-01