Gateway
Пісочниця
OpenClaw може запускати інструменти всередині sandbox-бекендів, щоб зменшити радіус ураження. Це необов’язково й керується конфігурацією (agents.defaults.sandbox або agents.list[].sandbox). Якщо sandboxing вимкнено, інструменти запускаються на хості. Gateway залишається на хості; виконання інструментів відбувається в ізольованому sandbox, коли це ввімкнено.
Що потрапляє в sandbox
- Виконання інструментів (
exec,read,write,edit,apply_patch,processтощо). - Необов’язковий sandbox-браузер (
agents.defaults.sandbox.browser).
Sandboxed browser details
- За замовчуванням sandbox-браузер автоматично запускається (гарантує доступність CDP), коли він потрібен браузерному інструменту. Налаштовується через
agents.defaults.sandbox.browser.autoStartіagents.defaults.sandbox.browser.autoStartTimeoutMs. - За замовчуванням контейнери sandbox-браузера використовують окрему Docker-мережу (
openclaw-sandbox-browser) замість глобальної мережіbridge. Налаштовується черезagents.defaults.sandbox.browser.network. - Необов’язковий параметр
agents.defaults.sandbox.browser.cdpSourceRangeобмежує CDP-вхід на межі контейнера за допомогою списку дозволених CIDR (наприклад,172.21.0.1/32). - Доступ спостерігача noVNC за замовчуванням захищений паролем; OpenClaw видає короткочасну URL-адресу з токеном, яка віддає локальну сторінку початкового завантаження й відкриває noVNC із паролем у фрагменті URL (не в query/header-логах).
agents.defaults.sandbox.browser.allowHostControlдає sandbox-сесіям змогу явно спрямовуватися на браузер хоста.- Необов’язкові списки дозволеного обмежують
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
Не потрапляє в sandbox:
- Сам процес Gateway.
- Будь-який інструмент, якому явно дозволено запускатися поза sandbox (наприклад,
tools.elevated).- Підвищений exec обходить sandboxing і використовує налаштований шлях виходу (
gatewayза замовчуванням абоnode, коли ціль exec —node). - Якщо sandboxing вимкнено,
tools.elevatedне змінює виконання (воно вже на хості). Див. Підвищений режим.
- Підвищений exec обходить sandboxing і використовує налаштований шлях виходу (
Режими
agents.defaults.sandbox.mode керує тим, коли використовується sandboxing:
off
Без sandboxing.
non-main
Лише non-main сесії потрапляють у sandbox (типово, якщо ви хочете, щоб звичайні чати були на хості).
"non-main" базується на session.mainKey (типово "main"), а не на ідентифікаторі агента. Групові/канальні сесії використовують власні ключі, тому вважаються non-main і потраплятимуть у sandbox.
all
Кожна сесія запускається в sandbox.
Область
agents.defaults.sandbox.scope керує тим, скільки контейнерів створюється:
"agent"(типово): один контейнер на агента."session": один контейнер на сесію."shared": один контейнер, спільний для всіх sandbox-сесій.
Бекенд
agents.defaults.sandbox.backend керує тим, яке середовище виконання надає sandbox:
"docker"(типово, коли sandboxing увімкнено): локальне sandbox-середовище виконання на базі Docker."ssh": універсальне віддалене sandbox-середовище виконання на базі SSH."openshell": sandbox-середовище виконання на базі OpenShell.
SSH-специфічна конфігурація міститься в agents.defaults.sandbox.ssh. OpenShell-специфічна конфігурація міститься в plugins.entries.openshell.config.
Вибір бекенда
| Docker | SSH | OpenShell | |
|---|---|---|---|
| Де запускається | Локальний контейнер | Будь-який SSH-доступний хост | Керований OpenShell sandbox |
| Налаштування | scripts/sandbox-setup.sh |
SSH-ключ + цільовий хост | Увімкнений OpenShell Plugin |
| Модель робочої області | Bind-mount або копіювання | Віддалено-канонічна (початкове заповнення один раз) | mirror або remote |
| Керування мережею | docker.network (типово: none) |
Залежить від віддаленого хоста | Залежить від OpenShell |
| Браузерний sandbox | Підтримується | Не підтримується | Поки не підтримується |
| Bind mounts | docker.binds |
N/A | N/A |
| Найкраще для | Локальної розробки, повної ізоляції | Перенесення навантаження на віддалену машину | Керованих віддалених sandbox із необов’язковою двосторонньою синхронізацією |
Docker-бекенд
Sandboxing вимкнено за замовчуванням. Якщо ви ввімкнете sandboxing і не виберете бекенд, OpenClaw використає Docker-бекенд. Він виконує інструменти й sandbox-браузери локально через сокет демона Docker (/var/run/docker.sock). Ізоляція sandbox-контейнера визначається просторами імен Docker.
Щоб відкрити GPU хоста для Docker-sandbox, задайте agents.defaults.sandbox.docker.gpus або перевизначення для окремого агента agents.list[].sandbox.docker.gpus. Значення передається до прапорця Docker --gpus як окремий аргумент, наприклад "all" або "device=GPU-uuid", і потребує сумісного середовища виконання на хості, такого як NVIDIA Container Toolkit.
SSH-бекенд
Використовуйте backend: "ssh", коли хочете, щоб OpenClaw запускав exec, файлові інструменти й читання медіа в sandbox на довільній машині, доступній через SSH.
{ agents: { defaults: { sandbox: { mode: "all", backend: "ssh", scope: "session", workspaceAccess: "rw", ssh: { target: "user@gateway-host:22", workspaceRoot: "/tmp/openclaw-sandboxes", strictHostKeyChecking: true, updateHostKeys: true, identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", // Or use SecretRefs / inline contents instead of local files: // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, }, }, }, },}How it works
- OpenClaw створює віддалений root для кожної області під
sandbox.ssh.workspaceRoot. - Під час першого використання після створення або повторного створення OpenClaw один раз заповнює цю віддалену робочу область із локальної робочої області.
- Після цього
exec,read,write,edit,apply_patch, читання prompt-медіа й staging вхідних медіа виконуються безпосередньо з віддаленою робочою областю через SSH. - OpenClaw не синхронізує віддалені зміни назад у локальну робочу область автоматично.
Authentication material
identityFile,certificateFile,knownHostsFile: використовують наявні локальні файли й передають їх через конфігурацію OpenSSH.identityData,certificateData,knownHostsData: використовують inline-рядки або SecretRefs. OpenClaw розв’язує їх через звичайний snapshot середовища виконання секретів, записує їх у тимчасові файли з0600і видаляє після завершення SSH-сесії.- Якщо для того самого елемента задано і
*File, і*Data,*Dataмає пріоритет для цієї SSH-сесії.
Remote-canonical consequences
Це віддалено-канонічна модель. Віддалена SSH-робоча область стає справжнім станом sandbox після початкового заповнення.
- Локальні для хоста зміни, зроблені поза OpenClaw після кроку заповнення, не видимі віддалено, доки ви не створите sandbox повторно.
openclaw sandbox recreateвидаляє віддалений root для відповідної області й знову заповнює його з локального під час наступного використання.- Браузерний sandbox не підтримується в SSH-бекенді.
- Налаштування
sandbox.docker.*не застосовуються до SSH-бекенда.
OpenShell-бекенд
Використовуйте backend: "openshell", коли хочете, щоб OpenClaw запускав інструменти в sandbox у віддаленому середовищі, керованому OpenShell. Повний посібник із налаштування, довідку з конфігурації та порівняння режимів робочої області див. на окремій сторінці OpenShell.
OpenShell повторно використовує той самий базовий SSH-транспорт і віддалений міст файлової системи, що й універсальний SSH-бекенд, і додає специфічний для OpenShell життєвий цикл (sandbox create/get/delete, sandbox ssh-config) плюс необов’язковий режим робочої області mirror.
{ agents: { defaults: { sandbox: { mode: "all", backend: "openshell", scope: "session", workspaceAccess: "rw", }, }, }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "remote", // mirror | remote remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", }, }, }, },}Режими OpenShell:
mirror(типово): локальна робоча область залишається канонічною. OpenClaw синхронізує локальні файли в OpenShell перед exec і синхронізує віддалену робочу область назад після exec.remote: робоча область OpenShell є канонічною після створення sandbox. OpenClaw один раз заповнює віддалену робочу область із локальної, а потім файлові інструменти й exec працюють безпосередньо з віддаленим sandbox без синхронізації змін назад.
Подробиці віддаленого транспорту
- OpenClaw запитує в OpenShell SSH-конфігурацію для конкретної пісочниці через
openshell sandbox ssh-config <name>. - Ядро записує цю SSH-конфігурацію в тимчасовий файл, відкриває SSH-сеанс і повторно використовує той самий віддалений міст файлової системи, що й
backend: "ssh". - У режимі
mirrorвідрізняється лише життєвий цикл: синхронізація локального середовища з віддаленим перед exec, потім зворотна синхронізація після exec.
Поточні обмеження OpenShell
- браузер пісочниці поки не підтримується
sandbox.docker.bindsне підтримується в бекенді OpenShell- специфічні для Docker параметри виконання в
sandbox.docker.*досі застосовуються лише до бекенду Docker
Режими робочого простору
OpenShell має дві моделі робочого простору. На практиці це найважливіша частина.
mirror (локальний канонічний)
Використовуйте plugins.entries.openshell.config.mode: "mirror", коли хочете, щоб локальний робочий простір залишався канонічним.
Поведінка:
- Перед
execOpenClaw синхронізує локальний робочий простір із пісочницею OpenShell. - Після
execOpenClaw синхронізує віддалений робочий простір назад у локальний робочий простір. - Файлові інструменти й надалі працюють через міст пісочниці, але локальний робочий простір залишається джерелом істини між ходами.
Використовуйте це, коли:
- ви редагуєте файли локально поза OpenClaw і хочете, щоб ці зміни автоматично з'являлися в пісочниці
- ви хочете, щоб пісочниця OpenShell поводилася якомога подібніше до бекенду Docker
- ви хочете, щоб робочий простір хоста відображав записи пісочниці після кожного ходу exec
Компроміс: додаткові витрати на синхронізацію до й після exec.
remote (OpenShell канонічний)
Використовуйте plugins.entries.openshell.config.mode: "remote", коли хочете, щоб робочий простір OpenShell став канонічним.
Поведінка:
- Коли пісочницю створено вперше, OpenClaw один раз ініціалізує віддалений робочий простір із локального робочого простору.
- Після цього
exec,read,write,editіapply_patchпрацюють безпосередньо з віддаленим робочим простором OpenShell. - OpenClaw не синхронізує віддалені зміни назад у локальний робочий простір після exec.
- Читання медіа під час формування промпта й надалі працює, бо файлові й медіаінструменти читають через міст пісочниці, а не припускають локальний шлях хоста.
- Транспортом є SSH у пісочницю OpenShell, повернуту
openshell sandbox ssh-config.
Важливі наслідки:
- Якщо після етапу ініціалізації ви редагуєте файли на хості поза OpenClaw, віддалена пісочниця не побачить ці зміни автоматично.
- Якщо пісочницю створено заново, віддалений робочий простір знову ініціалізується з локального робочого простору.
- З
scope: "agent"абоscope: "shared"цей віддалений робочий простір спільно використовується на тому самому рівні області.
Використовуйте це, коли:
- пісочниця має переважно жити на віддаленому боці OpenShell
- ви хочете зменшити витрати на синхронізацію для кожного ходу
- ви не хочете, щоб локальні редагування на хості непомітно перезаписували стан віддаленої пісочниці
Виберіть mirror, якщо сприймаєте пісочницю як тимчасове середовище виконання. Виберіть remote, якщо сприймаєте пісочницю як справжній робочий простір.
Життєвий цикл OpenShell
Пісочниці OpenShell і надалі керуються через звичайний життєвий цикл пісочниці:
openclaw sandbox listпоказує середовища виконання OpenShell, а також середовища Dockeropenclaw sandbox recreateвидаляє поточне середовище виконання й дає OpenClaw змогу створити його заново під час наступного використання- логіка prune також враховує бекенд
Для режиму remote повторне створення особливо важливе:
- повторне створення видаляє канонічний віддалений робочий простір для цієї області
- наступне використання ініціалізує свіжий віддалений робочий простір із локального робочого простору
Для режиму mirror повторне створення переважно скидає віддалене середовище виконання, бо локальний робочий простір усе одно залишається канонічним.
Доступ до робочого простору
agents.defaults.sandbox.workspaceAccess керує тим, що може бачити пісочниця:
none (за замовчуванням)
Інструменти бачать робочий простір пісочниці в ~/.openclaw/sandboxes.
ro
Монтує робочий простір агента лише для читання в /agent (вимикає write/edit/apply_patch).
rw
Монтує робочий простір агента для читання/запису в /workspace.
З бекендом OpenShell:
- режим
mirrorі надалі використовує локальний робочий простір як канонічне джерело між ходами exec - режим
remoteвикористовує віддалений робочий простір OpenShell як канонічне джерело після початкової ініціалізації workspaceAccess: "ro"і"none"і надалі обмежують поведінку запису так само
Вхідні медіа копіюються в активний робочий простір пісочниці (media/inbound/*).
Користувацькі bind-монтування
agents.defaults.sandbox.docker.binds монтує додаткові каталоги хоста в контейнер. Формат: host:container:mode (наприклад, "/home/user/source:/source:rw").
Глобальні й агентні binds об'єднуються (не замінюються). За scope: "shared" агентні binds ігноруються.
agents.defaults.sandbox.browser.binds монтує додаткові каталоги хоста лише в контейнер браузера пісочниці.
- Коли задано (зокрема
[]), це замінюєagents.defaults.sandbox.docker.bindsдля контейнера браузера. - Коли пропущено, контейнер браузера повертається до
agents.defaults.sandbox.docker.binds(зворотно сумісно).
Приклад (джерело лише для читання + додатковий каталог даних):
{ agents: { defaults: { sandbox: { docker: { binds: ["/home/user/source:/source:ro", "/var/data/myapp:/data:ro"], }, }, }, list: [ { id: "build", sandbox: { docker: { binds: ["/mnt/cache:/cache:rw"], }, }, }, ], },}Образи й налаштування
Стандартний образ Docker: openclaw-sandbox:bookworm-slim
Зберіть стандартний образ
З вихідного checkout:
scripts/sandbox-setup.shЗ npm-встановлення (вихідний checkout не потрібен):
docker build -t openclaw-sandbox:bookworm-slim - <<'DOCKERFILE'FROM debian:bookworm-slimENV DEBIAN_FRONTEND=noninteractiveRUN apt-get update && apt-get install -y --no-install-recommends \ bash ca-certificates curl git jq python3 ripgrep \ && rm -rf /var/lib/apt/lists/*RUN useradd --create-home --shell /bin/bash sandboxUSER sandboxWORKDIR /home/sandboxCMD ["sleep", "infinity"]DOCKERFILEСтандартний образ не містить Node. Якщо skill потребує Node (або інших середовищ виконання), або вбудуйте власний образ, або встановіть через sandbox.docker.setupCommand (потрібні вихід у мережу + записуваний root + користувач root).
OpenClaw не підміняє непомітно відсутній openclaw-sandbox:bookworm-slim простим debian:bookworm-slim. Запуски пісочниці, націлені на стандартний образ, швидко завершуються помилкою з інструкцією зі збирання, доки ви його не зберете, бо вбудований образ містить python3 для допоміжних засобів запису/редагування в пісочниці.
Необов'язково: зберіть common-образ
Для функціональнішого образу пісочниці з поширеними інструментами (наприклад, curl, jq, Node 24, pnpm, python3 і git):
З вихідного checkout:
scripts/sandbox-common-setup.shЗ npm-встановлення спершу зберіть стандартний образ (див. вище), а потім зберіть common-образ поверх нього, використовуючи scripts/docker/sandbox/Dockerfile.common з репозиторію.
Потім установіть agents.defaults.sandbox.docker.image у openclaw-sandbox-common:bookworm-slim.
Необов'язково: зберіть образ браузера пісочниці
З вихідного checkout:
scripts/sandbox-browser-setup.shЗ npm-встановлення зберіть за допомогою scripts/docker/sandbox/Dockerfile.browser з репозиторію.
За замовчуванням контейнери пісочниці Docker запускаються без мережі. Перевизначте це через agents.defaults.sandbox.docker.network.
Стандартні налаштування Chromium для браузера пісочниці
Вбудований образ браузера пісочниці також застосовує консервативні стартові налаштування Chromium для контейнеризованих навантажень. Поточні стандартні налаштування контейнера включають:
--remote-debugging-address=127.0.0.1--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>--user-data-dir=${HOME}/.chrome--no-first-run--no-default-browser-check--disable-3d-apis--disable-gpu--disable-dev-shm-usage--disable-background-networking--disable-extensions--disable-features=TranslateUI--disable-breakpad--disable-crash-reporter--disable-software-rasterizer--no-zygote--metrics-recording-only--renderer-process-limit=2--no-sandbox, коли ввімкненоnoSandbox.- Три прапорці посилення графіки (
--disable-3d-apis,--disable-software-rasterizer,--disable-gpu) необов'язкові й корисні, коли контейнери не мають підтримки GPU. УстановітьOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0, якщо ваше навантаження потребує WebGL або інших 3D/браузерних функцій. --disable-extensionsувімкнено за замовчуванням; його можна вимкнути черезOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0для потоків, що залежать від розширень.--renderer-process-limit=2керується черезOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, де0зберігає стандартне значення Chromium.
Якщо вам потрібен інший профіль виконання, використайте власний образ браузера й надайте власний entrypoint. Для локальних (неконтейнерних) профілів Chromium використовуйте browser.extraArgs, щоб додати додаткові стартові прапорці.
Стандартні налаштування мережевої безпеки
network: "host"заблоковано.network: "container:<id>"заблоковано за замовчуванням (ризик обходу через приєднання до простору імен).- Аварійний виняток:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
Інсталяції Docker і контейнеризований Gateway описано тут: Docker
Для розгортань Docker Gateway scripts/docker/setup.sh може ініціалізувати конфігурацію пісочниці. Установіть OPENCLAW_SANDBOX=1 (або true/yes/on), щоб увімкнути цей шлях. Розташування сокета можна перевизначити за допомогою OPENCLAW_DOCKER_SOCKET. Повне налаштування й довідник змінних середовища: Docker.
setupCommand (одноразове налаштування контейнера)
setupCommand запускається один раз після створення контейнера пісочниці (не під час кожного запуску). Виконується всередині контейнера через sh -lc.
Шляхи:
- Глобально:
agents.defaults.sandbox.docker.setupCommand - Для окремого агента:
agents.list[].sandbox.docker.setupCommand
Поширені помилки
- Стандартне значення
docker.network—"none"(без вихідного доступу), тому встановлення пакетів завершуватиметься помилкою. docker.network: "container:<id>"потребуєdangerouslyAllowContainerNamespaceJoin: trueі призначене лише для аварійного винятку.readOnlyRoot: trueзабороняє записи; установітьreadOnlyRoot: falseабо підготуйте власний образ.- Для встановлення пакетів
userмає бути root (пропустітьuserабо встановітьuser: "0:0"). - Виконання в пісочниці не успадковує
process.envхоста. Використовуйтеagents.defaults.sandbox.docker.env(або власний образ) для API-ключів Skills. - Значення в
agents.defaults.sandbox.docker.envпередаються як явні змінні середовища контейнера Docker. Будь-хто з доступом до демона Docker може переглянути їх командами метаданих Docker, як-отdocker inspect. Використовуйте власний образ, змонтований файл із секретами або інший шлях доставлення секретів, якщо таке розкриття метаданих неприйнятне.
Політика інструментів і аварійні виходи
Політики дозволу/заборони інструментів усе ще застосовуються перед правилами пісочниці. Якщо інструмент заборонено глобально або для окремого агента, пісочниця не повертає його назад.
tools.elevated — це явний аварійний вихід, який запускає exec поза пісочницею (gateway за замовчуванням або node, коли ціль виконання — node). Директиви /exec застосовуються лише для авторизованих відправників і зберігаються в межах сеансу; щоб жорстко вимкнути exec, використовуйте заборону в політиці інструментів (див. Пісочниця, політика інструментів і Elevated).
Налагодження:
- Використовуйте
openclaw sandbox explain, щоб перевірити фактичний режим пісочниці, політику інструментів і ключі конфігурації для виправлення. - Див. Пісочниця, політика інструментів і Elevated, щоб зрозуміти модель мислення для питання «чому це заблоковано?».
Тримайте все заблокованим.
Перевизначення для кількох агентів
Кожен агент може перевизначати пісочницю та інструменти: agents.list[].sandbox і agents.list[].tools (а також agents.list[].tools.sandbox.tools для політики інструментів пісочниці). Див. Пісочниця й інструменти для кількох агентів, щоб дізнатися про пріоритет.
Мінімальний приклад увімкнення
{ agents: { defaults: { sandbox: { mode: "non-main", scope: "session", workspaceAccess: "none", }, }, },}Пов’язане
- Пісочниця й інструменти для кількох агентів — перевизначення для окремих агентів і пріоритет
- OpenShell — налаштування керованого бекенда пісочниці, режими робочої області та довідник конфігурації
- Конфігурація пісочниці
- Пісочниця, політика інструментів і Elevated — налагодження «чому це заблоковано?»
- Безпека