Gateway
سندباکسسازی
OpenClaw میتواند اجرای ابزارها را درون یک بکاند سندباکس انجام دهد تا دامنهٔ آسیب احتمالی کاهش یابد. سندباکسسازی بهطور پیشفرض غیرفعال است و با agents.defaults.sandbox (سراسری) یا agents.list[].sandbox (برای هر عامل) کنترل میشود. فرایند Gateway همیشه روی میزبان باقی میماند؛ در صورت فعالسازی، فقط اجرای ابزارها به سندباکس منتقل میشود.
چه چیزهایی در سندباکس اجرا میشوند
- اجرای ابزارها:
exec،read،write،edit،apply_patch،processو غیره. - مرورگر سندباکسشدهٔ اختیاری (
agents.defaults.sandbox.browser).
مواردی که در سندباکس اجرا نمیشوند:
- خود فرایند Gateway.
- هر ابزاری که از طریق
tools.elevatedصراحتاً اجازه داشته باشد بیرون از سندباکس اجرا شود. اجرای ارتقایافته سندباکسسازی را دور میزند و در مسیر خروج پیکربندیشده اجرا میشود (بهطور پیشفرضgateway، یا هنگامی که مقصد اجراnodeاست،node). اگر سندباکسسازی غیرفعال باشد،tools.elevatedهیچ تغییری ایجاد نمیکند، زیرا اجرا از قبل روی میزبان انجام میشود. به حالت ارتقایافته مراجعه کنید.
حالتها، دامنه و بکاند
سه تنظیم مستقل رفتار سندباکس را کنترل میکنند:
| تنظیم | کلید | مقادیر | پیشفرض |
|---|---|---|---|
| حالت | agents.defaults.sandbox.mode |
off، non-main، all |
off |
| دامنه | agents.defaults.sandbox.scope |
agent، session، shared |
agent |
| بکاند | agents.defaults.sandbox.backend |
docker، ssh، openshell |
docker |
حالت تعیین میکند سندباکسسازی چه زمانی اعمال شود:
off: بدون سندباکسسازی.non-main: همهٔ نشستها بهجز نشست اصلی عامل در سندباکس اجرا میشوند. کلید نشست اصلی همیشهagent:<agentId>:mainاست (یا وقتیsession.scopeبرابر"global"باشد،global) و قابل پیکربندی نیست. نشستهای گروهی/کانالی از کلیدهای خود استفاده میکنند، بنابراین همیشه غیر اصلی محسوب میشوند و در سندباکس اجرا خواهند شد.all: همهٔ نشستها در سندباکس اجرا میشوند.
دامنه تعیین میکند چند کانتینر/محیط ایجاد شود:
agent: یک کانتینر برای هر عامل.session: یک کانتینر برای هر نشست.shared: یک کانتینر مشترک میان همهٔ نشستهای سندباکسشده (در این دامنه، بازنویسیهای مختص هر عامل برایdocker/ssh/browserنادیده گرفته میشوند).
بکاند تعیین میکند کدام محیط اجرا ابزارهای سندباکسشده را اجرا کند. پیکربندی مختص SSH زیر agents.defaults.sandbox.ssh و پیکربندی مختص OpenShell زیر plugins.entries.openshell.config قرار دارد.
| Docker | SSH | OpenShell | |
|---|---|---|---|
| محل اجرا | کانتینر محلی | هر میزبان قابلدسترسی با SSH | سندباکس مدیریتشده توسط OpenShell |
| راهاندازی | scripts/sandbox-setup.sh |
کلید SSH + میزبان مقصد | Plugin مربوط به OpenShell فعال باشد |
| مدل فضای کاری | اتصال مستقیم یا کپی | مرجع راهدور (یکبار مقداردهی اولیه) | mirror یا remote |
| کنترل شبکه | docker.network (پیشفرض: هیچکدام) |
وابسته به میزبان راهدور | وابسته به OpenShell |
| سندباکس مرورگر | پشتیبانی میشود | پشتیبانی نمیشود | هنوز پشتیبانی نمیشود |
| اتصالهای مستقیم | docker.binds |
نامرتبط | نامرتبط |
| مناسب برای | توسعهٔ محلی، جداسازی کامل | واگذاری پردازش به یک دستگاه راهدور | سندباکسهای راهدور مدیریتشده با همگامسازی دوطرفهٔ اختیاری |
بکاند Docker
پس از فعالشدن سندباکسسازی، Docker بکاند پیشفرض است. ابزارها و مرورگرهای سندباکس را بهصورت محلی از طریق سوکت دیمن Docker (/var/run/docker.sock) اجرا میکند؛ جداسازی توسط فضای نامهای Docker فراهم میشود.
پیشفرضها: network: "none" (بدون دسترسی خروجی)، readOnlyRoot: true، capDrop: ["ALL"]، تصویر openclaw-sandbox:bookworm-slim.
برای در دسترس قرار دادن GPUهای میزبان، agents.defaults.sandbox.docker.gpus (یا بازنویسی مختص هر عامل) را روی مقداری مانند "all" یا "device=GPU-uuid" تنظیم کنید. این مقدار به پرچم --gpus در Docker منتقل میشود و به یک محیط اجرای سازگار روی میزبان، مانند NVIDIA Container Toolkit، نیاز دارد.
مرورگر سندباکسشده
- مرورگر سندباکس هنگامی که ابزار مرورگر به آن نیاز دارد بهطور خودکار آغاز میشود (و اطمینان حاصل میکند CDP قابلدسترسی است). آن را از طریق
agents.defaults.sandbox.browser.autoStart(پیشفرضtrue) وautoStartTimeoutMs(پیشفرض ۱۲ ثانیه) پیکربندی کنید. - کانتینرهای مرورگر سندباکس بهجای شبکهٔ سراسری
bridgeاز یک شبکهٔ اختصاصی Docker با نامopenclaw-sandbox-browserاستفاده میکنند. آن را باagents.defaults.sandbox.browser.networkپیکربندی کنید. agents.defaults.sandbox.browser.cdpSourceRangeورود CDP در لبهٔ کانتینر را با فهرست مجاز CIDR محدود میکند (برای مثال172.21.0.1/32).- دسترسی ناظر noVNC بهطور پیشفرض با گذرواژه محافظت میشود؛ OpenClaw یک نشانی URL دارای توکن کوتاهعمر ایجاد میکند که یک صفحهٔ راهانداز محلی ارائه میدهد و noVNC را با گذرواژه در قطعهٔ URL باز میکند (نه در رشتهٔ پرسوجو یا گزارشهای سربرگ).
agents.defaults.sandbox.browser.allowHostControl(پیشفرضfalse) به نشستهای سندباکسشده اجازه میدهد مرورگر میزبان را صراحتاً هدف قرار دهند.- فهرستهای مجاز اختیاری دسترسی به
target: "custom"را کنترل میکنند:allowedControlUrls،allowedControlHosts،allowedControlPorts.
بکاند SSH
از backend: "ssh" برای اجرای سندباکسشدهٔ exec، ابزارهای فایل و خواندن رسانه روی هر دستگاه قابلدسترسی با 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", // Or use SecretRefs / inline contents instead of local files: // 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" }, }, }, }, },}پیشفرضها: command: "ssh"، workspaceRoot: "/tmp/openclaw-sandboxes"، strictHostKeyChecking: true، updateHostKeys: true.
- چرخهٔ حیات: OpenClaw زیر
sandbox.ssh.workspaceRootیک ریشهٔ راهدور برای هر دامنه ایجاد میکند. در نخستین استفاده پس از ایجاد یا بازآفرینی، فضای کاری راهدور را یکبار از فضای کاری محلی مقداردهی اولیه میکند. پس از آن،exec،read،write،edit،apply_patch، خواندن رسانههای اعلان و آمادهسازی رسانههای ورودی، مستقیماً از طریق SSH روی فضای کاری راهدور اجرا میشوند. OpenClaw تغییرات راهدور را بهطور خودکار با فضای کاری محلی همگام نمیکند. - مواد احراز هویت:
identityFile/certificateFile/knownHostsFileبه فایلهای محلی موجود اشاره میکنند.identityData/certificateData/knownHostsDataرشتههای درونخطی یا SecretRefها را میپذیرند؛ این موارد از طریق تصویر لحظهای معمول محیط اجرای اسرار resolve میشوند، در فایلهای موقت با حالت0600نوشته میشوند و با پایان نشست SSH حذف میشوند. اگر برای یک مورد، هم نوع*Fileو هم نوع*Dataتنظیم شده باشد،*Dataبرای آن نشست اولویت دارد. - پیامدهای مرجعبودن محیط راهدور: پس از مقداردهی اولیه، فضای کاری راهدور SSH به وضعیت واقعی سندباکس تبدیل میشود. ویرایشهای محلی میزبان که پس از مرحلهٔ مقداردهی اولیه بیرون از OpenClaw انجام شوند، تا زمانی که سندباکس را بازآفرینی نکنید در محیط راهدور قابل مشاهده نیستند.
openclaw sandbox recreateریشهٔ راهدور مختص دامنه را حذف میکند و در استفادهٔ بعدی دوباره از محیط محلی مقداردهی اولیه میکند. سندباکسسازی مرورگر در این بکاند پشتیبانی نمیشود و تنظیماتsandbox.docker.*بر آن اعمال نمیشوند.
بکاند OpenShell
از backend: "openshell" برای اجرای سندباکسشدهٔ ابزارها در یک محیط راهدور مدیریتشده توسط OpenShell استفاده کنید. OpenShell از همان انتقال SSH و پل سیستم فایل راهدور بکاند عمومی SSH استفاده میکند و چرخهٔ حیات OpenShell (sandbox create/get/delete/ssh-config) را بههمراه یک حالت اختیاری همگامسازی فضای کاری mirror میافزاید.
{ 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" (پیشفرض) فضای کاری محلی را مرجع نگه میدارد: OpenClaw پیش از exec محیط محلی را با سندباکس همگام میکند و پس از آن تغییرات را بازمیگرداند. mode: "remote" فضای کاری راهدور را یکبار از محیط محلی مقداردهی اولیه میکند، سپس exec/read/write/edit/apply_patch را مستقیماً روی فضای کاری راهدور و بدون همگامسازی معکوس اجرا میکند؛ ویرایشهای محلی پس از مقداردهی اولیه تا زمانی که openclaw sandbox recreate را اجرا نکنید قابل مشاهده نیستند. در scope: "agent" یا scope: "shared"، آن فضای کاری راهدور در همان دامنه مشترک است. محدودیتهای فعلی: سندباکس مرورگر هنوز پشتیبانی نمیشود و sandbox.docker.binds بر این بکاند اعمال نمیشود.
دستورهای openclaw sandbox list/recreate/prune همگی با محیطهای اجرای OpenShell همانند محیطهای اجرای Docker رفتار میکنند؛ منطق هرس از نوع بکاند آگاه است.
برای پیشنیازهای کامل، مرجع پیکربندی، مقایسهٔ حالتهای فضای کاری و جزئیات چرخهٔ حیات، به OpenShell مراجعه کنید.
دسترسی به فضای کاری
agents.defaults.sandbox.workspaceAccess تعیین میکند سندباکس چه چیزهایی را میتواند ببیند:
| مقدار | رفتار |
|---|---|
none (پیشفرض) |
ابزارها یک فضای کاری جعبهشنی ایزوله را در ~/.openclaw/sandboxes میبینند. |
ro |
فضای کاری عامل را بهصورت فقطخواندنی در /agent سوار میکند (write/edit/apply_patch را غیرفعال میکند). |
rw |
فضای کاری عامل را بهصورت خواندنی/نوشتنی در /workspace سوار میکند. |
با پشتیبان OpenShell، حالت mirror همچنان بین نوبتهای اجرا از فضای کاری محلی بهعنوان منبع مرجع استفاده میکند، حالت remote پس از بذرگذاری اولیه فضای کاری راهدور OpenShell را مرجع قرار میدهد، و workspaceAccess: "ro"/"none" همچنان رفتار نوشتن را به همان شیوه محدود میکند.
رسانههای ورودی در فضای کاری جعبهشنی فعال کپی میشوند (media/inbound/*).
اتصالهای سفارشی
agents.defaults.sandbox.docker.binds دایرکتوریهای میزبان بیشتری را در کانتینر سوار میکند. قالب: host:container:mode (برای مثال، "/home/user/source:/source:rw").
اتصالهای سراسری و مختص هر عامل با هم ادغام میشوند (جایگزین نمیشوند). در scope: "shared"، اتصالهای مختص هر عامل نادیده گرفته میشوند.
agents.defaults.sandbox.browser.binds دایرکتوریهای میزبان بیشتری را فقط در کانتینر مرورگر جعبهشنی سوار میکند. وقتی تنظیم شده باشد (از جمله [])، برای کانتینر مرورگر جایگزین docker.binds میشود؛ وقتی حذف شده باشد، کانتینر مرورگر از docker.binds استفاده میکند.
{ 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"], }, }, }, ], },}تصویرها و راهاندازی
تصویر پیشفرض Docker: openclaw-sandbox:bookworm-slim
ساخت تصویر پیشفرض
از یک دریافت کد منبع:
scripts/sandbox-setup.shاز یک نصب npm (بدون نیاز به دریافت کد منبع):
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تصویر پیشفرض شامل Node نیست. اگر یک مهارت به Node (یا محیطهای اجرایی دیگر) نیاز دارد، یا یک تصویر سفارشی بسازید یا از طریق sandbox.docker.setupCommand نصب کنید (نیازمند خروجی شبکه + ریشه قابلنوشتن + کاربر ریشه).
وقتی openclaw-sandbox:bookworm-slim موجود نیست، OpenClaw بهصورت پنهانی debian:bookworm-slim ساده را جایگزین نمیکند. اجراهای جعبهشنی که تصویر پیشفرض را هدف میگیرند، تا زمانی که آن را نسازید، با دستورالعمل ساخت فوراً شکست میخورند؛ زیرا تصویر همراهشده برای ابزارهای کمکی نوشتن/ویرایش جعبهشنی شامل python3 است.
اختیاری: ساخت تصویر مشترک
برای یک تصویر جعبهشنی کاربردیتر با ابزارهای رایج (برای مثال curl، jq، Node 24، pnpm، python3 و git):
از یک دریافت کد منبع:
scripts/sandbox-common-setup.shاز یک نصب npm، ابتدا تصویر پیشفرض را بسازید (بالا را ببینید)، سپس با استفاده از scripts/docker/sandbox/Dockerfile.common از مخزن، تصویر مشترک را روی آن بسازید.
سپس agents.defaults.sandbox.docker.image را روی openclaw-sandbox-common:bookworm-slim تنظیم کنید.
اختیاری: ساخت تصویر مرورگر جعبهشنی
از یک دریافت کد منبع:
scripts/sandbox-browser-setup.shاز یک نصب npm، با استفاده از scripts/docker/sandbox/Dockerfile.browser از مخزن تصویر را بسازید.
بهطور پیشفرض، کانتینرهای جعبهشنی Docker هیچ شبکهای ندارند. با agents.defaults.sandbox.docker.network این رفتار را تغییر دهید.
پیشفرضهای Chromium مرورگر جعبهشنی
تصویر همراهشده مرورگر جعبهشنی برای بارهای کاری کانتینری پرچمهای محافظهکارانهای را هنگام راهاندازی Chromium اعمال میکند:
--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- وقتی
browser.headlessفعال باشد،--headless=new. - وقتی
browser.noSandboxفعال باشد،--no-sandbox --disable-setuid-sandbox. - بهطور پیشفرض
--disable-3d-apis،--disable-gpuو--disable-software-rasterizer؛ این پرچمهای سختسازی گرافیکی به کانتینرهای بدون پشتیبانی GPU کمک میکنند. اگر بار کاری شما به WebGL یا دیگر قابلیتهای سهبعدی نیاز دارد،OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0را تنظیم کنید. - بهطور پیشفرض
--disable-extensions؛ برای جریانهای وابسته به افزونه،OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0را تنظیم کنید. - بهطور پیشفرض
--renderer-process-limit=2؛ باOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>کنترل میشود، که در آن0پیشفرض Chromium را حفظ میکند.
اگر به نمایه اجرایی متفاوتی نیاز دارید، از یک تصویر مرورگر سفارشی استفاده کنید و نقطه ورود خود را ارائه دهید. برای نمایههای محلی Chromium (غیرکانتینری)، از browser.extraArgs برای افزودن پرچمهای راهاندازی بیشتر استفاده کنید.
پیشفرضهای امنیت شبکه
network: "host"مسدود است.network: "container:<id>"بهطور پیشفرض مسدود است (خطر دورزدن با پیوستن به فضای نام).- نادیدهگیری اضطراری:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
نصبهای Docker و Gateway کانتینری در اینجا قرار دارند: Docker
برای استقرارهای Gateway مبتنی بر Docker، scripts/docker/setup.sh میتواند پیکربندی جعبهشنی را راهاندازی اولیه کند. برای فعالکردن این مسیر، OPENCLAW_SANDBOX=1 (یا true/yes/on) را تنظیم کنید. محل سوکت را با OPENCLAW_DOCKER_SOCKET تغییر دهید. مرجع کامل راهاندازی و متغیرهای محیطی: Docker.
setupCommand (راهاندازی یکباره کانتینر)
setupCommand پس از ایجاد کانتینر جعبهشنی یکبار اجرا میشود (نه در هر اجرا). این فرمان داخل کانتینر از طریق sh -lc اجرا میشود.
مسیرها:
- سراسری:
agents.defaults.sandbox.docker.setupCommand - مختص هر عامل:
agents.list[].sandbox.docker.setupCommand
دامهای رایج
- مقدار پیشفرض
docker.networkبرابر با"none"است (بدون خروجی شبکه)، بنابراین نصب بستهها شکست میخورد. docker.network: "container:<id>"بهdangerouslyAllowContainerNamespaceJoin: trueنیاز دارد و فقط برای شرایط اضطراری است.readOnlyRoot: trueمانع نوشتن میشود؛readOnlyRoot: falseرا تنظیم کنید یا یک تصویر سفارشی بسازید.- برای نصب بستهها،
userباید ریشه باشد (userرا حذف کنید یاuser: "0:0"را تنظیم کنید). - اجرای جعبهشنی،
process.envمیزبان را به ارث نمیبرد. برای کلیدهای API مهارتها ازagents.defaults.sandbox.docker.env(یا یک تصویر سفارشی) استفاده کنید. - مقادیر موجود در
agents.defaults.sandbox.docker.envبهعنوان متغیرهای محیطی صریح کانتینر Docker ارسال میشوند. هر کسی که به دیمن Docker دسترسی داشته باشد میتواند آنها را با فرمانهای فراداده Docker مانندdocker inspectمشاهده کند. اگر این افشای فراداده پذیرفتنی نیست، از یک تصویر سفارشی، فایل اسرار سوارشده یا مسیر دیگری برای تحویل اسرار استفاده کنید.
سیاست ابزار و راههای گریز
سیاستهای مجاز/ممنوع ابزار همچنان پیش از قواعد جعبهشنی اعمال میشوند. اگر ابزاری بهصورت سراسری یا برای یک عامل ممنوع باشد، جعبهشنی آن را دوباره در دسترس قرار نمیدهد.
tools.elevated یک راه گریز صریح است که exec را بیرون از جعبهشنی اجرا میکند (بهطور پیشفرض روی gateway، یا وقتی مقصد اجرا node است روی node). دستورالعملهای /exec فقط برای فرستندگان مجاز اعمال میشوند و در هر نشست پایدار میمانند؛ برای غیرفعالسازی قطعی exec، از سیاست ممنوعیت ابزار استفاده کنید (به جعبهشنی در برابر سیاست ابزار در برابر اجرای ارتقایافته مراجعه کنید).
اشکالزدایی:
openclaw sandbox listکانتینرهای جعبهشنی، وضعیت، تطابق تصویر، عمر، زمان بیکاری و نشست/عامل مرتبط را نشان میدهد.openclaw sandbox explain [--session <key>] [--agent <id>]حالت مؤثر جعبهشنی، فضای کاری میزبان، دایرکتوری کاری زمان اجرا، سوارشدنهای Docker، سیاست ابزار و کلیدهای پیکربندی اصلاح را بررسی میکند. فیلدworkspaceRootآن همان ریشه جعبهشنی پیکربندیشده باقی میماند؛effectiveHostWorkspaceRootنشان میدهد فضای کاری فعال واقعاً کجا قرار دارد.openclaw sandbox recreate [--all | --session <key> | --agent <id>] [--browser] [--force]کانتینرها/محیطها را حذف میکند تا در استفاده بعدی با پیکربندی فعلی دوباره ایجاد شوند.- برای مدل ذهنی «چرا این مسدود شده است؟»، به جعبهشنی در برابر سیاست ابزار در برابر اجرای ارتقایافته مراجعه کنید.
بازنویسیهای چندعاملی
هر عامل میتواند جعبهشنی و ابزارها را بازنویسی کند: agents.list[].sandbox و agents.list[].tools (بهعلاوه agents.list[].tools.sandbox.tools برای سیاست ابزار جعبهشنی). برای تقدم، به جعبهشنی و ابزارهای چندعاملی مراجعه کنید.
نمونه حداقلی فعالسازی
{ agents: { defaults: { sandbox: { mode: "non-main", scope: "session", workspaceAccess: "none", }, }, },}مرتبط
- سندباکس و ابزارهای چندعاملی -- بازنویسیهای مختص هر عامل و ترتیب تقدم
- OpenShell -- راهاندازی بکاند مدیریتشدهٔ سندباکس، حالتهای فضای کاری و مرجع پیکربندی
- پیکربندی سندباکس
- سندباکس در برابر سیاست ابزار در برابر دسترسی ارتقایافته -- اشکالزدایی «چرا این مسدود شده است؟»
- امنیت