Les programmes s’exécutent sans restriction tant que vous ne passez pas d’option de bac à sable. --sandbox refuse
l’accès au système de fichiers ; le réseau et les sous-processus restent autorisés tant que vous ne listez pas d’hôtes
ou de commandes :
elide --sandbox --allow-read=. --allow-net=example.com run app.jsAutoriser l’accès aux fichiers
elide --allow-read=. --fs-audit run app.js[elide.fs] allow read open hello.txt
[elide.fs] DENY write open out.txtUn accès refusé échoue comme sur un fichier protégé : EACCES: permission denied, open 'hello.txt'. Les chemins
relatifs sont résolus à partir du répertoire de travail.
Les programmes WASI n’ont accès à aucun répertoire de l’hôte tant que vous n’en associez pas un avec WasiMapDirs ;
voir WebAssembly. Ces autorisations s’appliquent aux répertoires associés, et une
ouverture WASI nécessite à la fois l’accès en lecture et en écriture.
Autoriser le réseau et les sous-processus
elide --allow-net=localhost --allow-run=ls run app.jsUn appel refusé nomme l’autorisation dont il a besoin :
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=echoUne correspondance avec --deny-* signale denied by --deny-net ou denied by --deny-run. La politique vérifie la
commande réellement exécutée : un appel via le shell est vérifié comme sh. Lancez les sous-processus avec
execFileSync de node:child_process.
Threads et accès natif
| Programme | Threads par défaut | Accès natif par défaut |
|---|---|---|
| JavaScript, TypeScript | Sans objet : les workers de node:worker_threads s’exécutent avec toutes les options | Autorisé |
| Entrée Python | Autorisés | Autorisé |
Entrée Python avec --sandbox ou une autorisation --allow-read/--allow-write | Refusés ; ajoutez --allow-threads | Autorisé |
Python sous --interop | Refusés, même avec --allow-threads | Autorisé |
# 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 refuse l’accès natif. Python perd alors certaines fonctionnalités, comme les sockets AF_UNIX
(AttributeError: module 'socket' has no attribute 'AF_UNIX') et les signaux arbitraires, et démarre plus lentement.
--allow-native explicite la valeur par défaut ; le combiner avec --no-native est une erreur d’utilisation
(code de sortie 2).
Définir des limites
--limit s’applique aux programmes JavaScript et TypeScript. Une valeur est un nombre, 0 pour interdire, ou
unlimited, la valeur par défaut. Les autres noms, langages ou commandes sont des erreurs d’utilisation.
elide --limit=workers=4 --limit=fds=128 --max-mem=512m --timeout=30s run app.jsLes workers héritent des autorisations de leur parent. Ces options n’isolent pas le processus d’un plantage natif.
Choisir un profil
--sandbox=trusted est le profil par défaut. --sandbox=sandboxed et --sandbox=isolated ne sont pas disponibles et
se terminent avec le code 2.
Options
| Option | Effet |
|---|---|
--sandbox | Refuse l’accès au système de fichiers. Le réseau et les sous-processus restent autorisés. |
--allow-read[=PATHS] | Autorise la lecture partout, ou aux chemins listés. Implique --sandbox. |
--allow-write[=PATHS] | Autorise l’écriture partout, ou aux chemins listés. Implique --sandbox. |
--fs-audit | Journalise chaque décision sur le système de fichiers dans stderr. |
--allow-net[=HOSTS] | Autorise tout accès réseau, ou seulement les hôtes listés (HOST ou HOST:PORT). |
--allow-run[=CMDS] | Autorise tous les sous-processus, ou seulement les commandes listées. |
--deny-net=HOSTS | Refuse des hôtes même s’ils sont autorisés. |
--deny-run=CMDS | Refuse des commandes même si elles sont autorisées. |
--allow-env[=NAMES] | Permet à elide.pkl de lire davantage de variables d’environnement, ou toutes. process.env ne change pas. |
--allow-threads | Autorise les threads Python dans un bac à sable. |
--allow-native | Autorise l’accès natif (par défaut). |
--no-native | Refuse l’accès natif. |
--limit=workers=N | Limite les workers actifs ; un dépassement lève ERR_WORKER_LIMIT. |
--limit=fds=N | Limite les descripteurs node:fs ouverts ; un dépassement lève EMFILE. |
--max-mem=SIZE | Limite la taille du tas ; un dépassement est une erreur de mémoire insuffisante avec un code de sortie non nul. |
--timeout=DURATION | Arrête le programme après DURATION avec le code de sortie 124. |
Les listes sont séparées par des virgules. --deny-net et --deny-run exigent la forme avec =.