Zum Inhalt springen

Executor

Befehlsausführer führen externe Prozesse mit kontrollierten Umgebungen aus. Zwei Executor-Typen sind verfügbar: native OS-Prozesse und Docker-Container.

KindBeschreibung
exec.nativeBefehle direkt auf dem Host-OS ausführen
exec.dockerBefehle in Docker-Containern ausführen

Führt Befehle direkt auf dem Host-Betriebssystem aus.

- name: shell
kind: exec.native
default_work_dir: /app
default_env:
PATH: /usr/local/bin:/usr/bin:/bin
LANG: en_US.UTF-8
command_whitelist:
- git status
- git diff
- npm run build
FeldTypStandardBeschreibung
default_work_dirstring-Arbeitsverzeichnis für alle Befehle
default_envmap-Umgebungsvariablen (mit pro-Befehl env zusammengeführt)
command_whiteliststring[]-Wenn gesetzt, nur diese exakten Befehle erlaubt
Native Executors verwenden standardmäßig eine saubere Umgebung. Nur explizit konfigurierte Umgebungsvariablen werden an Kindprozesse übergeben.

Führt Befehle in isolierten Docker-Containern aus.

- name: sandbox
kind: exec.docker
image: python:3.11-slim
default_work_dir: /workspace
network_mode: none
memory_limit: 536870912
cpu_quota: 50000
auto_remove: true
read_only_rootfs: true
no_new_privileges: true
cap_drop:
- ALL
tmpfs:
/tmp: rw,noexec,nosuid,size=64m
volumes:
- /app/data:/workspace/data:ro
FeldTypStandardBeschreibung
imagestringerforderlichZu verwendendes Docker-Image
hoststringUnix SocketDocker-Daemon-URL
default_work_dirstring-Arbeitsverzeichnis im Container
default_envmap-Umgebungsvariablen
command_whiteliststring[]-Erlaubte Befehle (exakter Match)
network_modestringbridgeNetzwerkmodus: host, bridge, none
volumesstring[]-Volume-Mounts: host:container[:ro]
userstring-Benutzer zum Ausführen im Container
memory_limitint0Speicherlimit in Bytes (0 = unbegrenzt)
cpu_quotaint0CPU-Quota (100000 = 1 CPU, 0 = unbegrenzt)
auto_removeboolfalseContainer nach Exit entfernen
read_only_rootfsboolfalseRoot-Dateisystem schreibgeschützt machen
no_new_privilegesboolfalsePrivilegieneskalation verhindern
cap_dropstring[]-Linux-Capabilities zu entfernen
cap_addstring[]-Linux-Capabilities hinzuzufügen
pids_limitint0Max Prozesse (0 = unbegrenzt)
tmpfsmap-Tmpfs-Mounts für beschreibbare Pfade

Beide Executor-Typen unterstützen Befehls-Whitelisting. Wenn konfiguriert, sind nur exakte Befehls-Matches erlaubt:

command_whitelist:
- ls -la
- cat /etc/passwd

Befehle, die nicht in der Whitelist sind, werden mit einem Fehler abgelehnt.

Das Exec-Modul bietet Befehlsausführung:

local exec = require("exec")
local executor, err = exec.get("app:shell")
if err then return nil, err end
local proc = executor:exec("git status", {
work_dir = "/app/repo"
})
local stdout = proc:stdout_stream()
proc:start()
local output = stdout:read()
proc:wait()
stdout:close()
executor:release()