Програми працюють без обмежень, доки ви не передасте прапорець пісочниці. --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. Політика перевіряє команду, що
фактично запускається, тому виклик через оболонку перевіряється як 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 потребують форми з =.