Saltar al contenido

Sandbox y límites

Restrinja el acceso de un programa de Elide al sistema de archivos, la red, los subprocesos, los hilos y el código nativo con --sandbox y las opciones --allow-*, y limite los recursos y el tiempo de ejecución.

En esta página

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.js
0:11 / 0:11

Permitir 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.txt

Un 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.js

Una 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=echo

Si 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

ProgramaHilos por defectoAcceso nativo por defecto
JavaScript, TypeScriptNo aplica: los workers de node:worker_threads se ejecutan con cualquier opciónPermitido
Entrada PythonPermitidosPermitido
Entrada Python con --sandbox o un permiso --allow-read/--allow-writeDenegados; añada --allow-threadsPermitido
Python con --interopDenegados, incluso con --allow-threadsPermitido
# 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.js

Los 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ónEfecto
--sandboxDeniega 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-auditRegistra 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=HOSTSDeniega hosts aunque estén permitidos.
--deny-run=CMDSDeniega 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-threadsPermite hilos de Python en un sandbox.
--allow-nativePermite el acceso nativo (el predeterminado).
--no-nativeDeniega el acceso nativo.
--limit=workers=NLimita los workers activos; superarlo lanza ERR_WORKER_LIMIT.
--limit=fds=NLimita los descriptores de node:fs abiertos; superarlo lanza EMFILE.
--max-mem=SIZELimita el tamaño del heap; superarlo es un error de falta de memoria con un código de salida distinto de cero.
--timeout=DURATIONDetiene 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 =.

Ejemplos

¿Te resultó útil esta página?