agents.defaults.sandbox (globalnie) lub agents.list[].sandbox (dla poszczególnych agentów). Proces Gateway zawsze pozostaje na hoście; po włączeniu piaskownicy przenoszone jest do niej wyłącznie wykonywanie narzędzi.
Nie jest to doskonała granica bezpieczeństwa, ale znacząco ogranicza dostęp do systemu plików i procesów, gdy model zrobi coś nierozsądnego.
Co jest uruchamiane w piaskownicy
- Wykonywanie narzędzi:
exec,read,write,edit,apply_patch,processitd. - Opcjonalna przeglądarka w piaskownicy (
agents.defaults.sandbox.browser).
- Sam proces Gateway.
- Każde narzędzie, któremu jawnie zezwolono na działanie poza piaskownicą za pomocą
tools.elevated. Uprzywilejowane wykonywanie poleceń omija piaskownicę i działa w skonfigurowanym miejscu wyjścia (gatewaydomyślnie lubnode, gdy celem wykonywania jestnode). Jeśli piaskownica jest wyłączona,tools.elevatedniczego nie zmienia, ponieważ polecenia i tak są już wykonywane na hoście. Zobacz Tryb uprzywilejowany.
Tryby, zakres i backend
Zachowanie piaskownicy kontrolują trzy niezależne ustawienia:
Tryb określa, kiedy używana jest piaskownica:
off: bez piaskownicy.non-main: piaskownica dla każdej sesji z wyjątkiem głównej sesji agenta. Kluczem głównej sesji jest zawszeagent:<agentId>:main(lubglobal, gdysession.scopema wartość"global"); nie można go konfigurować. Sesje grup i kanałów używają własnych kluczy, dlatego zawsze są uznawane za inne niż główna i działają w piaskownicy.all: każda sesja działa w piaskownicy.
agent: jeden kontener na agenta.session: jeden kontener na sesję.shared: jeden kontener współdzielony przez wszystkie sesje działające w piaskownicy (w tym zakresie ignorowane są nadpisaniadocker/ssh/browserdla poszczególnych agentów).
agents.defaults.sandbox.ssh, a konfiguracja właściwa dla OpenShell — w plugins.entries.openshell.config.
Backend Docker
Docker jest domyślnym backendem po włączeniu piaskownicy. Uruchamia narzędzia i przeglądarki piaskownicy lokalnie za pośrednictwem gniazda demona Docker (/var/run/docker.sock); izolację zapewniają przestrzenie nazw Docker.
Wartości domyślne: network: "none" (brak ruchu wychodzącego), readOnlyRoot: true, capDrop: ["ALL"], obraz openclaw-sandbox:bookworm-slim.
Aby udostępnić procesory graficzne hosta, ustaw agents.defaults.sandbox.docker.gpus (lub nadpisanie dla danego agenta) na wartość taką jak "all" albo "device=GPU-uuid". Wartość ta jest przekazywana do flagi Docker --gpus i wymaga zgodnego środowiska uruchomieniowego hosta, takiego jak NVIDIA Container Toolkit.
Przeglądarka w piaskownicy
- Przeglądarka piaskownicy uruchamia się automatycznie (zapewniając dostępność CDP), gdy wymaga jej narzędzie przeglądarki. Skonfiguruj ją za pomocą
agents.defaults.sandbox.browser.autoStart(domyślnietrue) iautoStartTimeoutMs(domyślnie 12 s). - Kontenery przeglądarki piaskownicy korzystają z dedykowanej sieci Docker (
openclaw-sandbox-browser) zamiast globalnej siecibridge. Skonfiguruj ją za pomocąagents.defaults.sandbox.browser.network. agents.defaults.sandbox.browser.cdpSourceRangeogranicza przychodzący ruch CDP na granicy kontenera za pomocą listy dozwolonych zakresów CIDR (na przykład172.21.0.1/32).- Dostęp obserwatora noVNC jest domyślnie chroniony hasłem; OpenClaw generuje adres URL z krótkotrwałym tokenem, który udostępnia lokalną stronę inicjującą i otwiera noVNC z hasłem we fragmencie adresu URL (nie w ciągu zapytania ani dziennikach nagłówków).
agents.defaults.sandbox.browser.allowHostControl(domyślniefalse) umożliwia sesjom w piaskownicy jawne wskazanie przeglądarki hosta jako celu.- Opcjonalne listy dozwolonych wartości kontrolują
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
Backend SSH
Użyjbackend: "ssh", aby uruchamiać exec, narzędzia plikowe i odczyty multimediów w piaskownicy na dowolnej maszynie dostępnej przez SSH.
command: "ssh", workspaceRoot: "/tmp/openclaw-sandboxes", strictHostKeyChecking: true, updateHostKeys: true.
- Cykl życia: OpenClaw tworzy zdalny katalog główny dla każdego zakresu w
sandbox.ssh.workspaceRoot. Przy pierwszym użyciu po utworzeniu lub ponownym utworzeniu jednorazowo inicjuje ten zdalny obszar roboczy z lokalnego obszaru roboczego. Następnieexec,read,write,edit,apply_patch, odczyty multimediów na potrzeby promptów oraz przygotowywanie przychodzących multimediów działają bezpośrednio na zdalnym obszarze roboczym przez SSH. OpenClaw nie synchronizuje automatycznie zmian zdalnych z powrotem do lokalnego obszaru roboczego. - Materiały uwierzytelniające:
identityFile/certificateFile/knownHostsFilewskazują istniejące pliki lokalne.identityData/certificateData/knownHostsDataprzyjmują ciągi podane bezpośrednio lub odwołania SecretRefs, rozwiązywane przez standardową migawkę środowiska uruchomieniowego sekretów, zapisywane w plikach tymczasowych z trybem0600i usuwane po zakończeniu sesji SSH. Jeśli dla tego samego elementu ustawiono zarówno wariant*File, jak i*Data, w danej sesji pierwszeństwo ma*Data. - Konsekwencje zdalnego stanu kanonicznego: po początkowym zainicjowaniu zdalny obszar roboczy SSH staje się rzeczywistym stanem piaskownicy. Lokalne zmiany na hoście wprowadzone poza OpenClaw po etapie inicjowania nie są widoczne zdalnie, dopóki nie utworzysz piaskownicy ponownie.
openclaw sandbox recreateusuwa zdalny katalog główny danego zakresu i przy następnym użyciu ponownie inicjuje go z lokalnego obszaru roboczego. Ten backend nie obsługuje piaskownicy przeglądarki, a ustawieniasandbox.docker.*nie mają do niego zastosowania.
Backend OpenShell
Użyjbackend: "openshell", aby uruchamiać narzędzia w piaskownicy w zdalnym środowisku zarządzanym przez OpenShell. OpenShell używa tego samego transportu SSH i mostu zdalnego systemu plików co ogólny backend SSH, a ponadto zapewnia obsługę cyklu życia OpenShell (sandbox create/get/delete/ssh-config) oraz opcjonalny tryb synchronizacji obszaru roboczego mirror.
mode: "mirror" (domyślny) zachowuje lokalny obszar roboczy jako kanoniczny: OpenClaw synchronizuje dane lokalne z piaskownicą przed exec, a następnie synchronizuje zmiany z powrotem. mode: "remote" jednorazowo inicjuje zdalny obszar roboczy z lokalnego, po czym uruchamia exec/read/write/edit/apply_patch bezpośrednio na zdalnym obszarze roboczym bez synchronizowania zmian z powrotem; lokalne zmiany po zainicjowaniu są niewidoczne, dopóki nie uruchomisz openclaw sandbox recreate. W przypadku scope: "agent" lub scope: "shared" ten zdalny obszar roboczy jest współdzielony w tym samym zakresie. Obecne ograniczenia: piaskownica przeglądarki nie jest jeszcze obsługiwana, a sandbox.docker.binds nie ma zastosowania do tego backendu.
Polecenia openclaw sandbox list/recreate/prune traktują środowiska uruchomieniowe OpenShell tak samo jak środowiska Docker; logika czyszczenia uwzględnia backend.
Pełne wymagania wstępne, opis konfiguracji, porównanie trybów obszaru roboczego i szczegóły cyklu życia znajdziesz w sekcji OpenShell.
Dostęp do obszaru roboczego
agents.defaults.sandbox.workspaceAccess określa, co jest widoczne dla piaskownicy:
W przypadku backendu OpenShell tryb
mirror nadal używa lokalnego obszaru roboczego jako źródła kanonicznego między wywołaniami exec, tryb remote po początkowym zainicjowaniu używa jako źródła kanonicznego zdalnego obszaru roboczego OpenShell, a workspaceAccess: "ro"/"none" nadal ogranicza możliwość zapisu w taki sam sposób.
Przychodzące multimedia są kopiowane do aktywnego obszaru roboczego piaskownicy (media/inbound/*).
Skills: narzędzie
read jest ograniczone do katalogu głównego piaskownicy. Przy workspaceAccess: "none" OpenClaw kopiuje kwalifikujące się Skills do obszaru roboczego piaskownicy (.../skills), aby można było je odczytać. Przy "rw" Skills z obszaru roboczego są dostępne do odczytu w /workspace/skills, a kwalifikujące się zarządzane, dołączone lub pochodzące z Pluginów Skills są umieszczane w wygenerowanej ścieżce tylko do odczytu /workspace/.openclaw/sandbox-skills/skills.Niestandardowe montowania typu bind
agents.defaults.sandbox.docker.binds montuje w kontenerze dodatkowe katalogi hosta. Format: host:container:mode (np. "/home/user/source:/source:rw").
Globalne montowania typu bind i montowania przypisane do poszczególnych agentów są scalane (a nie zastępowane). Przy scope: "shared" montowania przypisane do poszczególnych agentów są ignorowane.
agents.defaults.sandbox.browser.binds montuje dodatkowe katalogi hosta wyłącznie w kontenerze przeglądarki piaskownicy. Gdy ta opcja jest ustawiona (również na []), zastępuje docker.binds dla kontenera przeglądarki; gdy ją pominięto, kontener przeglądarki używa docker.binds.
Obrazy i konfiguracja
Domyślny obraz Dockera:openclaw-sandbox:bookworm-slim
Kopia robocza źródeł a instalacja z npmSkrypty pomocnicze
scripts/sandbox-setup.sh, scripts/sandbox-common-setup.sh i scripts/sandbox-browser-setup.sh są dostępne tylko podczas uruchamiania z kopii roboczej źródeł. Nie są zawarte w pakiecie npm.Jeśli zainstalowano OpenClaw za pomocą npm install -g openclaw, użyj zamiast nich pokazanych poniżej wbudowanych poleceń docker build.1
Zbuduj domyślny obraz
Z kopii roboczej źródeł:Z instalacji npm (kopia robocza źródeł nie jest wymagana):Domyślny obraz nie zawiera środowiska Node. Jeśli Skill wymaga Node (lub innych środowisk uruchomieniowych), zbuduj niestandardowy obraz albo zainstaluj je za pomocą
sandbox.docker.setupCommand (wymaga wychodzącego dostępu do sieci, zapisywalnego głównego systemu plików i użytkownika root).Gdy brakuje openclaw-sandbox:bookworm-slim, OpenClaw nie zastępuje go po cichu zwykłym obrazem debian:bookworm-slim. Uruchomienia piaskownicy korzystające z domyślnego obrazu natychmiast kończą się niepowodzeniem i wyświetlają instrukcję budowania, dopóki go nie zbudujesz, ponieważ dołączony obraz zawiera python3 wymagany przez narzędzia pomocnicze piaskownicy do zapisu i edycji.2
Opcjonalnie: zbuduj obraz ze wspólnymi narzędziami
Aby uzyskać bardziej funkcjonalny obraz piaskownicy ze wspólnymi narzędziami (na przykład W przypadku instalacji npm najpierw zbuduj domyślny obraz (zobacz wyżej), a następnie zbuduj na jego podstawie obraz ze wspólnymi narzędziami, używając pliku
curl, jq, Node 24, pnpm, python3 i git):Z kopii roboczej źródeł:scripts/docker/sandbox/Dockerfile.common z repozytorium.Następnie ustaw agents.defaults.sandbox.docker.image na openclaw-sandbox-common:bookworm-slim.3
Opcjonalnie: zbuduj obraz przeglądarki piaskownicy
Z kopii roboczej źródeł:W przypadku instalacji npm zbuduj obraz przy użyciu pliku
scripts/docker/sandbox/Dockerfile.browser z repozytorium.agents.defaults.sandbox.docker.network.
Domyślne ustawienia Chromium w przeglądarce piaskownicy
Domyślne ustawienia Chromium w przeglądarce piaskownicy
Dołączony obraz przeglądarki piaskownicy stosuje zachowawcze flagi uruchamiania Chromium dla obciążeń działających w kontenerach:
--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-dev-shm-usage--disable-background-networking--disable-breakpad--disable-crash-reporter--no-zygote--metrics-recording-only--password-store=basic--use-mock-keychain--headless=new, gdy włączonobrowser.headless.--no-sandbox --disable-setuid-sandbox, gdy włączonobrowser.noSandbox.- Domyślnie
--disable-3d-apis,--disable-gpu,--disable-software-rasterizer; te flagi zwiększające bezpieczeństwo grafiki pomagają w kontenerach bez obsługi GPU. UstawOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0, jeśli Twoje obciążenie wymaga WebGL lub innych funkcji 3D. - Domyślnie
--disable-extensions; ustawOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0dla przepływów zależnych od rozszerzeń. - Domyślnie
--renderer-process-limit=2; steruje tymOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, gdzie0zachowuje ustawienie domyślne Chromium.
browser.extraArgs, aby dołączyć dodatkowe flagi uruchamiania.Domyślne ustawienia bezpieczeństwa sieci
Domyślne ustawienia bezpieczeństwa sieci
network: "host"jest zablokowane.network: "container:<id>"jest domyślnie zablokowane (ryzyko obejścia izolacji przez dołączenie do przestrzeni nazw).- Awaryjne obejście zabezpieczeń:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
scripts/docker/setup.sh może zainicjować konfigurację piaskownicy. Ustaw OPENCLAW_SANDBOX=1 (lub true/yes/on), aby włączyć tę ścieżkę. Pełna konfiguracja i dokumentacja zmiennych środowiskowych: Docker.
setupCommand (jednorazowa konfiguracja kontenera)
setupCommand jest uruchamiane raz po utworzeniu kontenera piaskownicy (a nie przy każdym uruchomieniu). Jest wykonywane wewnątrz kontenera za pomocą sh -lc.
Ścieżki:
- Globalna:
agents.defaults.sandbox.docker.setupCommand - Dla agenta:
agents.list[].sandbox.docker.setupCommand
Typowe pułapki
Typowe pułapki
- Domyślna wartość
docker.networkto"none"(brak ruchu wychodzącego), dlatego instalowanie pakietów zakończy się niepowodzeniem. docker.network: "container:<id>"wymagadangerouslyAllowContainerNamespaceJoin: truei służy wyłącznie jako awaryjne obejście zabezpieczeń.readOnlyRoot: trueuniemożliwia zapis; ustawreadOnlyRoot: falselub zbuduj niestandardowy obraz.- Podczas instalowania pakietów
usermusi wskazywać użytkownika root (pomińuserlub ustawuser: "0:0"). - Polecenia wykonywane w piaskownicy nie dziedziczą
process.envhosta. Klucze API dla Skills należy przekazywać przezagents.defaults.sandbox.docker.env(lub umieścić w niestandardowym obrazie). - Wartości z
agents.defaults.sandbox.docker.envsą przekazywane jako jawne zmienne środowiskowe kontenera Dockera. Każda osoba mająca dostęp do demona Dockera może je sprawdzić za pomocą poleceń metadanych Dockera, takich jakdocker inspect. Jeśli takie ujawnienie w metadanych jest niedopuszczalne, użyj niestandardowego obrazu, zamontowanego pliku z sekretem lub innej metody dostarczania sekretów.
Zasady narzędzi i drogi obejścia zabezpieczeń
Zasady zezwalania na narzędzia i blokowania ich nadal obowiązują przed regułami piaskownicy. Jeśli narzędzie jest zablokowane globalnie lub dla konkretnego agenta, piaskownica nie przywraca do niego dostępu.tools.elevated jest jawnym mechanizmem obejścia, który uruchamia exec poza piaskownicą (domyślnie na gateway, a na node, gdy celem wykonania jest node). Dyrektywy /exec mają zastosowanie tylko do autoryzowanych nadawców i są zachowywane w ramach sesji; aby całkowicie wyłączyć exec, zablokuj je w zasadach narzędzi (zobacz Piaskownica a zasady narzędzi a tryb podwyższonych uprawnień).
Debugowanie:
openclaw sandbox listwyświetla kontenery piaskownicy, ich stan, zgodność obrazu, wiek, czas bezczynności oraz powiązaną sesję lub agenta.openclaw sandbox explain [--session <key>] [--agent <id>]sprawdza obowiązujący tryb piaskownicy, obszar roboczy hosta, katalog roboczy środowiska uruchomieniowego, montowania Dockera, zasady narzędzi i klucze konfiguracji służące do rozwiązania problemu. PoleworkspaceRootnadal zawiera skonfigurowany katalog główny piaskownicy;effectiveHostWorkspaceRootwskazuje rzeczywistą lokalizację aktywnego obszaru roboczego.openclaw sandbox recreate [--all | --session <key> | --agent <id>] [--browser] [--force]usuwa kontenery lub środowiska, aby przy następnym użyciu zostały ponownie utworzone zgodnie z bieżącą konfiguracją.- Zobacz Piaskownica a zasady narzędzi a tryb podwyższonych uprawnień, aby poznać model mentalny odpowiadający na pytanie „dlaczego to jest zablokowane?”.
Ustawienia zastępcze dla wielu agentów
Każdy agent może zastąpić ustawienia piaskownicy i narzędzi:agents.list[].sandbox oraz agents.list[].tools (a także agents.list[].tools.sandbox.tools w przypadku zasad narzędzi piaskownicy). Kolejność pierwszeństwa opisano w sekcji Piaskownica i narzędzia dla wielu agentów.
Minimalny przykład włączenia
Powiązane
- Piaskownica i narzędzia dla wielu agentów — nadpisania dla poszczególnych agentów i kolejność pierwszeństwa
- OpenShell — konfiguracja zarządzanego zaplecza piaskownicy, tryby obszaru roboczego i dokumentacja konfiguracji
- Konfiguracja piaskownicy
- Piaskownica a zasady narzędzi a tryb podwyższonych uprawnień — diagnozowanie problemu „dlaczego jest to blokowane?”
- Bezpieczeństwo