agents.defaults.sandbox hoặc agents.list[].sandbox). Nếu sandboxing tắt, công cụ chạy trên host. Gateway vẫn ở trên host; quá trình thực thi công cụ chạy trong một sandbox cô lập khi được bật.
Đây không phải là một ranh giới bảo mật hoàn hảo, nhưng nó giới hạn đáng kể quyền truy cập hệ thống tệp và tiến trình khi mô hình làm điều gì đó thiếu hợp lý.
Những gì được sandbox
- Thực thi công cụ (
exec,read,write,edit,apply_patch,process, v.v.). - Trình duyệt được sandbox tùy chọn (
agents.defaults.sandbox.browser).
Chi tiết trình duyệt được sandbox
Chi tiết trình duyệt được sandbox
- Theo mặc định, trình duyệt sandbox tự khởi động (đảm bảo có thể truy cập CDP) khi công cụ trình duyệt cần nó. Cấu hình qua
agents.defaults.sandbox.browser.autoStartvàagents.defaults.sandbox.browser.autoStartTimeoutMs. - Theo mặc định, container trình duyệt sandbox dùng một mạng Docker chuyên dụng (
openclaw-sandbox-browser) thay vì mạngbridgetoàn cục. Cấu hình bằngagents.defaults.sandbox.browser.network. agents.defaults.sandbox.browser.cdpSourceRangetùy chọn hạn chế luồng vào CDP ở rìa container bằng danh sách cho phép CIDR (ví dụ172.21.0.1/32).- Quyền truy cập quan sát noVNC được bảo vệ bằng mật khẩu theo mặc định; OpenClaw phát ra một URL token ngắn hạn phục vụ trang bootstrap cục bộ và mở noVNC với mật khẩu trong URL fragment (không nằm trong log query/header).
agents.defaults.sandbox.browser.allowHostControlcho phép phiên được sandbox nhắm rõ ràng tới trình duyệt host.- Các danh sách cho phép tùy chọn kiểm soát
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
- Chính tiến trình Gateway.
- Bất kỳ công cụ nào được cho phép rõ ràng chạy bên ngoài sandbox (ví dụ
tools.elevated).- Elevated exec bỏ qua sandboxing và dùng đường thoát đã cấu hình (
gatewaytheo mặc định, hoặcnodekhi mục tiêu exec lànode). - Nếu sandboxing tắt,
tools.elevatedkhông thay đổi cách thực thi (đã ở trên host). Xem Chế độ Elevated.
- Elevated exec bỏ qua sandboxing và dùng đường thoát đã cấu hình (
Chế độ
agents.defaults.sandbox.mode kiểm soát sandboxing được dùng khi nào:
- off
- non-main
- all
Không có sandboxing.
Phạm vi
agents.defaults.sandbox.scope kiểm soát số lượng container được tạo:
"agent"(mặc định): một container cho mỗi agent."session": một container cho mỗi phiên."shared": một container được chia sẻ bởi tất cả phiên được sandbox.
Backend
agents.defaults.sandbox.backend kiểm soát runtime nào cung cấp sandbox:
"docker"(mặc định khi sandboxing được bật): runtime sandbox dựa trên Docker cục bộ."ssh": runtime sandbox từ xa dựa trên SSH chung."openshell": runtime sandbox dựa trên OpenShell.
agents.defaults.sandbox.ssh. Cấu hình riêng cho OpenShell nằm dưới plugins.entries.openshell.config.
Chọn backend
| Docker | SSH | OpenShell | |
|---|---|---|---|
| Nơi chạy | Container cục bộ | Bất kỳ host nào truy cập được qua SSH | Sandbox do OpenShell quản lý |
| Thiết lập | scripts/sandbox-setup.sh | Khóa SSH + host đích | Plugin OpenShell được bật |
| Mô hình workspace | Bind-mount hoặc sao chép | Remote-canonical (seed một lần) | mirror hoặc remote |
| Kiểm soát mạng | docker.network (mặc định: none) | Phụ thuộc vào host từ xa | Phụ thuộc vào OpenShell |
| Sandbox trình duyệt | Được hỗ trợ | Không được hỗ trợ | Chưa được hỗ trợ |
| Bind mount | docker.binds | N/A | N/A |
| Phù hợp nhất cho | Phát triển cục bộ, cô lập đầy đủ | Offload sang máy từ xa | Sandbox từ xa được quản lý với đồng bộ hai chiều tùy chọn |
Backend Docker
Sandboxing tắt theo mặc định. Nếu bạn bật sandboxing và không chọn backend, OpenClaw dùng backend Docker. Nó thực thi công cụ và trình duyệt sandbox cục bộ qua socket daemon Docker (/var/run/docker.sock). Cách ly container sandbox được xác định bởi các namespace của Docker.
Để đưa GPU của host vào sandbox Docker, đặt agents.defaults.sandbox.docker.gpus hoặc ghi đè theo từng agent agents.list[].sandbox.docker.gpus. Giá trị được truyền cho cờ --gpus của Docker dưới dạng đối số riêng, ví dụ "all" hoặc "device=GPU-uuid", và yêu cầu runtime host tương thích như NVIDIA Container Toolkit.
Backend SSH
Dùngbackend: "ssh" khi bạn muốn OpenClaw sandbox exec, công cụ tệp và đọc media trên một máy bất kỳ có thể truy cập qua SSH.
Cách hoạt động
Cách hoạt động
- OpenClaw tạo một root từ xa theo phạm vi dưới
sandbox.ssh.workspaceRoot. - Trong lần dùng đầu tiên sau khi tạo hoặc tạo lại, OpenClaw seed workspace từ xa đó từ workspace cục bộ một lần.
- Sau đó,
exec,read,write,edit,apply_patch, đọc media trong prompt, và staging media đầu vào chạy trực tiếp trên workspace từ xa qua SSH. - OpenClaw không tự động đồng bộ các thay đổi từ xa về workspace cục bộ.
Vật liệu xác thực
Vật liệu xác thực
identityFile,certificateFile,knownHostsFile: dùng các tệp cục bộ hiện có và truyền chúng qua cấu hình OpenSSH.identityData,certificateData,knownHostsData: dùng chuỗi inline hoặc SecretRefs. OpenClaw phân giải chúng qua snapshot runtime secrets thông thường, ghi chúng vào tệp tạm với0600, và xóa chúng khi phiên SSH kết thúc.- Nếu cả
*Filevà*Datađược đặt cho cùng một mục,*Datathắng cho phiên SSH đó.
Hệ quả remote-canonical
Hệ quả remote-canonical
Đây là mô hình remote-canonical. Workspace SSH từ xa trở thành trạng thái sandbox thực sau seed ban đầu.
- Các chỉnh sửa host-local được thực hiện bên ngoài OpenClaw sau bước seed không hiển thị từ xa cho đến khi bạn tạo lại sandbox.
openclaw sandbox recreatexóa root từ xa theo phạm vi và seed lại từ cục bộ trong lần dùng tiếp theo.- Sandboxing trình duyệt không được hỗ trợ trên backend SSH.
- Thiết lập
sandbox.docker.*không áp dụng cho backend SSH.
Backend OpenShell
Dùngbackend: "openshell" khi bạn muốn OpenClaw sandbox công cụ trong một môi trường từ xa do OpenShell quản lý. Để xem hướng dẫn thiết lập đầy đủ, tham chiếu cấu hình, và so sánh chế độ workspace, hãy xem trang OpenShell chuyên biệt.
OpenShell tái sử dụng cùng transport SSH lõi và cầu hệ thống tệp từ xa như backend SSH chung, đồng thời thêm vòng đời riêng cho OpenShell (sandbox create/get/delete, sandbox ssh-config) cùng chế độ workspace mirror tùy chọn.
mirror(mặc định): workspace cục bộ vẫn là canonical. OpenClaw đồng bộ tệp cục bộ vào OpenShell trước exec và đồng bộ workspace từ xa trở lại sau exec.remote: workspace OpenShell là canonical sau khi sandbox được tạo. OpenClaw seed workspace từ xa một lần từ workspace cục bộ, sau đó công cụ tệp và exec chạy trực tiếp trên sandbox từ xa mà không đồng bộ thay đổi trở lại.
Chi tiết truyền tải từ xa
Chi tiết truyền tải từ xa
- OpenClaw yêu cầu OpenShell cung cấp cấu hình SSH riêng cho sandbox qua
openshell sandbox ssh-config <name>. - Core ghi cấu hình SSH đó vào một tệp tạm, mở phiên SSH và tái sử dụng cùng cầu nối hệ thống tệp từ xa được dùng bởi
backend: "ssh". - Trong chế độ
mirror, chỉ vòng đời là khác: đồng bộ từ cục bộ lên từ xa trước khi exec, rồi đồng bộ ngược lại sau exec.
Các giới hạn hiện tại của OpenShell
Các giới hạn hiện tại của OpenShell
- trình duyệt sandbox chưa được hỗ trợ
sandbox.docker.bindskhông được hỗ trợ trên backend OpenShell- Các nút điều khiển runtime dành riêng cho Docker dưới
sandbox.docker.*vẫn chỉ áp dụng cho backend Docker
Chế độ workspace
OpenShell có hai mô hình workspace. Đây là phần quan trọng nhất trong thực tế.- mirror (cục bộ là chuẩn)
- remote (OpenShell là chuẩn)
Dùng
plugins.entries.openshell.config.mode: "mirror" khi bạn muốn workspace cục bộ vẫn là nguồn chuẩn.Hành vi:- Trước
exec, OpenClaw đồng bộ workspace cục bộ vào sandbox OpenShell. - Sau
exec, OpenClaw đồng bộ workspace từ xa ngược về workspace cục bộ. - Các công cụ tệp vẫn hoạt động qua cầu nối sandbox, nhưng workspace cục bộ vẫn là nguồn sự thật giữa các lượt.
- bạn chỉnh sửa tệp cục bộ bên ngoài OpenClaw và muốn các thay đổi đó tự động xuất hiện trong sandbox
- bạn muốn sandbox OpenShell hoạt động giống backend Docker nhất có thể
- bạn muốn workspace trên máy chủ phản ánh các thao tác ghi trong sandbox sau mỗi lượt exec
mirror nếu bạn xem sandbox là môi trường thực thi tạm thời. Chọn remote nếu bạn xem sandbox là workspace thật.
Vòng đời OpenShell
Sandbox OpenShell vẫn được quản lý qua vòng đời sandbox thông thường:openclaw sandbox listhiển thị cả runtime OpenShell lẫn runtime Dockeropenclaw sandbox recreatexóa runtime hiện tại và để OpenClaw tạo lại trong lần dùng tiếp theo- logic prune cũng nhận biết backend
remote, việc tạo lại đặc biệt quan trọng:
- tạo lại sẽ xóa workspace từ xa chuẩn cho phạm vi đó
- lần dùng tiếp theo gieo một workspace từ xa mới từ workspace cục bộ
mirror, tạo lại chủ yếu đặt lại môi trường thực thi từ xa vì workspace cục bộ dù sao vẫn là nguồn chuẩn.
Truy cập workspace
agents.defaults.sandbox.workspaceAccess kiểm soát sandbox có thể thấy gì:
- none (mặc định)
- ro
- rw
Công cụ thấy một workspace sandbox dưới
~/.openclaw/sandboxes.- chế độ
mirrorvẫn dùng workspace cục bộ làm nguồn chuẩn giữa các lượt exec - chế độ
remotedùng workspace OpenShell từ xa làm nguồn chuẩn sau bước gieo dữ liệu ban đầu workspaceAccess: "ro"và"none"vẫn hạn chế hành vi ghi theo cùng cách
media/inbound/*).
Ghi chú về Skills: công cụ
read lấy gốc từ sandbox. Với workspaceAccess: "none", OpenClaw phản chiếu các skills đủ điều kiện vào workspace sandbox (.../skills) để chúng có thể được đọc. Với "rw", skills trong workspace có thể đọc từ /workspace/skills, và các skills đủ điều kiện thuộc loại được quản lý, đóng gói kèm hoặc plugin được hiện thực hóa vào đường dẫn chỉ đọc được tạo /workspace/.openclaw/sandbox-skills/skills.Bind mount tùy chỉnh
agents.defaults.sandbox.docker.binds gắn thêm các thư mục máy chủ vào container. Định dạng: host:container:mode (ví dụ: "/home/user/source:/source:rw").
Các bind toàn cục và theo agent được hợp nhất (không thay thế). Dưới scope: "shared", các bind theo agent bị bỏ qua.
agents.defaults.sandbox.browser.binds chỉ gắn thêm các thư mục máy chủ vào container trình duyệt sandbox.
- Khi được đặt (bao gồm
[]), nó thay thếagents.defaults.sandbox.docker.bindscho container trình duyệt. - Khi bị bỏ qua, container trình duyệt dùng dự phòng
agents.defaults.sandbox.docker.binds(tương thích ngược).
Hình ảnh và thiết lập
Image Docker mặc định:openclaw-sandbox:bookworm-slim
Checkout nguồn so với cài đặt npmCác script trợ giúp
scripts/sandbox-setup.sh, scripts/sandbox-common-setup.sh và scripts/sandbox-browser-setup.sh chỉ có sẵn khi chạy từ một checkout nguồn. Chúng không được bao gồm trong gói npm.Nếu bạn đã cài OpenClaw qua npm install -g openclaw, hãy dùng các lệnh docker build nội tuyến được hiển thị bên dưới thay thế.Build image mặc định
Từ một checkout nguồn:Từ một cài đặt npm (không cần checkout nguồn):Image mặc định không bao gồm Node. Nếu một skill cần Node (hoặc các runtime khác), hãy bake một image tùy chỉnh hoặc cài qua
sandbox.docker.setupCommand (yêu cầu egress mạng + root có thể ghi + người dùng root).OpenClaw không âm thầm thay thế bằng debian:bookworm-slim thuần khi thiếu openclaw-sandbox:bookworm-slim. Các lần chạy sandbox nhắm tới image mặc định sẽ fail fast kèm hướng dẫn build cho đến khi bạn build nó, vì image đóng gói kèm mang python3 cho các helper ghi/chỉnh sửa trong sandbox.Tùy chọn: build image common
Để có một image sandbox nhiều chức năng hơn với công cụ phổ biến (ví dụ Từ một cài đặt npm, trước tiên build image mặc định (xem bên trên), sau đó build image common ở trên nó bằng
curl, jq, Node 24, pnpm, python3 và git):Từ một checkout nguồn:scripts/docker/sandbox/Dockerfile.common từ repository.Sau đó đặt agents.defaults.sandbox.docker.image thành openclaw-sandbox-common:bookworm-slim.Tùy chọn: build image trình duyệt sandbox
Từ một checkout nguồn:Từ một cài đặt npm, build bằng
scripts/docker/sandbox/Dockerfile.browser từ repository.agents.defaults.sandbox.docker.network.
Mặc định Chromium của trình duyệt sandbox
Mặc định Chromium của trình duyệt sandbox
Image trình duyệt sandbox đóng gói kèm cũng áp dụng các mặc định khởi động Chromium thận trọng cho workload trong container. Các mặc định container hiện tại bao gồm:
--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-sandboxkhinoSandboxđược bật.- Ba cờ gia cố đồ họa (
--disable-3d-apis,--disable-software-rasterizer,--disable-gpu) là tùy chọn và hữu ích khi container thiếu hỗ trợ GPU. ĐặtOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0nếu workload của bạn yêu cầu WebGL hoặc các tính năng 3D/trình duyệt khác. --disable-extensionsđược bật theo mặc định và có thể tắt bằngOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0cho các luồng phụ thuộc vào extension.--renderer-process-limit=2được kiểm soát bởiOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, trong đó0giữ mặc định của Chromium.
browser.extraArgs để nối thêm các cờ khởi động bổ sung.Mặc định bảo mật mạng
Mặc định bảo mật mạng
network: "host"bị chặn.network: "container:<id>"bị chặn theo mặc định (rủi ro bỏ qua bằng cách tham gia namespace).- Ghi đè khẩn cấp:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
scripts/docker/setup.sh có thể khởi tạo cấu hình hộp cát. Đặt OPENCLAW_SANDBOX=1 (hoặc true/yes/on) để bật đường dẫn đó. Bạn có thể ghi đè vị trí socket bằng OPENCLAW_DOCKER_SOCKET. Tham khảo thiết lập đầy đủ và tham chiếu env: Docker.
setupCommand (thiết lập container một lần)
setupCommand chạy một lần sau khi container hộp cát được tạo (không chạy ở mọi lần thực thi). Nó thực thi bên trong container qua sh -lc.
Đường dẫn:
- Toàn cục:
agents.defaults.sandbox.docker.setupCommand - Theo từng tác nhân:
agents.list[].sandbox.docker.setupCommand
Lỗi thường gặp
Lỗi thường gặp
docker.networkmặc định là"none"(không có egress), nên việc cài đặt gói sẽ thất bại.docker.network: "container:<id>"yêu cầudangerouslyAllowContainerNamespaceJoin: truevà chỉ dùng cho trường hợp khẩn cấp.readOnlyRoot: truengăn việc ghi; đặtreadOnlyRoot: falsehoặc đóng gói sẵn một image tùy chỉnh.userphải là root để cài đặt gói (bỏ quauserhoặc đặtuser: "0:0").- Exec trong hộp cát không kế thừa
process.envcủa máy chủ. Dùngagents.defaults.sandbox.docker.env(hoặc một image tùy chỉnh) cho khóa API của skill. - Các giá trị trong
agents.defaults.sandbox.docker.envđược truyền dưới dạng biến môi trường container Docker tường minh. Bất kỳ ai có quyền truy cập Docker daemon đều có thể kiểm tra chúng bằng các lệnh siêu dữ liệu Docker nhưdocker inspect. Dùng image tùy chỉnh, tệp bí mật được mount, hoặc đường dẫn phân phối bí mật khác nếu việc lộ siêu dữ liệu đó là không chấp nhận được.
Chính sách công cụ và cơ chế thoát
Các chính sách cho phép/từ chối công cụ vẫn được áp dụng trước quy tắc hộp cát. Nếu một công cụ bị từ chối toàn cục hoặc theo từng tác nhân, hộp cát sẽ không khôi phục công cụ đó.tools.elevated là một cơ chế thoát tường minh chạy exec bên ngoài hộp cát (gateway theo mặc định, hoặc node khi mục tiêu exec là node). Chỉ thị /exec chỉ áp dụng cho người gửi được ủy quyền và được duy trì theo từng phiên; để tắt cứng exec, hãy dùng chính sách từ chối công cụ (xem Hộp cát so với Chính sách công cụ so với Đặc quyền nâng cao).
Gỡ lỗi:
- Dùng
openclaw sandbox explainđể kiểm tra chế độ hộp cát hiệu lực, chính sách công cụ và các khóa cấu hình khắc phục. - Xem Hộp cát so với Chính sách công cụ so với Đặc quyền nâng cao để hiểu mô hình tư duy “tại sao mục này bị chặn?”.
Ghi đè đa tác nhân
Mỗi tác nhân có thể ghi đè hộp cát + công cụ:agents.list[].sandbox và agents.list[].tools (cộng với agents.list[].tools.sandbox.tools cho chính sách công cụ trong hộp cát). Xem Hộp cát & Công cụ đa tác nhân để biết thứ tự ưu tiên.
Ví dụ bật tối thiểu
Liên quan
- Hộp cát & Công cụ đa tác nhân — ghi đè theo từng tác nhân và thứ tự ưu tiên
- OpenShell — thiết lập backend hộp cát được quản lý, chế độ workspace và tham chiếu cấu hình
- Cấu hình hộp cát
- Hộp cát so với Chính sách công cụ so với Đặc quyền nâng cao — gỡ lỗi “tại sao mục này bị chặn?”
- Bảo mật