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