Sandbox
Изолированное выполнение команд: сеть, файловая система, ресурсы, привилегии
🛡️ Все тарифы
Обзор
FlowLink Sandbox обеспечивает изолированное выполнение команд на агенте. Каждая команда, разрешённая политикой, может быть дополнительно запущена в sandbox-окружении. Sandbox использует Linux namespaces для создания изолированного окружения: network namespace (нет доступа к сети), mount namespace (read-only ФС + tmpfs), PID namespace (видны только свои процессы), user namespace (ограниченные привилегии). Это предотвращает lateral movement и resource exhaustion даже если команда прошла проверку Shield.
6 механизмов изоляции
Полная изоляция сети. Команда не может обращаться к внешней сети, localhost хоста, или другим агентам. Создаётся виртуальный network stack без интерфейсов (кроме loopback, который тоже изолирован).
Корневая файловая система монтируется read-only.Writable только /tmp (tmpfs, RAM-диск) для временных файлов. Размер /tmp ограничен (default: 100MB).
Команда видит только свои процессы (PID 1 = сама команда). Не может убить, приостановить или сигнализировать процессы хоста.
CPU time (30s default), memory (256MB RSS), max open files (1024), max processes (100). Настройка через /sys/fs/cgroup.
Максимальное время выполнения команды. При превышении — SIGKILL всем процессам в namespace. Default: 30s, max: 300s.
prctl(PR_SET_NO_NEW_PRIVS) запрещает setuid/setgid эскалацию. Даже если команда запущена от root — новые привилегии невозможны.
Конфигурация
1{2 "sandbox": {3 "enabled": true,4 "mode": "permissive",5 "network_isolated": true,6 "read_only_fs": true,7 "pid_isolated": true,8 "no_new_privs": true,9 "resources": {10 "memory_limit_mb": 256,11 "cpu_time_seconds": 30,12 "max_processes": 100,13 "max_open_files": 1024,14 "tmp_size_mb": 10015 },16 "timeout_seconds": 30,17 "enforced_for": ["rm", "chmod", "chown", "curl", "wget"],18 "excluded_commands": ["ls", "cat", "grep", "find", "ps"],19 "auto_enable_on_agents": ["environment=production"]20 }21}
mode: "strict" — все команды в sandbox, "permissive" — только команды из enforced_for, "off" — отключён
enforced_for: список команд, которые ВСЕГДА запускаются в sandbox (даже в permissive mode)
excluded_commands: список команд, которые НИКОГДА не запускаются в sandbox (безопасные read-only команды)
Killswitch
Если команда превышает лимиты (memory, CPU time, timeout), sandbox мгновенно убивает все процессы в namespace через SIGKILL. Killswitch гарантирует, что runaway команда не может повлиять на хост. Событие записывается в audit log с причиной termination.
1{2 "audit_event": {3 "event_type": "sandbox_kill",4 "reason": "memory_limit_exceeded",5 "command": "dd if=/dev/zero of=/tmp/big bs=1M count=1000",6 "agent_id": "agent-prod-01",7 "memory_used_mb": 256,8 "cpu_time_seconds": 12.3,9 "processes_killed": 1,10 "timestamp": "2026-01-15T14:32:01Z",11 "correlation_id": "corr_abc123"12 }13}
Интеграция с политиками
Политики могут требовать sandbox для определённых команд или агентов:
1{2 "id": "prod-sandbox-policy",3 "match": {4 "command": "rm *,chmod *,chown *,curl *,wget *",5 "agent_tags": { "environment": "production" }6 },7 "action": "allow",8 "sandbox": {9 "enabled": true,10 "mode": "strict",11 "network_isolated": true,12 "timeout_seconds": 1013 }14}
Предотвращение побега (Escape Prevention)
Sandbox спроектирован с defence in depth. Даже если одна изоляция обойдена, остальные слои продолжают защищать:
Производительность
| Метрика | Значение |
|---|---|
| Overhead создания namespace | < 5ms |
| Overhead на выполнение команды | < 2% CPU |
| Memory overhead sandbox | ~8MB (на sandbox) |
| Максимальное кол-во параллельных sandbox | 100 (default) |
| Время killswitch | < 1ms (SIGKILL) |
Режимы работы
strictВСЕ команды выполняются в sandbox. Максимальная безопасность. Рекомендуется для production.
permissiveТолько опасные команды в sandbox (rm, curl, wget, chmod). Баланс безопасности и скорости.
offSandbox отключён. Команды выполняются напрямую. Только для development/testing.
Troubleshooting
Причина: seccomp-bpf блокирует системный вызов. Решение: добавьте syscall в whitelist или используйте excluded_commands.
Причина: требуются Linux >= 5.4 с cgroups v2. Решение: обновите ядро или отключите sandbox.
Причина: timeout слишком маленький. Решение: увеличьте timeout_seconds в конфиге или для конкретной политики.