Перейти к содержимому

Executor

Исполнители команд запускают внешние процессы в контролируемом окружении. Доступны два типа: нативные процессы ОС и Docker-контейнеры.

ТипОписание
exec.nativeВыполнение команд напрямую в ОС
exec.dockerВыполнение команд внутри Docker-контейнеров

Запускает команды напрямую в операционной системе.

- 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
ПолеТипПо умолчаниюОписание
default_work_dirstring-Рабочая директория для всех команд
default_envmap-Переменные окружения (объединяются с per-command env)
command_whiteliststring[]-Если задан, разрешены только указанные команды
Нативные исполнители по умолчанию используют чистое окружение. Дочерним процессам передаются только явно настроенные переменные окружения.

Запускает команды внутри изолированных Docker-контейнеров.

- 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
ПолеТипПо умолчаниюОписание
imagestringобязательноDocker-образ
hoststringunix socketURL Docker daemon
default_work_dirstring-Рабочая директория внутри контейнера
default_envmap-Переменные окружения
command_whiteliststring[]-Разрешённые команды (точное совпадение)
network_modestringbridgeСетевой режим: host, bridge, none
volumesstring[]-Монтирование томов: host:container[:ro]
userstring-Пользователь внутри контейнера
memory_limitint0Лимит памяти в байтах (0 = без ограничений)
cpu_quotaint0Квота CPU (100000 = 1 CPU, 0 = без ограничений)
auto_removeboolfalseУдалить контейнер после завершения
read_only_rootfsboolfalseСделать корневую ФС только для чтения
no_new_privilegesboolfalseЗапретить повышение привилегий
cap_dropstring[]-Linux capabilities для удаления
cap_addstring[]-Linux capabilities для добавления
pids_limitint0Макс. процессов (0 = без ограничений)
tmpfsmap-Tmpfs-монтирования для записываемых путей

Оба типа исполнителей поддерживают белый список команд. При настройке разрешены только точные совпадения:

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

Команды не из списка отклоняются с ошибкой.

Модуль Exec предоставляет выполнение команд:

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