تعمل البرامج دون قيود إلى أن تمرّر خيار عزل. يمنع --sandbox الوصول إلى نظام الملفات؛ ويبقى الوصول إلى الشبكة
والعمليات الفرعية مسموحًا إلى أن تسرد مضيفين أو أوامر:
elide --sandbox --allow-read=. --allow-net=example.com run app.jsالسماح بالوصول إلى الملفات
elide --allow-read=. --fs-audit run app.js[elide.fs] allow read open hello.txt
[elide.fs] DENY write open out.txtيفشل الوصول الممنوع كما يفشل مع ملف محمي: EACCES: permission denied, open 'hello.txt'. تُحلّ المسارات النسبية من
مجلد العمل.
لا تستطيع برامج WASI الوصول إلى مجلدات المضيف إلى أن تربط مجلدًا عبر WasiMapDirs؛ راجع
WebAssembly. تنطبق هذه الأذونات على المجلدات المربوطة، ويحتاج فتح ملف في WASI إلى
إذنَي القراءة والكتابة معًا.
السماح بالشبكة والعمليات الفرعية
elide --allow-net=localhost --allow-run=ls run app.jsيذكر الاستدعاء الممنوع الإذن الذي يحتاجه:
TypeError: fetch to 'example.com:443' is not permitted; grant it with --allow-net=example.com
Error: spawn of 'echo' is not permitted; grant it with --allow-run=echoتُبلغ المطابقة مع --deny-* عن denied by --deny-net أو denied by --deny-run. تفحص السياسة الأمر الذي يعمل فعلًا،
لذا يُفحص الاستدعاء عبر الصدفة (shell) على أنه sh. شغّل العمليات الفرعية باستخدام execFileSync من
node:child_process.
الخيوط والوصول الأصلي
| البرنامج | الخيوط افتراضيًا | الوصول الأصلي افتراضيًا |
|---|---|---|
| JavaScript، TypeScript | لا ينطبق: يعمل عمّال node:worker_threads مع كل الخيارات | مسموح |
| نقطة دخول Python | مسموحة | مسموح |
نقطة دخول Python مع --sandbox أو إذن --allow-read/--allow-write | ممنوعة؛ أضف --allow-threads | مسموح |
Python تحت --interop | ممنوعة، حتى مع --allow-threads | مسموح |
# threads.py
import threading
out = []
t = threading.Thread(target=lambda: out.append("worker ran"))
t.start(); t.join()
print(out[0])elide python threads.py # worker ran
elide --sandbox --allow-read=. python threads.py # Creating threads is not allowed.
elide --sandbox --allow-read=. --allow-threads python threads.py # worker ranيمنع --no-native الوصول الأصلي. وعندها تفقد Python بعض الميزات، مثل مقابس AF_UNIX
(AttributeError: module 'socket' has no attribute 'AF_UNIX') والإشارات الاعتباطية، ويصبح بدء تشغيلها أبطأ.
يصرّح --allow-native بالقيمة الافتراضية صراحةً؛ والجمع بينه وبين --no-native خطأ استخدام (رمز الخروج 2).
ضبط الحدود
ينطبق --limit على برامج JavaScript و TypeScript. القيمة رقم، أو 0 للمنع، أو unlimited وهي الافتراضية. وأي
أسماء أو لغات أو أوامر أخرى أخطاء استخدام.
elide --limit=workers=4 --limit=fds=128 --max-mem=512m --timeout=30s run app.jsيرث العمّال أذونات العملية الأم. لا تعزل هذه الخيارات العملية عن انهيار أصلي.
اختيار ملف تعريف
ملف التعريف الافتراضي هو --sandbox=trusted. أما --sandbox=sandboxed و --sandbox=isolated فغير متاحين ويخرجان
بالرمز 2.
الخيارات
| الخيار | الأثر |
|---|---|
--sandbox | يمنع الوصول إلى نظام الملفات. ويبقى الوصول إلى الشبكة والعمليات الفرعية مسموحًا. |
--allow-read[=PATHS] | يسمح بالقراءة في كل مكان، أو في المسارات المذكورة. ويستلزم --sandbox. |
--allow-write[=PATHS] | يسمح بالكتابة في كل مكان، أو في المسارات المذكورة. ويستلزم --sandbox. |
--fs-audit | يسجّل كل قرار يخص نظام الملفات في stderr. |
--allow-net[=HOSTS] | يسمح بكل وصول إلى الشبكة، أو بالمضيفين المذكورين فقط (HOST أو HOST:PORT). |
--allow-run[=CMDS] | يسمح بكل العمليات الفرعية، أو بالأوامر المذكورة فقط. |
--deny-net=HOSTS | يمنع مضيفين حتى لو كانوا مسموحين. |
--deny-run=CMDS | يمنع أوامر حتى لو كانت مسموحة. |
--allow-env[=NAMES] | يتيح لـ elide.pkl قراءة مزيد من متغيرات البيئة، أو جميعها. ولا يتغير process.env. |
--allow-threads | يسمح بخيوط Python داخل العزل. |
--allow-native | يسمح بالوصول الأصلي (الافتراضي). |
--no-native | يمنع الوصول الأصلي. |
--limit=workers=N | يحدّ عدد العمّال النشطين؛ وتجاوزه يرمي ERR_WORKER_LIMIT. |
--limit=fds=N | يحدّ عدد مقابض node:fs المفتوحة؛ وتجاوزه يرمي EMFILE. |
--max-mem=SIZE | يحدّ حجم الكومة؛ وتجاوزه خطأ نفاد ذاكرة مع رمز خروج غير صفري. |
--timeout=DURATION | يوقف البرنامج بعد DURATION برمز الخروج 124. |
تُفصل عناصر القوائم بفواصل. ويحتاج --deny-net و --deny-run إلى الصيغة ذات =.