Gateway
Cô lập môi trường
OpenClaw có thể chạy việc thực thi công cụ bên trong một backend hộp cát để giảm phạm vi ảnh hưởng. Hộp cát mặc định bị tắt và được điều khiển bởi agents.defaults.sandbox (toàn cục) hoặc agents.list[].sandbox (theo từng tác nhân). Tiến trình Gateway luôn ở trên máy chủ; chỉ việc thực thi công cụ được chuyển vào hộp cát khi tính năng này được bật.
Những gì được chạy trong hộp cát
- Thực thi công cụ:
exec,read,write,edit,apply_patch,process, v.v. - Trình duyệt hộp cát tùy chọn (
agents.defaults.sandbox.browser).
Không được chạy trong hộp cát:
- Bản thân tiến trình Gateway.
- Mọi công cụ được cho phép rõ ràng chạy bên ngoài hộp cát thông qua
tools.elevated. Lệnh exec đặc quyền bỏ qua hộp cát và chạy trên đường thoát đã cấu hình (mặc định làgateway, hoặcnodekhi đích exec lànode). Nếu hộp cát bị tắt,tools.elevatedkhông thay đổi gì vì exec vốn đã chạy trên máy chủ. Xem Chế độ đặc quyền.
Chế độ, phạm vi và backend
Ba thiết lập độc lập kiểm soát hành vi của hộp cát:
| Thiết lập | Khóa | Giá trị | Mặc định |
|---|---|---|---|
| Chế độ | agents.defaults.sandbox.mode |
off, non-main, all |
off |
| Phạm vi | agents.defaults.sandbox.scope |
agent, session, shared |
agent |
| Backend | agents.defaults.sandbox.backend |
docker, ssh, openshell |
docker |
Chế độ kiểm soát thời điểm áp dụng hộp cát:
off: không dùng hộp cát.non-main: chạy mọi phiên trong hộp cát, ngoại trừ phiên chính của tác nhân. Khóa phiên chính luôn làagent:<agentId>:main(hoặcglobalkhisession.scopelà"global"); không thể cấu hình khóa này. Các phiên nhóm/kênh sử dụng khóa riêng, vì vậy chúng luôn được coi là không chính và được chạy trong hộp cát.all: mọi phiên đều chạy trong hộp cát.
Phạm vi kiểm soát số lượng vùng chứa/môi trường được tạo:
agent: một vùng chứa cho mỗi tác nhân.session: một vùng chứa cho mỗi phiên.shared: một vùng chứa dùng chung cho tất cả các phiên chạy trong hộp cát (các giá trị ghi đèdocker/ssh/browsertheo từng tác nhân bị bỏ qua trong phạm vi này).
Backend kiểm soát môi trường thực thi nào chạy các công cụ trong hộp cát. Cấu hình dành riêng cho SSH nằm trong agents.defaults.sandbox.ssh; cấu hình dành riêng cho OpenShell nằm trong plugins.entries.openshell.config.
| Docker | SSH | OpenShell | |
|---|---|---|---|
| Nơi chạy | Vùng chứa cục bộ | Bất kỳ máy chủ nào có thể truy cập qua SSH | Hộp cát do OpenShell quản lý |
| Thiết lập | scripts/sandbox-setup.sh |
Khóa SSH + máy chủ đích | Đã bật plugin OpenShell |
| Mô hình không gian làm việc | Gắn kết liên kết hoặc sao chép | Lấy máy từ xa làm chuẩn (khởi tạo một lần) | mirror hoặc remote |
| Kiểm soát mạng | docker.network (mặc định: không có) |
Phụ thuộc vào máy chủ từ xa | Phụ thuộc vào OpenShell |
| Hộp cát trình duyệt | Được hỗ trợ | Không được hỗ trợ | Chưa được hỗ trợ |
| Gắn kết liên kết | docker.binds |
Không áp dụng | Không áp dụng |
| Phù hợp nhất cho | Phát triển cục bộ, cách ly hoàn toàn | Chuyển tải sang một máy từ xa | Hộp cát từ xa được quản lý với đồng bộ hai chiều tùy chọn |
Backend Docker
Docker là backend mặc định sau khi bật hộp cát. Backend này chạy các công cụ và trình duyệt hộp cát cục bộ thông qua socket trình nền Docker (/var/run/docker.sock); khả năng cách ly đến từ các không gian tên Docker.
Giá trị mặc định: network: "none" (không có lưu lượng đi ra), readOnlyRoot: true, capDrop: ["ALL"], image openclaw-sandbox:bookworm-slim.
Để cung cấp GPU của máy chủ, hãy đặt agents.defaults.sandbox.docker.gpus (hoặc giá trị ghi đè theo từng tác nhân) thành một giá trị như "all" hoặc "device=GPU-uuid". Giá trị này được truyền cho cờ --gpus của Docker và yêu cầu một môi trường thực thi máy chủ tương thích, chẳng hạn như NVIDIA Container Toolkit.
Trình duyệt hộp cát
- Trình duyệt hộp cát tự động 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 thông qua
agents.defaults.sandbox.browser.autoStart(mặc định làtrue) vàautoStartTimeoutMs(mặc định là 12 giây). - Các vùng chứa trình duyệt hộp cát sử dụng một mạng Docker chuyên dụng (
openclaw-sandbox-browser) thay cho mạngbridgetoàn cục. Cấu hình bằngagents.defaults.sandbox.browser.network. agents.defaults.sandbox.browser.cdpSourceRangegiới hạn lưu lượng CDP đi vào ở biên vùng chứa bằng danh sách CIDR cho phép (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 hành một URL mã thông báo tồn tại trong thời gian ngắn, phục vụ một trang khởi động cục bộ và mở noVNC với mật khẩu trong phần phân mảnh URL (không nằm trong chuỗi truy vấn hoặc nhật ký tiêu đề).
agents.defaults.sandbox.browser.allowHostControl(mặc định làfalse) cho phép các phiên trong hộp cát nhắm rõ ràng đến trình duyệt của máy chủ.- Các danh sách cho phép tùy chọn kiểm soát
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
Backend SSH
Sử dụng backend: "ssh" để chạy exec, các công cụ tệp và thao tác đọc phương tiện trong hộp cát trên một máy bất kỳ có thể truy cập qua SSH.
{ 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", // Hoặc sử dụng SecretRefs / nội dung nội tuyến thay cho tệp cục bộ: // 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" }, }, }, }, },}Giá trị mặc định: command: "ssh", workspaceRoot: "/tmp/openclaw-sandboxes", strictHostKeyChecking: true, updateHostKeys: true.
- Vòng đời: OpenClaw tạo một thư mục gốc từ xa theo từng phạm vi trong
sandbox.ssh.workspaceRoot. Trong lần sử dụng đầu tiên sau khi tạo hoặc tạo lại, nó khởi tạo không gian làm việc từ xa đó một lần từ không gian làm việc cục bộ. Sau đó,exec,read,write,edit,apply_patch, thao tác đọc phương tiện trong lời nhắc và khâu chuẩn bị phương tiện đến sẽ chạy trực tiếp trên không gian làm việc từ xa qua SSH. OpenClaw không tự động đồng bộ các thay đổi từ xa trở lại không gian làm việc cục bộ. - Dữ liệu xác thực:
identityFile/certificateFile/knownHostsFiletham chiếu đến các tệp cục bộ hiện có.identityData/certificateData/knownHostsDatachấp nhận chuỗi nội tuyến hoặc SecretRefs, được phân giải thông qua ảnh chụp nhanh môi trường thực thi bí mật thông thường, ghi vào các tệp tạm thời với chế độ0600và xóa khi phiên SSH kết thúc. Nếu cả biến thể*Filevà*Datađều được đặt cho cùng một mục,*Datađược ưu tiên trong phiên đó. - Hệ quả của việc lấy máy từ xa làm chuẩn: không gian làm việc SSH từ xa trở thành trạng thái hộp cát thực tế sau lần khởi tạo ban đầu. Các chỉnh sửa cục bộ trên máy chủ được thực hiện bên ngoài OpenClaw sau bước khởi tạo sẽ không hiển thị từ xa cho đến khi bạn tạo lại hộp cát.
openclaw sandbox recreatexóa thư mục gốc từ xa theo từng phạm vi và khởi tạo lại từ cục bộ trong lần sử dụng tiếp theo. Backend này không hỗ trợ hộp cát trình duyệt và các thiết lậpsandbox.docker.*không áp dụng cho nó.
Backend OpenShell
Sử dụng backend: "openshell" để chạy các công cụ trong hộp cát thuộc môi trường từ xa do OpenShell quản lý. OpenShell tái sử dụng cùng cơ chế truyền tải SSH và cầu nối hệ thống tệp từ xa như backend SSH chung, đồng thời bổ sung vòng đời OpenShell (sandbox create/get/delete/ssh-config) cùng chế độ đồng bộ không gian làm việc mirror tùy chọn.
{ 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" (mặc định) giữ không gian làm việc cục bộ làm chuẩn: OpenClaw đồng bộ dữ liệu cục bộ vào hộp cát trước exec và đồng bộ trở lại sau đó. mode: "remote" khởi tạo không gian làm việc từ xa một lần từ cục bộ, sau đó chạy exec/read/write/edit/apply_patch trực tiếp trên không gian làm việc từ xa mà không đồng bộ trở lại; các chỉnh sửa cục bộ sau lần khởi tạo sẽ không hiển thị cho đến khi bạn chạy openclaw sandbox recreate. Với scope: "agent" hoặc scope: "shared", không gian làm việc từ xa đó được dùng chung trong cùng phạm vi. Các hạn chế hiện tại: hộp cát trình duyệt chưa được hỗ trợ và sandbox.docker.binds không áp dụng cho backend này.
openclaw sandbox list/recreate/prune đều xử lý các môi trường thực thi OpenShell giống như môi trường thực thi Docker; logic dọn dẹp nhận biết backend.
Để biết đầy đủ các điều kiện tiên quyết, tài liệu tham chiếu cấu hình, nội dung so sánh các chế độ không gian làm việc và chi tiết vòng đời, hãy xem OpenShell.
Quyền truy cập không gian làm việc
agents.defaults.sandbox.workspaceAccess kiểm soát những gì hộp cát có thể thấy:
| Giá trị | Hành vi |
|---|---|
none (mặc định) |
Các công cụ thấy một không gian làm việc sandbox cô lập trong ~/.openclaw/sandboxes. |
ro |
Gắn không gian làm việc của tác tử ở chế độ chỉ đọc tại /agent (vô hiệu hóa write/edit/apply_patch). |
rw |
Gắn không gian làm việc của tác tử ở chế độ đọc/ghi tại /workspace. |
Với phần phụ trợ OpenShell, chế độ mirror vẫn sử dụng không gian làm việc cục bộ làm nguồn chuẩn giữa các lượt thực thi, chế độ remote sử dụng không gian làm việc OpenShell từ xa làm nguồn chuẩn sau lần khởi tạo dữ liệu ban đầu, còn workspaceAccess: "ro"/"none" vẫn hạn chế hành vi ghi theo cùng cách.
Phương tiện đầu vào được sao chép vào không gian làm việc sandbox đang hoạt động (media/inbound/*).
Gắn kết 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 gắn kết toàn cục và theo từng tác tử được hợp nhất (không thay thế nhau). Với scope: "shared", các gắn kết theo từng tác tử 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 (kể cả []), giá trị này thay thế docker.binds cho container trình duyệt; khi bị lược bỏ, container trình duyệt dùng docker.binds làm phương án dự phòng.
{ 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"], }, }, }, ], },}Ảnh và thiết lập
Ảnh Docker mặc định: openclaw-sandbox:bookworm-slim
Xây dựng ảnh mặc định
Từ một bản sao mã nguồn:
scripts/sandbox-setup.shTừ bản cài đặt npm (không cần bản sao mã nguồn):
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"]DOCKERFILEẢnh mặc định không bao gồm Node. Nếu một skill cần Node (hoặc môi trường chạy khác), hãy tích hợp vào một ảnh tùy chỉnh hoặc cài đặt qua sandbox.docker.setupCommand (yêu cầu kết nối mạng ra ngoài + thư mục gốc 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ượt chạy sandbox nhắm tới ảnh mặc định sẽ dừng sớm kèm hướng dẫn xây dựng cho đến khi bạn xây dựng ảnh đó, vì ảnh đóng gói kèm chứa python3 dành cho các trình trợ giúp ghi/chỉnh sửa trong sandbox.
Tùy chọn: xây dựng ảnh phổ dụng
Để có một ảnh sandbox nhiều chức năng hơn với các công cụ phổ biến (ví dụ: curl, jq, Node 24, pnpm, python3 và git):
Từ một bản sao mã nguồn:
scripts/sandbox-common-setup.shTừ bản cài đặt npm, trước tiên hãy xây dựng ảnh mặc định (xem phía trên), sau đó xây dựng ảnh phổ dụng dựa trên ảnh đó bằng scripts/docker/sandbox/Dockerfile.common trong kho lưu trữ.
Sau đó đặt agents.defaults.sandbox.docker.image thành openclaw-sandbox-common:bookworm-slim.
Tùy chọn: xây dựng ảnh trình duyệt sandbox
Từ một bản sao mã nguồn:
scripts/sandbox-browser-setup.shTừ bản cài đặt npm, hãy xây dựng bằng scripts/docker/sandbox/Dockerfile.browser trong kho lưu trữ.
Theo mặc định, các container sandbox Docker chạy không có mạng. Ghi đè bằng agents.defaults.sandbox.docker.network.
Thiết lập mặc định của Chromium trong trình duyệt sandbox
Ảnh trình duyệt sandbox đóng gói kèm áp dụng các cờ khởi động Chromium thận trọng cho khối lượng công việc chạy trong container:
--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=newkhibrowser.headlessđược bật.--no-sandbox --disable-setuid-sandboxkhibrowser.noSandboxđược bật.--disable-3d-apis,--disable-gpu,--disable-software-rasterizertheo mặc định; các cờ tăng cường bảo mật đồ họa này hỗ trợ các container không có GPU. ĐặtOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0nếu khối lượng công việc của bạn cần WebGL hoặc các tính năng 3D khác.--disable-extensionstheo mặc định; đặtOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0cho các luồng phụ thuộc vào tiện ích mở rộng.--renderer-process-limit=2theo mặc định; được điều khiển bằngOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, trong đó0giữ nguyên giá trị mặc định của Chromium.
Nếu cần hồ sơ môi trường chạy khác, hãy dùng ảnh trình duyệt tùy chỉnh và cung cấp điểm vào của riêng bạn. Đối với hồ sơ Chromium cục bộ (không chạy trong container), hãy dùng browser.extraArgs để thêm các cờ khởi động bổ sung.
Thiết lập bảo mật mạng mặc định
network: "host"bị chặn.network: "container:<id>"bị chặn theo mặc định (rủi ro vượt qua biện pháp bảo vệ bằng cách tham gia không gian tên).- Ghi đè khẩn cấp:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
Các bản cài đặt Docker và Gateway chạy trong container nằm tại đây: Docker
Đối với các triển khai Gateway bằng Docker, scripts/docker/setup.sh có thể khởi tạo cấu hình sandbox. Đặt OPENCLAW_SANDBOX=1 (hoặc true/yes/on) để bật đường dẫn này. Ghi đè vị trí socket bằng OPENCLAW_DOCKER_SOCKET. Tham chiếu đầy đủ về thiết lập và biến môi trường: Docker.
setupCommand (thiết lập container một lần)
setupCommand chạy một lần sau khi container sandbox được tạo (không chạy ở mỗi lượt). Lệnh này 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 tử:
agents.list[].sandbox.docker.setupCommand
Các lỗi thường gặp
- Giá trị mặc định của
docker.networklà"none"(không có kết nối ra ngoài), 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ành cho trường hợp khẩn cấp.readOnlyRoot: truengăn việc ghi; đặtreadOnlyRoot: falsehoặc tích hợp sẵn vào một ảnh tùy chỉnh.userphải là root để cài đặt gói (bỏuserhoặc đặtuser: "0:0").- Hoạt động thực thi trong sandbox không kế thừa
process.envcủa máy chủ. Dùngagents.defaults.sandbox.docker.env(hoặc ảnh 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 trình nền Docker đều có thể kiểm tra chúng bằng các lệnh siêu dữ liệu Docker nhưdocker inspect. Hãy dùng ảnh tùy chỉnh, tệp bí mật được gắn kết hoặc một phương thức phân phối bí mật khác nếu việc lộ siêu dữ liệu này không thể chấp nhận được.
Chính sách công cụ và các lối 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 các quy tắc sandbox. Nếu một công cụ bị từ chối toàn cục hoặc theo từng tác tử, việc dùng sandbox không kích hoạt lại công cụ đó.
tools.elevated là một lối thoát tường minh để chạy exec bên ngoài sandbox (mặc định là gateway, hoặc node khi đích thực thi là node). Các 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; để vô hiệu hóa hoàn toàn exec, hãy dùng chính sách công cụ để từ chối (xem Sandbox so với chính sách công cụ so với quyền nâng cao).
Gỡ lỗi:
openclaw sandbox listhiển thị các container sandbox, trạng thái, mức độ khớp ảnh, thời gian tồn tại, thời gian nhàn rỗi và phiên/tác tử liên quan.openclaw sandbox explain [--session <key>] [--agent <id>]kiểm tra chế độ sandbox hiệu lực, không gian làm việc máy chủ, thư mục làm việc của môi trường chạy, các điểm gắn kết Docker, chính sách công cụ và các khóa cấu hình khắc phục. TrườngworkspaceRootvẫn là thư mục gốc sandbox đã cấu hình;effectiveHostWorkspaceRootcho biết không gian làm việc đang hoạt động thực sự nằm ở đâu.openclaw sandbox recreate [--all | --session <key> | --agent <id>] [--browser] [--force]xóa các container/môi trường để chúng được tạo lại với cấu hình hiện tại trong lần sử dụng tiếp theo.- Xem Sandbox so với chính sách công cụ so với quyền nâng cao để hiểu mô hình tư duy “tại sao thao tác này bị chặn?”.
Ghi đè cho nhiều tác tử
Mỗi tác tử có thể ghi đè sandbox + công cụ: agents.list[].sandbox và agents.list[].tools (cộng thêm agents.list[].tools.sandbox.tools cho chính sách công cụ sandbox). Xem Sandbox và công cụ cho nhiều tác tử để biết thứ tự ưu tiên.
Ví dụ bật tối thiểu
{ agents: { defaults: { sandbox: { mode: "non-main", scope: "session", workspaceAccess: "none", }, }, },}Liên quan
- Hộp cát và công cụ đa tác nhân -- các thiết lập ghi đè theo từng tác nhân và thứ tự ưu tiên
- OpenShell -- thiết lập phần phụ trợ hộp cát được quản lý, các chế độ không gian làm việc và tài liệu tham khảo 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 quyền nâng cao -- gỡ lỗi "tại sao thao tác này bị chặn?"
- Bảo mật