Sandboxing
OpenClaw dapat menjalankan tool di dalam backend sandbox untuk mengurangi radius dampak. Ini opsional dan dikendalikan oleh konfigurasi (agents.defaults.sandbox atau
agents.list[].sandbox). Jika sandboxing dinonaktifkan, tool berjalan di host.
Gateway tetap berada di host; eksekusi tool berjalan di sandbox yang terisolasi
saat diaktifkan.
Ini bukan batas keamanan yang sempurna, tetapi secara nyata membatasi akses
filesystem dan proses ketika model melakukan sesuatu yang bodoh.
Apa yang disandbox
- Eksekusi tool (
exec,read,write,edit,apply_patch,process, dll.). - Browser sandbox opsional (
agents.defaults.sandbox.browser).- Secara default, browser sandbox otomatis dimulai (memastikan CDP dapat dijangkau) saat tool browser membutuhkannya.
Konfigurasikan melalui
agents.defaults.sandbox.browser.autoStartdanagents.defaults.sandbox.browser.autoStartTimeoutMs. - Secara default, container browser sandbox menggunakan jaringan Docker khusus (
openclaw-sandbox-browser) alih-alih jaringanbridgeglobal. Konfigurasikan denganagents.defaults.sandbox.browser.network. agents.defaults.sandbox.browser.cdpSourceRangeopsional membatasi ingress CDP di tepi container dengan allowlist CIDR (misalnya172.21.0.1/32).- Akses pengamat noVNC dilindungi kata sandi secara default; OpenClaw memancarkan URL token berumur pendek yang menyajikan halaman bootstrap lokal dan membuka noVNC dengan kata sandi di fragmen URL (bukan log kueri/header).
agents.defaults.sandbox.browser.allowHostControlmemungkinkan sesi yang disandbox menargetkan browser host secara eksplisit.- Allowlist opsional mengatur
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
- Secara default, browser sandbox otomatis dimulai (memastikan CDP dapat dijangkau) saat tool browser membutuhkannya.
Konfigurasikan melalui
- Proses Gateway itu sendiri.
- Tool apa pun yang secara eksplisit diizinkan berjalan di luar sandbox (misalnya
tools.elevated).- Elevated exec melewati sandboxing dan menggunakan jalur escape yang dikonfigurasi (
gatewaysecara default, ataunodesaat target exec adalahnode). - Jika sandboxing nonaktif,
tools.elevatedtidak mengubah eksekusi (sudah di host). Lihat Elevated Mode.
- Elevated exec melewati sandboxing dan menggunakan jalur escape yang dikonfigurasi (
Mode
agents.defaults.sandbox.mode mengontrol kapan sandboxing digunakan:
"off": tidak ada sandboxing."non-main": sandbox hanya sesi non-main (default jika Anda ingin chat normal di host)."all": setiap sesi berjalan di sandbox. Catatan:"non-main"didasarkan padasession.mainKey(default"main"), bukan id agen. Sesi grup/kanal menggunakan kuncinya sendiri, sehingga dihitung sebagai non-main dan akan disandbox.
Cakupan
agents.defaults.sandbox.scope mengontrol berapa banyak container yang dibuat:
"agent"(default): satu container per agen."session": satu container per sesi."shared": satu container dibagikan oleh semua sesi yang disandbox.
Backend
agents.defaults.sandbox.backend mengontrol runtime mana yang menyediakan sandbox:
"docker"(default): runtime sandbox lokal berbasis Docker."ssh": runtime sandbox jarak jauh generik berbasis SSH."openshell": runtime sandbox berbasis OpenShell.
agents.defaults.sandbox.ssh.
Config khusus OpenShell berada di bawah plugins.entries.openshell.config.
Memilih backend
| Docker | SSH | OpenShell | |
|---|---|---|---|
| Tempat berjalan | Container lokal | Host apa pun yang bisa diakses via SSH | Sandbox terkelola OpenShell |
| Penyiapan | scripts/sandbox-setup.sh | Kunci SSH + host target | Plugin OpenShell diaktifkan |
| Model workspace | Bind-mount atau salin | Kanonis-jarak-jauh (seed sekali) | mirror atau remote |
| Kontrol jaringan | docker.network (default: none) | Bergantung pada host jarak jauh | Bergantung pada OpenShell |
| Browser sandbox | Didukung | Tidak didukung | Belum didukung |
| Bind mount | docker.binds | T/A | T/A |
| Paling cocok untuk | Dev lokal, isolasi penuh | Offload ke mesin jarak jauh | Sandbox jarak jauh terkelola dengan sinkronisasi dua arah opsional |
Backend SSH
Gunakanbackend: "ssh" saat Anda ingin OpenClaw melakukan sandbox pada exec, tool file, dan pembacaan media di
mesin apa pun yang dapat diakses melalui SSH.
- OpenClaw membuat root jarak jauh per cakupan di bawah
sandbox.ssh.workspaceRoot. - Pada penggunaan pertama setelah create atau recreate, OpenClaw melakukan seed workspace jarak jauh itu dari workspace lokal satu kali.
- Setelah itu,
exec,read,write,edit,apply_patch, pembacaan media prompt, dan staging media masuk berjalan langsung terhadap workspace jarak jauh melalui SSH. - OpenClaw tidak menyinkronkan perubahan jarak jauh kembali ke workspace lokal secara otomatis.
identityFile,certificateFile,knownHostsFile: gunakan file lokal yang sudah ada dan teruskan melalui config OpenSSH.identityData,certificateData,knownHostsData: gunakan string inline atau SecretRef. OpenClaw menyelesaikannya melalui snapshot runtime secrets normal, menuliskannya ke file sementara dengan0600, lalu menghapusnya saat sesi SSH berakhir.- Jika
*Filedan*Datakeduanya disetel untuk item yang sama,*Datamenang untuk sesi SSH tersebut.
- Edit lokal host yang dibuat di luar OpenClaw setelah langkah seed tidak terlihat dari jarak jauh sampai Anda membuat ulang sandbox.
openclaw sandbox recreatemenghapus root jarak jauh per cakupan dan melakukan seed lagi dari lokal pada penggunaan berikutnya.- Browser sandboxing tidak didukung pada backend SSH.
- Pengaturan
sandbox.docker.*tidak berlaku untuk backend SSH.
Backend OpenShell
Gunakanbackend: "openshell" saat Anda ingin OpenClaw melakukan sandbox pada tool dalam
environment jarak jauh terkelola OpenShell. Untuk panduan penyiapan lengkap, referensi konfigurasi,
dan perbandingan mode workspace, lihat halaman khusus
OpenShell.
OpenShell menggunakan kembali transport SSH inti yang sama dan bridge filesystem jarak jauh yang sama seperti
backend SSH generik, dan menambahkan siklus hidup khusus OpenShell
(sandbox create/get/delete, sandbox ssh-config) plus mode workspace
mirror opsional.
mirror(default): workspace lokal tetap kanonis. OpenClaw menyinkronkan file lokal ke OpenShell sebelum exec dan menyinkronkan workspace jarak jauh kembali setelah exec.remote: workspace OpenShell menjadi kanonis setelah sandbox dibuat. OpenClaw melakukan seed workspace jarak jauh satu kali dari workspace lokal, lalu tool file dan exec berjalan langsung terhadap sandbox jarak jauh tanpa menyinkronkan perubahan kembali.
- OpenClaw meminta config SSH khusus sandbox dari OpenShell melalui
openshell sandbox ssh-config <name>. - Core menulis config SSH itu ke file sementara, membuka sesi SSH, dan menggunakan kembali bridge filesystem jarak jauh yang sama dengan yang digunakan oleh
backend: "ssh". - Hanya pada mode
mirrorsiklus hidupnya berbeda: sinkronkan lokal ke jarak jauh sebelum exec, lalu sinkronkan kembali setelah exec.
- browser sandbox belum didukung
sandbox.docker.bindstidak didukung pada backend OpenShell- pengaturan runtime khusus Docker di bawah
sandbox.docker.*tetap hanya berlaku untuk backend Docker
Mode workspace
OpenShell memiliki dua model workspace. Ini adalah bagian yang paling penting dalam praktik.mirror
Gunakan plugins.entries.openshell.config.mode: "mirror" saat Anda ingin workspace lokal tetap kanonis.
Perilaku:
- Sebelum
exec, OpenClaw menyinkronkan workspace lokal ke sandbox OpenShell. - Setelah
exec, OpenClaw menyinkronkan workspace jarak jauh kembali ke workspace lokal. - Tool file tetap beroperasi melalui bridge sandbox, tetapi workspace lokal tetap menjadi source of truth di antara giliran.
- Anda mengedit file secara lokal di luar OpenClaw dan ingin perubahan itu otomatis muncul di sandbox
- Anda ingin sandbox OpenShell berperilaku semirip mungkin dengan backend Docker
- Anda ingin workspace host mencerminkan penulisan sandbox setelah setiap giliran exec
- biaya sinkronisasi tambahan sebelum dan sesudah exec
remote
Gunakan plugins.entries.openshell.config.mode: "remote" saat Anda ingin workspace OpenShell menjadi kanonis.
Perilaku:
- Saat sandbox pertama kali dibuat, OpenClaw melakukan seed workspace jarak jauh dari workspace lokal satu kali.
- Setelah itu,
exec,read,write,edit, danapply_patchberoperasi langsung terhadap workspace OpenShell jarak jauh. - OpenClaw tidak menyinkronkan perubahan jarak jauh kembali ke workspace lokal setelah exec.
- Pembacaan media saat prompt tetap berfungsi karena tool file dan media membaca melalui bridge sandbox alih-alih mengasumsikan path host lokal.
- Transportnya adalah SSH ke sandbox OpenShell yang dikembalikan oleh
openshell sandbox ssh-config.
- Jika Anda mengedit file di host di luar OpenClaw setelah langkah seed, sandbox jarak jauh tidak akan melihat perubahan itu secara otomatis.
- Jika sandbox dibuat ulang, workspace jarak jauh di-seed lagi dari workspace lokal.
- Dengan
scope: "agent"atauscope: "shared", workspace jarak jauh itu dibagikan pada cakupan yang sama.
- sandbox seharusnya hidup terutama di sisi OpenShell jarak jauh
- Anda ingin overhead sinkronisasi per giliran lebih rendah
- Anda tidak ingin edit lokal host diam-diam menimpa status sandbox jarak jauh
mirror jika Anda menganggap sandbox sebagai environment eksekusi sementara.
Pilih remote jika Anda menganggap sandbox sebagai workspace yang sebenarnya.
Siklus hidup OpenShell
Sandbox OpenShell tetap dikelola melalui siklus hidup sandbox normal:openclaw sandbox listmenampilkan runtime OpenShell maupun runtime Dockeropenclaw sandbox recreatemenghapus runtime saat ini dan membiarkan OpenClaw membuatnya ulang pada penggunaan berikutnya- logika prune juga sadar-backend
remote, recreate sangat penting:
- recreate menghapus workspace jarak jauh kanonis untuk cakupan tersebut
- penggunaan berikutnya melakukan seed workspace jarak jauh baru dari workspace lokal
mirror, recreate terutama mereset environment eksekusi jarak jauh
karena workspace lokal tetap kanonis.
Akses workspace
agents.defaults.sandbox.workspaceAccess mengontrol apa yang dapat dilihat sandbox:
"none"(default): tool melihat workspace sandbox di bawah~/.openclaw/sandboxes."ro": mount workspace agen sebagai read-only di/agent(menonaktifkanwrite/edit/apply_patch)."rw": mount workspace agen sebagai read/write di/workspace.
- mode
mirrortetap menggunakan workspace lokal sebagai sumber kanonis di antara giliran exec - mode
remotemenggunakan workspace OpenShell jarak jauh sebagai sumber kanonis setelah seed awal workspaceAccess: "ro"dan"none"tetap membatasi perilaku tulis dengan cara yang sama
media/inbound/*).
Catatan Skills: tool read berakar pada sandbox. Dengan workspaceAccess: "none",
OpenClaw mencerminkan skill yang memenuhi syarat ke workspace sandbox (.../skills) sehingga
dapat dibaca. Dengan "rw", skill workspace dapat dibaca dari
/workspace/skills.
Bind mount kustom
agents.defaults.sandbox.docker.binds melakukan mount direktori host tambahan ke dalam container.
Format: host:container:mode (misalnya "/home/user/source:/source:rw").
Bind global dan per agen digabungkan (bukan diganti). Di bawah scope: "shared", bind per agen diabaikan.
agents.defaults.sandbox.browser.binds melakukan mount direktori host tambahan ke dalam container browser sandbox saja.
- Saat disetel (termasuk
[]), ia menggantikanagents.defaults.sandbox.docker.bindsuntuk container browser. - Saat dihilangkan, container browser kembali ke
agents.defaults.sandbox.docker.binds(kompatibel ke belakang).
- Bind melewati filesystem sandbox: bind mengekspos path host dengan mode apa pun yang Anda setel (
:roatau:rw). - OpenClaw memblokir sumber bind berbahaya (misalnya:
docker.sock,/etc,/proc,/sys,/dev, dan mount induk yang akan mengeksposnya). - OpenClaw juga memblokir root kredensial umum di direktori home seperti
~/.aws,~/.cargo,~/.config,~/.docker,~/.gnupg,~/.netrc,~/.npm, dan~/.ssh. - Validasi bind bukan hanya pencocokan string. OpenClaw menormalkan path sumber, lalu menyelesaikannya lagi melalui leluhur terdalam yang ada sebelum memeriksa ulang path yang diblokir dan root yang diizinkan.
- Ini berarti escape parent symlink tetap gagal secara tertutup bahkan saat leaf akhir belum ada. Contoh:
/workspace/run-link/new-filetetap diselesaikan sebagai/var/run/...jikarun-linkmenunjuk ke sana. - Root sumber yang diizinkan juga dikanonisasi dengan cara yang sama, sehingga path yang hanya tampak berada di dalam allowlist sebelum resolusi symlink tetap ditolak sebagai
outside allowed roots. - Mount sensitif (secret, kunci SSH, kredensial layanan) sebaiknya
:rokecuali benar-benar diperlukan. - Gabungkan dengan
workspaceAccess: "ro"jika Anda hanya memerlukan akses baca ke workspace; mode bind tetap independen. - Lihat Sandbox vs Tool Policy vs Elevated untuk bagaimana bind berinteraksi dengan kebijakan tool dan elevated exec.
Image + penyiapan
Image Docker default:openclaw-sandbox:bookworm-slim
Bangun sekali:
sandbox.docker.setupCommand (memerlukan network egress + root yang dapat ditulis +
user root).
Jika Anda ingin image sandbox yang lebih fungsional dengan tool umum (misalnya
curl, jq, nodejs, python3, git), bangun:
agents.defaults.sandbox.docker.image ke
openclaw-sandbox-common:bookworm-slim.
Image browser sandbox:
agents.defaults.sandbox.docker.network.
Image browser sandbox bawaan juga menerapkan default startup Chromium yang konservatif
untuk beban kerja dalam container. Default container saat ini mencakup:
--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-sandboxdan--disable-setuid-sandboxsaatnoSandboxdiaktifkan.- Tiga flag penguatan grafis (
--disable-3d-apis,--disable-software-rasterizer,--disable-gpu) bersifat opsional dan berguna saat container tidak memiliki dukungan GPU. SetelOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0jika beban kerja Anda memerlukan WebGL atau fitur browser/3D lainnya. --disable-extensionsdiaktifkan secara default dan dapat dinonaktifkan denganOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0untuk alur yang bergantung pada extension.--renderer-process-limit=2dikendalikan olehOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, di mana0mempertahankan default Chromium.
browser.extraArgs untuk menambahkan flag startup tambahan.
Default keamanan:
network: "host"diblokir.network: "container:<id>"diblokir secara default (risiko bypass join namespace).- Override break-glass:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
scripts/docker/setup.sh dapat mem-bootstrap config sandbox.
Setel OPENCLAW_SANDBOX=1 (atau true/yes/on) untuk mengaktifkan jalur itu. Anda dapat
menimpa lokasi socket dengan OPENCLAW_DOCKER_SOCKET. Referensi env dan penyiapan lengkap:
Docker.
setupCommand (penyiapan container satu kali)
setupCommand berjalan sekali setelah container sandbox dibuat (bukan pada setiap eksekusi).
Perintah ini dijalankan di dalam container melalui sh -lc.
Path:
- Global:
agents.defaults.sandbox.docker.setupCommand - Per agen:
agents.list[].sandbox.docker.setupCommand
- Default
docker.networkadalah"none"(tanpa egress), sehingga instalasi paket akan gagal. docker.network: "container:<id>"memerlukandangerouslyAllowContainerNamespaceJoin: truedan hanya untuk break-glass.readOnlyRoot: truemencegah penulisan; setelreadOnlyRoot: falseatau buat image kustom.userharus root untuk instalasi paket (hilangkanuseratau seteluser: "0:0").- Sandbox exec tidak mewarisi
process.envhost. Gunakanagents.defaults.sandbox.docker.env(atau image kustom) untuk API key skill.
Kebijakan tool + jalur escape
Kebijakan izinkan/tolak tool tetap berlaku sebelum aturan sandbox. Jika sebuah tool ditolak secara global atau per agen, sandboxing tidak akan mengembalikannya.tools.elevated adalah jalur escape eksplisit yang menjalankan exec di luar sandbox (gateway secara default, atau node saat target exec adalah node).
Direktif /exec hanya berlaku untuk pengirim yang berwenang dan bertahan per sesi; untuk menonaktifkan
exec secara keras, gunakan penolakan kebijakan tool (lihat Sandbox vs Tool Policy vs Elevated).
Debugging:
- Gunakan
openclaw sandbox explainuntuk memeriksa mode sandbox efektif, kebijakan tool, dan kunci config perbaikan. - Lihat Sandbox vs Tool Policy vs Elevated untuk model mental “mengapa ini diblokir?”. Pertahankan agar tetap terkunci.
Override multi-agent
Setiap agen dapat menimpa sandbox + tools:agents.list[].sandbox dan agents.list[].tools (plus agents.list[].tools.sandbox.tools untuk kebijakan tool sandbox).
Lihat Multi-Agent Sandbox & Tools untuk prioritas.
Contoh pengaktifan minimal
Dokumen terkait
- OpenShell — penyiapan backend sandbox terkelola, mode workspace, dan referensi konfigurasi
- Konfigurasi Sandbox
- Sandbox vs Tool Policy vs Elevated — debugging “mengapa ini diblokir?”
- Multi-Agent Sandbox & Tools — override per agen dan prioritas
- Security