Перейти до вмісту

Пісочниця та обмеження

Обмежте доступ програми Elide до файлової системи, мережі, підпроцесів, потоків і нативного коду прапорцями --sandbox і --allow-*, а також обмежте ресурси й час роботи.

На цій сторінці

Програми працюють без обмежень, доки ви не передасте прапорець пісочниці. --sandbox забороняє доступ до файлової системи; мережа й підпроцеси залишаються дозволеними, доки ви не перелічите хости або команди:

elide --sandbox --allow-read=. --allow-net=example.com run app.js
0:11 / 0:11

Доступ до файлів

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 потребують форми з =.

Приклади

Чи була ця сторінка корисною?