Los programas se ejecutan sin restricciones hasta que usted pasa una opción de sandbox. --sandbox deniega el acceso al
sistema de archivos; la red y los subprocesos siguen permitidos hasta que enumere hosts o comandos:
elide --sandbox --allow-read=. --allow-net=example.com run app.jsPermitir el acceso a archivos
elide --allow-read=. --fs-audit run app.js[elide.fs] allow read open hello.txt
[elide.fs] DENY write open out.txtUn acceso denegado falla igual que un archivo protegido: EACCES: permission denied, open 'hello.txt'. Las rutas
relativas se resuelven desde el directorio de trabajo.
Los programas WASI no pueden acceder a directorios del host hasta que asigne uno con WasiMapDirs; consulte
WebAssembly. Estos permisos se aplican a los directorios asignados, y una apertura
WASI necesita acceso tanto de lectura como de escritura.
Permitir la red y los subprocesos
elide --allow-net=localhost --allow-run=ls run app.jsUna llamada denegada indica el permiso que necesita:
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=echoSi coincide un --deny-*, el error indica denied by --deny-net o denied by --deny-run. La política comprueba el
comando que se ejecuta, así que una invocación de shell se comprueba como sh. Lance subprocesos con execFileSync
de node:child_process.
Hilos y acceso nativo
| Programa | Hilos por defecto | Acceso nativo por defecto |
|---|---|---|
| JavaScript, TypeScript | No aplica: los workers de node:worker_threads se ejecutan con cualquier opción | Permitido |
| Entrada Python | Permitidos | Permitido |
Entrada Python con --sandbox o un permiso --allow-read/--allow-write | Denegados; añada --allow-threads | Permitido |
Python con --interop | Denegados, incluso con --allow-threads | Permitido |
# 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 deniega el acceso nativo. Python pierde entonces algunas funciones, como los sockets AF_UNIX
(AttributeError: module 'socket' has no attribute 'AF_UNIX') y las señales arbitrarias, y arranca más despacio.
--allow-native indica explícitamente el valor predeterminado; combinarlo con --no-native es un error de uso
(salida 2).
Establecer límites
--limit se aplica a programas de JavaScript y TypeScript. Un valor es un número, 0 para prohibir, o unlimited, el
predeterminado. Otros nombres, lenguajes o comandos son errores de uso.
elide --limit=workers=4 --limit=fds=128 --max-mem=512m --timeout=30s run app.jsLos workers heredan los permisos de su padre. Estas opciones no aíslan el proceso de un fallo nativo.
Elegir un perfil
--sandbox=trusted es el perfil predeterminado. --sandbox=sandboxed y --sandbox=isolated no están disponibles y
terminan con el código 2.
Opciones
| Opción | Efecto |
|---|---|
--sandbox | Deniega el acceso al sistema de archivos. La red y los subprocesos siguen permitidos. |
--allow-read[=PATHS] | Permite lecturas en cualquier lugar o en las rutas indicadas. Implica --sandbox. |
--allow-write[=PATHS] | Permite escrituras en cualquier lugar o en las rutas indicadas. Implica --sandbox. |
--fs-audit | Registra cada decisión del sistema de archivos en stderr. |
--allow-net[=HOSTS] | Permite todo el acceso a la red o solo a los hosts indicados (HOST o HOST:PORT). |
--allow-run[=CMDS] | Permite todos los subprocesos o solo los comandos indicados. |
--deny-net=HOSTS | Deniega hosts aunque estén permitidos. |
--deny-run=CMDS | Deniega comandos aunque estén permitidos. |
--allow-env[=NAMES] | Permite que elide.pkl lea más variables de entorno, o todas. process.env no cambia. |
--allow-threads | Permite hilos de Python en un sandbox. |
--allow-native | Permite el acceso nativo (el predeterminado). |
--no-native | Deniega el acceso nativo. |
--limit=workers=N | Limita los workers activos; superarlo lanza ERR_WORKER_LIMIT. |
--limit=fds=N | Limita los descriptores de node:fs abiertos; superarlo lanza EMFILE. |
--max-mem=SIZE | Limita el tamaño del heap; superarlo es un error de falta de memoria con un código de salida distinto de cero. |
--timeout=DURATION | Detiene el programa tras DURATION con el código de salida 124. |
Las listas se separan con comas. --deny-net y --deny-run necesitan la forma con =.