Pular para o conteúdo

Executor

Executores de comandos executam processos externos com ambientes controlados. Dois tipos de executor estão disponíveis: processos nativos do SO e containers Docker.

TipoDescrição
exec.nativeExecuta comandos diretamente no SO host
exec.dockerExecuta comandos dentro de containers Docker

Executa comandos diretamente no sistema operacional host.

- 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
CampoTipoPadrãoDescrição
default_work_dirstring-Diretório de trabalho para todos os comandos
default_envmap-Variáveis de ambiente (mescladas com env por comando)
command_whiteliststring[]-Se definido, apenas estes comandos exatos são permitidos
Executores nativos usam um ambiente limpo por padrão. Apenas variáveis de ambiente explicitamente configuradas são passadas para processos filhos.

Executa comandos dentro de containers Docker isolados.

- 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
CampoTipoPadrãoDescrição
imagestringobrigatórioImagem Docker a usar
hoststringunix socketURL do daemon Docker
default_work_dirstring-Diretório de trabalho dentro do container
default_envmap-Variáveis de ambiente
command_whiteliststring[]-Comandos permitidos (correspondência exata)
network_modestringbridgeModo de rede: host, bridge, none
volumesstring[]-Montagens de volume: host:container[:ro]
userstring-Usuário para executar dentro do container
memory_limitint0Limite de memória em bytes (0 = ilimitado)
cpu_quotaint0Cota de CPU (100000 = 1 CPU, 0 = ilimitado)
auto_removeboolfalseRemove container após sair
read_only_rootfsboolfalseTorna sistema de arquivos raiz somente leitura
no_new_privilegesboolfalsePrevine escalação de privilégios
cap_dropstring[]-Capacidades Linux a remover
cap_addstring[]-Capacidades Linux a adicionar
pids_limitint0Max processos (0 = ilimitado)
tmpfsmap-Montagens tmpfs para caminhos graváveis

Ambos os tipos de executor suportam whitelist de comandos. Quando configurado, apenas correspondências exatas de comando são permitidas:

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

Comandos não na whitelist são rejeitados com um erro.

O Módulo Exec fornece execução de comandos:

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()