Sandboxing
OpenClaw może uruchamiać narzędzia wewnątrz kontenerów Docker, aby zmniejszyć promień rażenia. Jest to opcjonalne i kontrolowane przez konfigurację (agents.defaults.sandbox lub
agents.list[].sandbox). Jeśli sandboxing jest wyłączony, narzędzia działają na hoście.
Gateway pozostaje na hoście; wykonywanie narzędzi odbywa się w izolowanym sandboxie,
gdy jest włączone.
Nie jest to idealna granica bezpieczeństwa, ale w istotny sposób ogranicza dostęp
do systemu plików i procesów, gdy model zrobi coś nierozsądnego.
Co jest objęte sandboxingiem
- Wykonywanie narzędzi (
exec,read,write,edit,apply_patch,processitd.). - Opcjonalna przeglądarka w sandboxie (
agents.defaults.sandbox.browser).- Domyślnie przeglądarka w sandboxie uruchamia się automatycznie (zapewnia dostępność CDP), gdy narzędzie przeglądarki jej potrzebuje.
Konfiguracja przez
agents.defaults.sandbox.browser.autoStartiagents.defaults.sandbox.browser.autoStartTimeoutMs. agents.defaults.sandbox.browser.allowHostControlpozwala sesjom w sandboxie jawnie kierować ruch do przeglądarki na hoście.- Opcjonalne listy dozwolonych ograniczają
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
- Domyślnie przeglądarka w sandboxie uruchamia się automatycznie (zapewnia dostępność CDP), gdy narzędzie przeglądarki jej potrzebuje.
Konfiguracja przez
- Sam proces Gateway.
- Każde narzędzie jawnie dopuszczone do uruchamiania na hoście (np.
tools.elevated).- Podwyższone wykonanie (elevated exec) działa na hoście i omija sandboxing.
- Jeśli sandboxing jest wyłączony,
tools.elevatednie zmienia sposobu wykonania (już działa na hoście). Zobacz Elevated Mode.
Mody
agents.defaults.sandbox.mode kontroluje kiedy używany jest sandboxing:
"off": brak sandboxingu."non-main": sandbox tylko dla sesji niegłównych (domyślne, jeśli chcesz, aby zwykłe czaty działały na hoście)."all": każda sesja działa w sandboxie. Uwaga:"non-main"opiera się nasession.mainKey(domyślnie"main"), a nie na identyfikatorze agenta. Sesje grupowe/kanałowe używają własnych kluczy, więc są traktowane jako niegłówne i będą sandboxowane.
Zakres
agents.defaults.sandbox.scope kontroluje ile kontenerów jest tworzonych:
"session"(domyślne): jeden kontener na sesję."agent": jeden kontener na agenta."shared": jeden kontener współdzielony przez wszystkie sesje w sandboxie.
Dostęp do obszaru roboczego
agents.defaults.sandbox.workspaceAccess kontroluje co sandbox może widzieć:
"none"(domyślne): narzędzia widzą obszar roboczy sandboxa w~/.openclaw/sandboxes."ro": montuje obszar roboczy agenta tylko do odczytu w/agent(wyłączawrite/edit/apply_patch)."rw": montuje obszar roboczy agenta do odczytu i zapisu w/workspace.
media/inbound/*).
Uwaga dotycząca Skills: narzędzie read jest zakorzenione w sandboxie. Przy workspaceAccess: "none"
OpenClaw kopiuje kwalifikujące się skills do obszaru roboczego sandboxa (.../skills),
aby mogły być odczytywane. Przy "rw" skills obszaru roboczego są czytelne z
/workspace/skills.
Niestandardowe montowania bind
agents.defaults.sandbox.docker.binds montuje dodatkowe katalogi hosta do kontenera.
Format: host:container:mode (np. "/home/user/source:/source:rw").
Powiązania globalne i per-agent są łączone (nie zastępowane). Przy scope: "shared" powiązania per-agent są ignorowane.
agents.defaults.sandbox.browser.binds montuje dodatkowe katalogi hosta wyłącznie do kontenera sandbox browser.
- Po ustawieniu (w tym
[]) zastępujeagents.defaults.sandbox.docker.bindsdla kontenera przeglądarki. - Jeśli pominięte, kontener przeglądarki korzysta z
agents.defaults.sandbox.docker.binds(wsteczna kompatybilność).
- Powiązania omijają system plików sandboxa: ujawniają ścieżki hosta z trybem, który ustawisz (
:rolub:rw). - Wrażliwe montowania (np.
docker.sock, sekrety, klucze SSH) powinny być:ro, chyba że są absolutnie wymagane. - Połącz z
workspaceAccess: "ro", jeśli potrzebujesz tylko dostępu do odczytu do obszaru roboczego; tryby bindów pozostają niezależne. - Zobacz Sandbox vs Tool Policy vs Elevated, aby zrozumieć, jak bindy wchodzą w interakcję z polityką narzędzi i podwyższonym wykonaniem.
Obrazy + konfiguracja
Domyślny obraz:openclaw-sandbox:bookworm-slim
Zbuduj go jednorazowo:
sandbox.docker.setupCommand (wymaga wyjścia do sieci + zapisywalnego root +
użytkownika root).
Obraz przeglądarki w sandboxie:
agents.defaults.sandbox.docker.network.
Instalacje Dockera i skonteneryzowany gateway znajdują się tutaj:
Docker
setupCommand (jednorazowa konfiguracja kontenera)
setupCommand uruchamia się raz po utworzeniu kontenera sandboxa (nie przy każdym uruchomieniu).
Wykonywany jest wewnątrz kontenera przez sh -lc.
Ścieżki:
- Globalnie:
agents.defaults.sandbox.docker.setupCommand - Per-agent:
agents.list[].sandbox.docker.setupCommand
- Domyślne
docker.networkto"none"(brak wyjścia do sieci), więc instalacje pakietów się nie powiodą. readOnlyRoot: trueuniemożliwia zapisy; ustawreadOnlyRoot: falselub przygotuj niestandardowy obraz.usermusi być rootem do instalacji pakietów (pomińuserlub ustawuser: "0:0").- Wykonanie w sandboxie nie dziedziczy hostowych
process.env. Użyjagents.defaults.sandbox.docker.env(lub niestandardowego obrazu) dla kluczy API skills.
Polityka narzędzi + furtki awaryjne
Polityki zezwalania/odmawiania narzędzi nadal obowiązują przed regułami sandboxa. Jeśli narzędzie jest zabronione globalnie lub per-agent, sandboxing go nie przywróci.tools.elevated to jawna furtka, która uruchamia exec na hoście.
Dyrektywy /exec mają zastosowanie tylko dla autoryzowanych nadawców i utrzymują się per sesję; aby trwale wyłączyć
exec, użyj odmowy w polityce narzędzi (zobacz Sandbox vs Tool Policy vs Elevated).
Debugowanie:
- Użyj
openclaw sandbox explain, aby sprawdzić efektywny tryb sandboxa, politykę narzędzi i klucze konfiguracji napraw. - Zobacz Sandbox vs Tool Policy vs Elevated, aby zrozumieć model myślowy „dlaczego to jest zablokowane?”. Zachowaj ścisłe ograniczenia.
Nadpisania wieloagentowe
Każdy agent może nadpisać sandbox + narzędzia:agents.list[].sandbox i agents.list[].tools (oraz agents.list[].tools.sandbox.tools dla polityki narzędzi sandboxa).
Zobacz Multi-Agent Sandbox & Tools w kwestii priorytetów.