Programme laufen uneingeschränkt, bis Sie ein Sandbox-Flag übergeben. --sandbox verweigert den Dateisystemzugriff;
Netzwerk und Unterprozesse bleiben erlaubt, bis Sie Hosts oder Befehle angeben:
elide --sandbox --allow-read=. --allow-net=example.com run app.jsDateizugriff erlauben
elide --allow-read=. --fs-audit run app.js[elide.fs] allow read open hello.txt
[elide.fs] DENY write open out.txtEin verweigerter Zugriff schlägt wie bei einer geschützten Datei fehl: EACCES: permission denied, open 'hello.txt'.
Relative Pfade werden vom Arbeitsverzeichnis aus aufgelöst.
WASI-Programme können erst auf Host-Verzeichnisse zugreifen, wenn Sie eines mit WasiMapDirs zuordnen; siehe
WebAssembly. Diese Freigaben gelten für zugeordnete Verzeichnisse, und ein Öffnen
unter WASI braucht sowohl Lese- als auch Schreibzugriff.
Netzwerk und Unterprozesse erlauben
elide --allow-net=localhost --allow-run=ls run app.jsEin verweigerter Aufruf nennt die Freigabe, die er braucht:
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=echoEin Treffer bei --deny-* meldet denied by --deny-net oder denied by --deny-run. Die Richtlinie prüft den Befehl,
der tatsächlich läuft, ein Shell-Aufruf wird also als sh geprüft. Starten Sie Unterprozesse mit execFileSync aus
node:child_process.
Threads und nativer Zugriff
| Programm | Threads standardmäßig | Nativer Zugriff standardmäßig |
|---|---|---|
| JavaScript, TypeScript | Nicht zutreffend: Worker aus node:worker_threads laufen unter jedem Flag | Erlaubt |
| Python als Einstiegspunkt | Erlaubt | Erlaubt |
Python als Einstiegspunkt mit --sandbox oder einer Freigabe --allow-read/--allow-write | Verweigert; fügen Sie --allow-threads hinzu | Erlaubt |
Python unter --interop | Verweigert, auch mit --allow-threads | Erlaubt |
# 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 verweigert den nativen Zugriff. Python fehlen dann einige Funktionen, etwa AF_UNIX-Sockets
(AttributeError: module 'socket' has no attribute 'AF_UNIX') und beliebige Signale, und es startet langsamer.
--allow-native legt den Standard ausdrücklich fest; die Kombination mit --no-native ist ein Bedienungsfehler
(Exit-Code 2).
Limits setzen
--limit gilt für JavaScript- und TypeScript-Programme. Ein Wert ist eine Zahl, 0 zum Verbieten oder unlimited,
der Standard. Andere Namen, Sprachen oder Befehle sind Bedienungsfehler.
elide --limit=workers=4 --limit=fds=128 --max-mem=512m --timeout=30s run app.jsWorker erben die Freigaben des Programms, das sie startet. Diese Flags schützen den Prozess nicht vor einem nativen Absturz.
Profil wählen
--sandbox=trusted ist das Standardprofil. --sandbox=sandboxed und --sandbox=isolated sind nicht verfügbar und
enden mit Exit-Code 2.
Flags
| Flag | Wirkung |
|---|---|
--sandbox | Verweigert den Dateisystemzugriff. Netzwerk und Unterprozesse bleiben erlaubt. |
--allow-read[=PATHS] | Erlaubt Lesen überall oder unter den angegebenen Pfaden. Impliziert --sandbox. |
--allow-write[=PATHS] | Erlaubt Schreiben überall oder unter den angegebenen Pfaden. Impliziert --sandbox. |
--fs-audit | Protokolliert jede Dateisystem-Entscheidung auf stderr. |
--allow-net[=HOSTS] | Erlaubt jeden Netzwerkzugriff oder nur die angegebenen Hosts (HOST oder HOST:PORT). |
--allow-run[=CMDS] | Erlaubt alle Unterprozesse oder nur die angegebenen Befehle. |
--deny-net=HOSTS | Verweigert Hosts, auch wenn sie erlaubt sind. |
--deny-run=CMDS | Verweigert Befehle, auch wenn sie erlaubt sind. |
--allow-env[=NAMES] | Lässt elide.pkl weitere oder alle Umgebungsvariablen lesen. process.env bleibt unverändert. |
--allow-threads | Erlaubt Python-Threads in einer Sandbox. |
--allow-native | Erlaubt nativen Zugriff (der Standard). |
--no-native | Verweigert nativen Zugriff. |
--limit=workers=N | Begrenzt aktive Worker; eine Überschreitung wirft ERR_WORKER_LIMIT. |
--limit=fds=N | Begrenzt offene node:fs-Handles; eine Überschreitung wirft EMFILE. |
--max-mem=SIZE | Begrenzt die Heap-Größe; eine Überschreitung ist ein Out-of-Memory-Fehler mit Exit-Code ungleich null. |
--timeout=DURATION | Beendet das Programm nach DURATION mit Exit-Code 124. |
Listen sind kommagetrennt. --deny-net und --deny-run brauchen die Form mit =.