Gateway
Korumalı alan oluşturma
OpenClaw, etki alanını azaltmak için araç yürütmeyi bir korumalı alan arka ucu içinde çalıştırabilir. Korumalı alan varsayılan olarak kapalıdır ve agents.defaults.sandbox (genel) veya agents.list[].sandbox (ajan başına) tarafından denetlenir. Gateway işlemi her zaman ana makinede kalır; etkinleştirildiğinde yalnızca araç yürütme korumalı alana taşınır.
Korumalı alanda çalıştırılanlar
- Araç yürütme:
exec,read,write,edit,apply_patch,processvb. - İsteğe bağlı korumalı alan tarayıcısı (
agents.defaults.sandbox.browser).
Korumalı alanda çalıştırılmayanlar:
- Gateway işleminin kendisi.
tools.elevatedaracılığıyla korumalı alan dışında çalışmasına açıkça izin verilen tüm araçlar. Yükseltilmişexec, korumalı alanı atlar ve yapılandırılmış çıkış yolunda çalışır (varsayılan olarakgateway;exechedefinodeolduğundanode). Korumalı alan kapalıysaexeczaten ana makinede çalıştığındantools.elevatedhiçbir şeyi değiştirmez. Bkz. Yükseltilmiş Mod.
Modlar, kapsam ve arka uç
Korumalı alan davranışını üç bağımsız ayar denetler:
| Ayar | Anahtar | Değerler | Varsayılan |
|---|---|---|---|
| Mod | agents.defaults.sandbox.mode |
off, non-main, all |
off |
| Kapsam | agents.defaults.sandbox.scope |
agent, session, shared |
agent |
| Arka uç | agents.defaults.sandbox.backend |
docker, ssh, openshell |
docker |
Mod, korumalı alanın ne zaman uygulanacağını denetler:
off: korumalı alan kullanılmaz.non-main: ajanın ana oturumu dışındaki her oturumu korumalı alanda çalıştırır. Ana oturum anahtarı her zamanagent:<agentId>:maindeğeridir (session.scope"global"olduğundaglobal); yapılandırılamaz. Grup/kanal oturumları kendi anahtarlarını kullandığından her zaman ana olmayan oturum sayılır ve korumalı alanda çalıştırılır.all: her oturum bir korumalı alanda çalışır.
Kapsam, kaç kapsayıcı/ortam oluşturulacağını denetler:
agent: ajan başına bir kapsayıcı.session: oturum başına bir kapsayıcı.shared: korumalı alandaki tüm oturumlar tarafından paylaşılan bir kapsayıcı (bu kapsamda ajan başınadocker/ssh/browsergeçersiz kılmaları yok sayılır).
Arka uç, korumalı alan araçlarını hangi çalışma zamanının yürüteceğini denetler. SSH'ye özgü yapılandırma agents.defaults.sandbox.ssh altında; OpenShell'e özgü yapılandırma ise plugins.entries.openshell.config altında bulunur.
| Docker | SSH | OpenShell | |
|---|---|---|---|
| Çalıştığı yer | Yerel kapsayıcı | SSH ile erişilebilen herhangi bir ana makine | OpenShell tarafından yönetilen korumalı alan |
| Kurulum | scripts/sandbox-setup.sh |
SSH anahtarı + hedef ana makine | OpenShell Plugin'i etkin |
| Çalışma alanı modeli | Bağlama veya kopyalama | Uzak ortam esaslı (bir kez başlangıç verisi aktarılır) | mirror veya remote |
| Ağ denetimi | docker.network (varsayılan: yok) |
Uzak ana makineye bağlı | OpenShell'e bağlı |
| Tarayıcı korumalı alanı | Desteklenir | Desteklenmez | Henüz desteklenmiyor |
| Bağlamalar | docker.binds |
Yok | Yok |
| En uygun kullanım | Yerel geliştirme, tam yalıtım | İş yükünü uzak bir makineye aktarma | İsteğe bağlı çift yönlü eşitlemeyle yönetilen uzak korumalı alanlar |
Docker arka ucu
Korumalı alan etkinleştirildiğinde Docker varsayılan arka uçtur. Araçları ve korumalı alan tarayıcılarını Docker daemon soketi (/var/run/docker.sock) üzerinden yerel olarak çalıştırır; yalıtım Docker ad alanlarından gelir.
Varsayılanlar: network: "none" (dışarıya erişim yok), readOnlyRoot: true, capDrop: ["ALL"], imaj openclaw-sandbox:bookworm-slim.
Ana makine GPU'larını kullanıma açmak için agents.defaults.sandbox.docker.gpus değerini (veya ajan başına geçersiz kılmayı) "all" ya da "device=GPU-uuid" gibi bir değere ayarlayın. Bu değer Docker'ın --gpus bayrağına aktarılır ve NVIDIA Container Toolkit gibi uyumlu bir ana makine çalışma zamanı gerektirir.
Korumalı alan tarayıcısı
- Korumalı alan tarayıcısı, tarayıcı aracı ihtiyaç duyduğunda otomatik olarak başlatılır (CDP'nin erişilebilir olmasını sağlar).
agents.defaults.sandbox.browser.autoStart(varsayılantrue) veautoStartTimeoutMs(varsayılan 12 sn.) üzerinden yapılandırın. - Korumalı alan tarayıcı kapsayıcıları, genel
bridgeağı yerine özel bir Docker ağı (openclaw-sandbox-browser) kullanır.agents.defaults.sandbox.browser.networkile yapılandırın. agents.defaults.sandbox.browser.cdpSourceRange, kapsayıcı sınırındaki CDP girişini bir CIDR izin listesiyle sınırlar (örneğin172.21.0.1/32).- noVNC gözlemci erişimi varsayılan olarak parola korumalıdır; OpenClaw, yerel bir önyükleme sayfası sunan ve noVNC'yi URL parçasındaki parolayla açan kısa ömürlü bir belirteç URL'si üretir (sorgu dizesinde veya üstbilgi günlüklerinde değil).
agents.defaults.sandbox.browser.allowHostControl(varsayılanfalse), korumalı alandaki oturumların ana makine tarayıcısını açıkça hedeflemesine izin verir.- İsteğe bağlı izin listeleri
target: "custom"kullanımını denetler:allowedControlUrls,allowedControlHosts,allowedControlPorts.
SSH arka ucu
Rastgele bir SSH erişimli makinede exec, dosya araçları ve medya okumalarını korumalı alanda çalıştırmak için backend: "ssh" kullanın.
{ 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", // Veya yerel dosyalar yerine SecretRefs / satır içi içerikler kullanın: // 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" }, }, }, }, },}Varsayılanlar: command: "ssh", workspaceRoot: "/tmp/openclaw-sandboxes", strictHostKeyChecking: true, updateHostKeys: true.
- Yaşam döngüsü: OpenClaw,
sandbox.ssh.workspaceRootaltında kapsam başına bir uzak kök oluşturur. Oluşturma veya yeniden oluşturma işleminden sonraki ilk kullanımda yerel çalışma alanını bir kez bu uzak çalışma alanına aktarır. Ardındanexec,read,write,edit,apply_patch, istem medya okumaları ve gelen medya hazırlama işlemleri doğrudan SSH üzerinden uzak çalışma alanında çalışır. OpenClaw, uzak değişiklikleri yerel çalışma alanına otomatik olarak eşitlemez. - Kimlik doğrulama malzemesi:
identityFile/certificateFile/knownHostsFile, mevcut yerel dosyalara başvurur.identityData/certificateData/knownHostsData, satır içi dizeleri veya normal gizli bilgiler çalışma zamanı anlık görüntüsü üzerinden çözümlenen SecretRefs değerlerini kabul eder; bunlar0600moduyla geçici dosyalara yazılır ve SSH oturumu sona erdiğinde silinir. Aynı öğe için hem bir*Filehem de bir*Dataçeşidi ayarlanmışsa ilgili oturumda*Dataönceliklidir. - Uzak ortamın esas olmasının sonuçları: İlk aktarımın ardından uzak SSH çalışma alanı gerçek korumalı alan durumu hâline gelir. Aktarım adımından sonra OpenClaw dışında ana makinede yapılan yerel düzenlemeler, korumalı alanı yeniden oluşturana kadar uzak ortamda görünmez.
openclaw sandbox recreate, kapsam başına uzak kökü siler ve bir sonraki kullanımda yerel çalışma alanını yeniden aktarır. Bu arka uçta tarayıcı korumalı alanı desteklenmez vesandbox.docker.*ayarları geçerli değildir.
OpenShell arka ucu
Araçları OpenShell tarafından yönetilen uzak bir ortamda korumalı alanda çalıştırmak için backend: "openshell" kullanın. OpenShell, genel SSH arka ucuyla aynı SSH aktarımını ve uzak dosya sistemi köprüsünü yeniden kullanır; ayrıca OpenShell yaşam döngüsünü (sandbox create/get/delete/ssh-config) ve isteğe bağlı bir mirror çalışma alanı eşitleme modunu ekler.
{ agents: { defaults: { sandbox: { mode: "all", backend: "openshell", scope: "session", workspaceAccess: "rw", }, }, }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "remote", // mirror | remote }, }, }, },}mode: "mirror" (varsayılan), yerel çalışma alanını esas tutar: OpenClaw, exec öncesinde yerel içeriği korumalı alana eşitler ve sonrasında değişiklikleri geri eşitler. mode: "remote", uzak çalışma alanına yerel ortamdan bir kez başlangıç verisi aktarır; ardından exec/read/write/edit/apply_patch işlemlerini geri eşitleme yapmadan doğrudan uzak çalışma alanında çalıştırır. Aktarımdan sonra yapılan yerel düzenlemeler, openclaw sandbox recreate komutunu çalıştırana kadar görünmez. scope: "agent" veya scope: "shared" altında bu uzak çalışma alanı aynı kapsamda paylaşılır. Mevcut sınırlamalar: korumalı alan tarayıcısı henüz desteklenmez ve sandbox.docker.binds bu arka uçta geçerli değildir.
openclaw sandbox list/recreate/prune komutlarının tümü OpenShell çalışma zamanlarını Docker çalışma zamanlarıyla aynı şekilde ele alır; temizleme mantığı arka ucun farkındadır.
Tüm ön koşullar, yapılandırma başvurusu, çalışma alanı modu karşılaştırması ve yaşam döngüsü ayrıntıları için OpenShell bölümüne bakın.
Çalışma alanı erişimi
agents.defaults.sandbox.workspaceAccess, korumalı alanın neleri görebileceğini denetler:
| Değer | Davranış |
|---|---|
none (varsayılan) |
Araçlar, ~/.openclaw/sandboxes altında yalıtılmış bir sandbox çalışma alanı görür. |
ro |
Ajan çalışma alanını /agent konumuna salt okunur olarak bağlar (write/edit/apply_patch devre dışı bırakılır). |
rw |
Ajan çalışma alanını /workspace konumuna okuma/yazma modunda bağlar. |
OpenShell arka ucuyla mirror modu, çalıştırma turları arasında yerel çalışma alanını hâlâ kurallı kaynak olarak kullanır; remote modu ilk başlangıç verileri aktarıldıktan sonra uzak OpenShell çalışma alanını kurallı kaynak olarak kullanır ve workspaceAccess: "ro"/"none" yazma davranışını aynı şekilde kısıtlamaya devam eder.
Gelen medya, etkin sandbox çalışma alanına (media/inbound/*) kopyalanır.
Özel bağlama noktaları
agents.defaults.sandbox.docker.binds, ek ana makine dizinlerini konteynere bağlar. Biçim: ana_makine:konteyner:mod (ör. "/home/user/source:/source:rw").
Genel ve ajan başına bağlamalar birleştirilir (birbirinin yerini almaz). scope: "shared" altında ajan başına bağlamalar yok sayılır.
agents.defaults.sandbox.browser.binds, ek ana makine dizinlerini yalnızca sandbox tarayıcısı konteynerine bağlar. Ayarlandığında ([] dâhil), tarayıcı konteyneri için docker.binds değerinin yerini alır; belirtilmediğinde tarayıcı konteyneri docker.binds değerine geri döner.
{ 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"], }, }, }, ], },}İmajlar ve kurulum
Varsayılan Docker imajı: openclaw-sandbox:bookworm-slim
Varsayılan imajı oluşturun
Bir kaynak kod çıkışından:
scripts/sandbox-setup.shBir npm kurulumundan (kaynak kod çıkışı gerekmez):
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"]DOCKERFILEVarsayılan imaj Node içermez. Bir Skill, Node'a (veya başka çalışma zamanlarına) ihtiyaç duyuyorsa özel bir imaj oluşturun ya da sandbox.docker.setupCommand aracılığıyla kurun (ağ çıkışı + yazılabilir kök + root kullanıcısı gerektirir).
openclaw-sandbox:bookworm-slim eksik olduğunda OpenClaw bunun yerine sessizce düz debian:bookworm-slim kullanmaz. Varsayılan imajı hedefleyen sandbox çalıştırmaları, imajı oluşturana kadar bir oluşturma talimatıyla hızla başarısız olur; çünkü paketle birlikte gelen imaj, sandbox yazma/düzenleme yardımcıları için python3 içerir.
İsteğe bağlı: ortak imajı oluşturun
Yaygın araçları (örneğin curl, jq, Node 24, pnpm, python3 ve git) içeren, daha işlevsel bir sandbox imajı için:
Bir kaynak kod çıkışından:
scripts/sandbox-common-setup.shBir npm kurulumundan varsayılan imajı önce oluşturun (yukarıya bakın), ardından depodaki scripts/docker/sandbox/Dockerfile.common dosyasını kullanarak ortak imajı bunun üzerine oluşturun.
Ardından agents.defaults.sandbox.docker.image değerini openclaw-sandbox-common:bookworm-slim olarak ayarlayın.
İsteğe bağlı: sandbox tarayıcı imajını oluşturun
Bir kaynak kod çıkışından:
scripts/sandbox-browser-setup.shBir npm kurulumundan, depodaki scripts/docker/sandbox/Dockerfile.browser dosyasını kullanarak oluşturun.
Docker sandbox konteynerleri varsayılan olarak ağ olmadan çalışır. agents.defaults.sandbox.docker.network ile geçersiz kılın.
Sandbox tarayıcısı Chromium varsayılanları
Paketle birlikte gelen sandbox tarayıcı imajı, konteynerleştirilmiş iş yükleri için ölçülü Chromium başlangıç bayrakları uygular:
--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-keychainbrowser.headlessetkinleştirildiğinde--headless=new.browser.noSandboxetkinleştirildiğinde--no-sandbox --disable-setuid-sandbox.- Varsayılan olarak
--disable-3d-apis,--disable-gpu,--disable-software-rasterizer; bu grafik sağlamlaştırma bayrakları GPU desteği olmayan konteynerlere yardımcı olur. İş yükünüz WebGL veya diğer 3B özelliklere ihtiyaç duyuyorsaOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0olarak ayarlayın. - Varsayılan olarak
--disable-extensions; uzantılara bağlı akışlar içinOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0olarak ayarlayın. - Varsayılan olarak
--renderer-process-limit=2;OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>tarafından denetlenir;0, Chromium varsayılanını korur.
Farklı bir çalışma zamanı profiline ihtiyacınız varsa özel bir tarayıcı imajı kullanın ve kendi giriş noktanızı sağlayın. Yerel (konteyner dışı) Chromium profilleri için ek başlangıç bayrakları eklemek üzere browser.extraArgs kullanın.
Ağ güvenliği varsayılanları
network: "host"engellenir.network: "container:<id>"varsayılan olarak engellenir (ad alanı birleştirme yoluyla atlama riski).- Acil durum geçersiz kılması:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
Docker kurulumları ve konteynerleştirilmiş Gateway burada açıklanır: Docker
Docker Gateway dağıtımları için scripts/docker/setup.sh, sandbox yapılandırmasını önyükleyebilir. Bu yolu etkinleştirmek için OPENCLAW_SANDBOX=1 (veya true/yes/on) olarak ayarlayın. Soket konumunu OPENCLAW_DOCKER_SOCKET ile geçersiz kılın. Tam kurulum ve ortam değişkeni başvurusu: Docker.
setupCommand (tek seferlik konteyner kurulumu)
setupCommand, sandbox konteyneri oluşturulduktan sonra bir kez çalışır (her çalıştırmada değil). Konteyner içinde sh -lc aracılığıyla yürütülür.
Yollar:
- Genel:
agents.defaults.sandbox.docker.setupCommand - Ajan başına:
agents.list[].sandbox.docker.setupCommand
Yaygın sorunlar
- Varsayılan
docker.networkdeğeri"none"şeklindedir (çıkış yoktur), bu nedenle paket kurulumları başarısız olur. docker.network: "container:<id>",dangerouslyAllowContainerNamespaceJoin: truegerektirir ve yalnızca acil durumlarda kullanılmalıdır.readOnlyRoot: trueyazma işlemlerini engeller;readOnlyRoot: falseolarak ayarlayın veya özel bir imaj oluşturun.- Paket kurulumları için
userroot olmalıdır (userdeğerini atlayın veyauser: "0:0"olarak ayarlayın). - Sandbox çalıştırması, ana makinenin
process.envdeğerini devralmaz. Skill API anahtarları içinagents.defaults.sandbox.docker.env(veya özel bir imaj) kullanın. agents.defaults.sandbox.docker.enviçindeki değerler, açık Docker konteyneri ortam değişkenleri olarak iletilir. Docker daemon erişimi olan herkes bunlarıdocker inspectgibi Docker meta veri komutlarıyla inceleyebilir. Bu meta veri açığa çıkması kabul edilebilir değilse özel bir imaj, bağlanmış gizli bilgi dosyası veya başka bir gizli bilgi teslim yolu kullanın.
Araç ilkesi ve kaçış yolları
Araç izin verme/reddetme ilkeleri sandbox kurallarından önce uygulanmaya devam eder. Bir araç genel olarak veya ajan başına reddedilmişse sandbox kullanımı onu geri getirmez.
tools.elevated, exec komutunu sandbox dışında çalıştıran açık bir kaçış yoludur (varsayılan olarak gateway; çalıştırma hedefi node olduğunda node). /exec yönergeleri yalnızca yetkili göndericiler için geçerlidir ve oturum boyunca kalıcıdır; exec komutunu kesin olarak devre dışı bırakmak için araç ilkesi reddini kullanın (bkz. Sandbox, Araç İlkesi ve Yükseltilmiş Çalıştırma Karşılaştırması).
Hata ayıklama:
openclaw sandbox list; sandbox konteynerlerini, durumlarını, imaj eşleşmesini, yaşını, boşta kalma süresini ve ilişkili oturumu/ajanı gösterir.openclaw sandbox explain [--session <key>] [--agent <id>]; geçerli sandbox modunu, ana makine çalışma alanını, çalışma zamanı çalışma dizinini, Docker bağlamalarını, araç ilkesini ve düzeltme yapılandırması anahtarlarını inceler.workspaceRootalanı yapılandırılmış sandbox kökü olarak kalır;effectiveHostWorkspaceRoot, etkin çalışma alanının gerçekte nerede bulunduğunu gösterir.openclaw sandbox recreate [--all | --session <key> | --agent <id>] [--browser] [--force]; konteynerleri/ortamları kaldırır, böylece bir sonraki kullanımda mevcut yapılandırmayla yeniden oluşturulurlar.- "Bu neden engellendi?" düşünce modeli için Sandbox, Araç İlkesi ve Yükseltilmiş Çalıştırma Karşılaştırması bölümüne bakın.
Çok ajanlı geçersiz kılmalar
Her ajan sandbox + araç ayarlarını geçersiz kılabilir: agents.list[].sandbox ve agents.list[].tools (sandbox araç ilkesi için ayrıca agents.list[].tools.sandbox.tools). Öncelik sırası için Çok Ajanlı Sandbox ve Araçlar bölümüne bakın.
En küçük etkinleştirme örneği
{ agents: { defaults: { sandbox: { mode: "non-main", scope: "session", workspaceAccess: "none", }, }, },}İlgili
- Çoklu Aracı Sandbox'ı ve Araçları -- aracı başına geçersiz kılmalar ve öncelik sırası
- OpenShell -- yönetilen sandbox arka ucu kurulumu, çalışma alanı modları ve yapılandırma başvurusu
- Sandbox yapılandırması
- Sandbox, Araç Politikası ve Yükseltilmiş Yetki Karşılaştırması -- "bu neden engelleniyor?" sorununu ayıklama
- Güvenlik