Gateway

सैंडबॉक्सिंग

Status: active

OpenClaw ब्लास्ट रेडियस कम करने के लिए टूल निष्पादन को सैंडबॉक्स बैकएंड के भीतर चला सकता है। सैंडबॉक्सिंग डिफ़ॉल्ट रूप से बंद होती है और इसे agents.defaults.sandbox (वैश्विक) या agents.entries.*.sandbox (प्रति-एजेंट) द्वारा नियंत्रित किया जाता है। Gateway प्रक्रिया हमेशा होस्ट पर रहती है; सक्षम होने पर केवल टूल निष्पादन सैंडबॉक्स में जाता है।

क्या सैंडबॉक्स किया जाता है

  • टूल निष्पादन: exec, read, write, edit, apply_patch, process, आदि।
  • वैकल्पिक सैंडबॉक्स किया गया ब्राउज़र (agents.defaults.sandbox.browser)।

सैंडबॉक्स नहीं किए जाते:

  • स्वयं Gateway प्रक्रिया।
  • tools.elevated के माध्यम से सैंडबॉक्स के बाहर चलने की स्पष्ट अनुमति प्राप्त कोई भी टूल। उन्नत exec सैंडबॉक्सिंग को बायपास करता है और कॉन्फ़िगर किए गए एस्केप पथ पर चलता है (डिफ़ॉल्ट रूप से gateway, या जब exec लक्ष्य node हो तब node)। यदि सैंडबॉक्सिंग बंद है, तो tools.elevated से कुछ नहीं बदलता क्योंकि exec पहले से ही होस्ट पर चलता है। उन्नत मोड देखें।

मोड, दायरा और बैकएंड

तीन स्वतंत्र सेटिंग सैंडबॉक्स के व्यवहार को नियंत्रित करती हैं:

सेटिंग कुंजी मान डिफ़ॉल्ट
मोड 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 कुंजी + लक्ष्य होस्ट OpenShell Plugin सक्षम
वर्कस्पेस मॉडल बाइंड-माउंट या कॉपी रिमोट-कैनोनिकल (एक बार सीड करें) 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" जैसे मान पर सेट करें। इसे Docker के --gpus फ़्लैग में भेजा जाता है और इसके लिए NVIDIA Container Toolkit जैसा संगत होस्ट रनटाइम आवश्यक है।

सैंडबॉक्स किया गया ब्राउज़र

  • जब ब्राउज़र टूल को इसकी आवश्यकता होती है, तो सैंडबॉक्स ब्राउज़र स्वतः शुरू होता है (यह सुनिश्चित करता है कि CDP पहुँच योग्य है)। इसे agents.defaults.sandbox.browser.autoStart (डिफ़ॉल्ट true) और autoStartTimeoutMs (डिफ़ॉल्ट 12s) के माध्यम से कॉन्फ़िगर करें।
  • सैंडबॉक्स ब्राउज़र कंटेनर वैश्विक bridge नेटवर्क के बजाय एक समर्पित Docker नेटवर्क (openclaw-sandbox-browser) का उपयोग करते हैं। इसे agents.defaults.sandbox.browser.network से कॉन्फ़िगर करें।
  • agents.defaults.sandbox.browser.cdpSourceRange, CIDR अनुमत-सूची (उदाहरण के लिए 172.21.0.1/32) के साथ कंटेनर-किनारे के CDP इनग्रेस को सीमित करता है।
  • noVNC पर्यवेक्षक पहुँच डिफ़ॉल्ट रूप से पासवर्ड-सुरक्षित होती है; OpenClaw एक अल्पकालिक टोकन URL जारी करता है, जो स्थानीय बूटस्ट्रैप पृष्ठ उपलब्ध कराता है और URL फ़्रैगमेंट में पासवर्ड के साथ noVNC खोलता है (क्वेरी स्ट्रिंग या हेडर लॉग में नहीं)।
  • agents.defaults.sandbox.browser.allowHostControl (डिफ़ॉल्ट false) सैंडबॉक्स किए गए सत्रों को स्पष्ट रूप से होस्ट ब्राउज़र को लक्ष्य बनाने देता है।
  • वैकल्पिक अनुमत-सूचियाँ target: "custom" को नियंत्रित करती हैं: allowedControlUrls, allowedControlHosts, allowedControlPorts

SSH बैकएंड

किसी भी SSH-सुलभ मशीन पर exec, फ़ाइल टूल और मीडिया रीड को सैंडबॉक्स करने के लिए backend: "ssh" का उपयोग करें।

json5
{  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",          // या स्थानीय फ़ाइलों के बजाय SecretRefs / इनलाइन सामग्री का उपयोग करें:          // 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 इनलाइन स्ट्रिंग या SecretRefs स्वीकार करते हैं, जिन्हें सामान्य सीक्रेट रनटाइम स्नैपशॉट के माध्यम से रिज़ॉल्व किया जाता है, मोड 0600 वाली अस्थायी फ़ाइलों में लिखा जाता है और SSH सत्र समाप्त होने पर हटा दिया जाता है। यदि एक ही आइटम के लिए *File और *Data दोनों प्रकार सेट हैं, तो उस सत्र के लिए *Data प्रभावी होता है।
  • रिमोट-कैनोनिकल के परिणाम: प्रारंभिक सीड के बाद रिमोट SSH वर्कस्पेस वास्तविक सैंडबॉक्स स्थिति बन जाता है। सीड चरण के बाद OpenClaw के बाहर किए गए होस्ट-स्थानीय संपादन तब तक रिमोट पर दिखाई नहीं देते, जब तक आप सैंडबॉक्स को दोबारा नहीं बनाते। openclaw sandbox recreate प्रति-दायरा रिमोट रूट को हटा देता है और अगले उपयोग पर स्थानीय से फिर सीड करता है। इस बैकएंड पर ब्राउज़र सैंडबॉक्सिंग समर्थित नहीं है और sandbox.docker.* सेटिंग इस पर लागू नहीं होतीं।

OpenShell बैकएंड

OpenShell द्वारा प्रबंधित रिमोट परिवेश में टूल सैंडबॉक्स करने के लिए backend: "openshell" का उपयोग करें। OpenShell सामान्य SSH बैकएंड के समान SSH ट्रांसपोर्ट और रिमोट फ़ाइल सिस्टम ब्रिज का पुनः उपयोग करता है, और इसमें OpenShell जीवनचक्र (sandbox create/get/delete/ssh-config) के साथ वैकल्पिक mirror वर्कस्पेस सिंक मोड जोड़ता है।

json5
{  agents: {    defaults: {      sandbox: {        mode: "all",        backend: "openshell",        scope: "session",        workspaceAccess: "rw",      },    },  },  plugins: {    entries: {      openshell: {        enabled: true,        config: {          from: "openclaw",          mode: "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/प्रून सभी 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/*) में कॉपी किया जाता है।

एक एजेंट के लिए अनेक फ़ोल्डर

जब किसी सैंडबॉक्स किए गए एजेंट को उसके प्राथमिक वर्कस्पेस से अधिक की आवश्यकता हो, तो Docker बाइंड माउंट का उपयोग करें। प्रत्येक प्रविष्टि एक होस्ट फ़ोल्डर को स्पष्ट एक्सेस मोड वाले कंटेनर पथ से मैप करती है:

text
host-directory:container-directory:rohost-directory:container-directory:rw
  • ro माउंट किए गए फ़ोल्डर को सैंडबॉक्स के भीतर केवल-पढ़ने योग्य बनाता है।
  • rw सैंडबॉक्स किए गए टूल और प्रक्रियाओं को होस्ट फ़ोल्डर बदलने देता है।
  • कंटेनर पथ वह पथ है जिसका एजेंट उपयोग करता है। होस्ट पथ स्वचालित रूप से उजागर नहीं होते।

यह उदाहरण research एजेंट को लिखने योग्य प्राथमिक वर्कस्पेस, /reference पर केवल-पढ़ने योग्य संदर्भ सामग्री और /drafts पर एक अलग लिखने योग्य आउटपुट फ़ोल्डर देता है:

json5
{  agents: {    defaults: {      sandbox: {        mode: "all",        scope: "agent",      },    },    list: [      {        id: "research",        workspace: "/srv/openclaw/research-workspace",        sandbox: {          workspaceAccess: "rw",          docker: {            binds: ["/srv/shared/reference:/reference:ro", "/srv/shared/drafts:/drafts:rw"],            // आवश्यक है क्योंकि ये स्रोत एजेंट वर्कस्पेस के बाहर हैं।            dangerouslyAllowExternalBindSources: true,          },        },      },    ],  },}

workspaceAccess और बाइंड मोड एक-दूसरे से स्वतंत्र हैं:

सेटिंग नियंत्रण
workspaceAccess: "none" एक पृथक सैंडबॉक्स वर्कस्पेस का उपयोग करता है; एजेंट वर्कस्पेस को उजागर नहीं करता।
workspaceAccess: "ro" एजेंट वर्कस्पेस को /agent पर केवल-पढ़ने योग्य रूप में माउंट करता है।
workspaceAccess: "rw" एजेंट वर्कस्पेस को /workspace पर पढ़ने/लिखने योग्य रूप में माउंट करता है।
docker.binds प्रविष्टि :ro/:rw केवल उस अतिरिक्त होस्ट फ़ोल्डर को उसके कॉन्फ़िगर किए गए कंटेनर पथ पर नियंत्रित करती है।

workspaceAccess बदलने से कोई अतिरिक्त बाइंड ro से rw या इसके विपरीत नहीं बदलता। वैश्विक और प्रति-एजेंट docker.binds मर्ज किए जाते हैं। प्रति-एजेंट बाइंड के लिए scope: "agent" या "session" रखें; scope: "shared" सभी प्रति-एजेंट Docker ओवरराइड की उपेक्षा करता है और केवल वैश्विक बाइंड का उपयोग करता है।

बाइंड माउंट समर्थित बहु-फ़ोल्डर सीमा हैं क्योंकि Docker माउंट आइसोलेशन के साथ कंटेनर का फ़ाइल सिस्टम दृश्य बनाता है और ro/rw मोड सैंडबॉक्स की प्रत्येक प्रक्रिया पर लागू होता है। यह सीमा प्रत्येक OpenClaw कोड पथ में पथ-अधिकरण जाँचों को दोहराए बिना exec, फ़ाइल सिस्टम टूल, चाइल्ड प्रक्रियाओं और लाइब्रेरी को कवर करती है। जब कोई अनुमत शेल या निर्भरता सीधे फ़ाइलों को एक्सेस कर सकती है, तब होस्ट-साइड पथ अनुमति-सूची वही संपूर्ण सीमा प्रदान नहीं कर सकती।

ऑप्ट-इन dangerouslyAllowExternalBindSources केवल वर्कस्पेस रूट के बाहर के स्रोतों की अनुमति देता है। यह OpenClaw की अवरुद्ध सिस्टम, क्रेडेंशियल, Docker सॉकेट, सिमलिंक-पैरेंट या आरक्षित-लक्ष्य जाँचों को अक्षम नहीं करता। सबसे छोटे फ़ोल्डर को प्राथमिकता दें, जब तक लिखना आवश्यक न हो तब तक ro का उपयोग करें और माउंट बदलने के बाद सैंडबॉक्स को फिर से बनाएँ:

bash
openclaw sandbox recreate --agent research

अन्य बाइंड व्यवहार

agents.defaults.sandbox.docker.binds वैश्विक माउंट कॉन्फ़िगर करता है। प्रारूप वही host:container:mode रूप है (उदाहरण के लिए, "/home/user/source:/source:rw")।

agents.defaults.sandbox.browser.binds अतिरिक्त होस्ट डायरेक्टरियों को केवल सैंडबॉक्स ब्राउज़र कंटेनर में माउंट करता है। सेट किए जाने पर ([] सहित), यह ब्राउज़र कंटेनर के लिए docker.binds को प्रतिस्थापित करता है; छोड़े जाने पर, ब्राउज़र कंटेनर docker.binds पर फ़ॉलबैक करता है।

json5
{  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

  • डिफ़ॉल्ट इमेज बनाएँ

    स्रोत चेकआउट से:

    bash
    scripts/sandbox-setup.sh

    npm इंस्टॉल से (स्रोत चेकआउट आवश्यक नहीं):

    bash
    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) वाली अधिक कार्यक्षम सैंडबॉक्स इमेज के लिए:

    स्रोत चेकआउट से:

    bash
    scripts/sandbox-common-setup.sh

    npm इंस्टॉल से, पहले डिफ़ॉल्ट इमेज बनाएँ (ऊपर देखें), फिर रिपॉज़िटरी के scripts/docker/sandbox/Dockerfile.common का उपयोग करके उसके ऊपर सामान्य इमेज बनाएँ।

    फिर agents.defaults.sandbox.docker.image को openclaw-sandbox-common:bookworm-slim पर सेट करें।

  • वैकल्पिक: सैंडबॉक्स ब्राउज़र इमेज बनाएँ

    स्रोत चेकआउट से:

    bash
    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
    • --headless=new, जब browser.headless सक्षम हो।
    • --no-sandbox --disable-setuid-sandbox, जब browser.noSandbox सक्षम हो।
    • डिफ़ॉल्ट रूप से --disable-3d-apis, --disable-gpu, --disable-software-rasterizer; ये ग्राफ़िक्स-सुदृढ़ीकरण फ़्लैग GPU समर्थन के बिना कंटेनरों में सहायक होते हैं। यदि आपके कार्यभार को WebGL या अन्य 3D सुविधाओं की आवश्यकता हो, तो OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0 सेट करें।
    • डिफ़ॉल्ट रूप से --disable-extensions; एक्सटेंशन पर निर्भर प्रवाहों के लिए OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0 सेट करें।
    • डिफ़ॉल्ट रूप से --renderer-process-limit=2; इसे OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=&lt;N&gt; नियंत्रित करता है, जिसमें 0 Chromium का डिफ़ॉल्ट बनाए रखता है।

    यदि आपको अलग रनटाइम प्रोफ़ाइल चाहिए, तो कस्टम ब्राउज़र इमेज का उपयोग करें और अपना एंट्रीपॉइंट दें। स्थानीय (गैर-कंटेनर) Chromium प्रोफ़ाइलों के लिए अतिरिक्त स्टार्टअप फ़्लैग जोड़ने हेतु browser.extraArgs का उपयोग करें।

    नेटवर्क सुरक्षा डिफ़ॉल्ट
    • network: "host" अवरुद्ध है।
    • network: "container:<id>" डिफ़ॉल्ट रूप से अवरुद्ध है (नेमस्पेस जॉइन बायपास का जोखिम)।
    • आपातकालीन ओवरराइड: agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true

    Docker इंस्टॉलेशन और कंटेनरीकृत Gateway यहाँ उपलब्ध हैं: Docker

    Docker Gateway डिप्लॉयमेंट के लिए, scripts/docker/setup.sh सैंडबॉक्स कॉन्फ़िगरेशन को बूटस्ट्रैप कर सकता है। उस पथ को सक्षम करने के लिए OPENCLAW_SANDBOX=1 (या true/yes/on) सेट करें। सॉकेट स्थान को OPENCLAW_DOCKER_SOCKET से ओवरराइड करें। पूर्ण सेटअप और पर्यावरण चर संदर्भ: Docker

    setupCommand (एक-बार का कंटेनर सेटअप)

    सैंडबॉक्स कंटेनर बनने के बाद setupCommand एक बार चलता है (हर रन पर नहीं)। यह कंटेनर के भीतर sh -lc के माध्यम से निष्पादित होता है।

    पथ:

    • वैश्विक: agents.defaults.sandbox.docker.setupCommand
    • प्रति-एजेंट: agents.entries.*.sandbox.docker.setupCommand
    सामान्य समस्याएँ
    • डिफ़ॉल्ट docker.network, "none" है (कोई बाहरी नेटवर्क पहुँच नहीं), इसलिए पैकेज इंस्टॉलेशन विफल होंगे।
    • docker.network: "container:<id>" के लिए dangerouslyAllowContainerNamespaceJoin: true आवश्यक है और यह केवल आपातकालीन उपयोग के लिए है।
    • readOnlyRoot: true लेखन रोकता है; readOnlyRoot: false सेट करें या कस्टम इमेज बनाएँ।
    • पैकेज इंस्टॉलेशन के लिए user का root होना आवश्यक है (user को छोड़ दें या user: "0:0" सेट करें)।
    • सैंडबॉक्स निष्पादन होस्ट के process.env को इनहेरिट नहीं करता। Skills API कुंजियों के लिए agents.defaults.sandbox.docker.env (या कस्टम इमेज) का उपयोग करें।
    • agents.defaults.sandbox.docker.env के मान स्पष्ट Docker कंटेनर पर्यावरण चर के रूप में पास किए जाते हैं। Docker डेमन तक पहुँच वाला कोई भी व्यक्ति docker inspect जैसे Docker मेटाडेटा कमांड से उनका निरीक्षण कर सकता है। यदि यह मेटाडेटा प्रकटीकरण स्वीकार्य नहीं है, तो कस्टम इमेज, माउंट की गई गोपनीय फ़ाइल या किसी अन्य गोपनीयता-वितरण पथ का उपयोग करें।

    टूल नीति और आपातकालीन निकास

    सैंडबॉक्स नियमों से पहले भी टूल अनुमति/अस्वीकृति नीतियाँ लागू होती हैं। यदि कोई टूल वैश्विक या प्रति-एजेंट स्तर पर अस्वीकृत है, तो सैंडबॉक्सिंग उसे वापस उपलब्ध नहीं कराती।

    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.entries.*.sandbox और agents.entries.*.tools (साथ ही सैंडबॉक्स टूल नीति के लिए agents.entries.*.tools.sandbox.tools)। प्राथमिकता क्रम के लिए बहु-एजेंट सैंडबॉक्स और टूल देखें।

    न्यूनतम सक्षमीकरण उदाहरण

    json5
    {  agents: {    defaults: {      sandbox: {        mode: "non-main",        scope: "session",        workspaceAccess: "none",      },    },  },}

    संबंधित

    Was this useful?
    On this page

    On this page