Skip to main content
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 पहले से ही होस्ट पर चलता है। उन्नत मोड देखें।

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

तीन स्वतंत्र सेटिंग सैंडबॉक्स के व्यवहार को नियंत्रित करती हैं: मोड नियंत्रित करता है कि सैंडबॉक्सिंग कब लागू होती है:
  • 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 बैकएंड

सैंडबॉक्सिंग सक्षम होने के बाद 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 जैसा संगत होस्ट रनटाइम आवश्यक है।
Docker-आउट-ऑफ़-Docker (DooD) की सीमाएँयदि आप OpenClaw Gateway को ही Docker कंटेनर के रूप में तैनात करते हैं, तो यह होस्ट के Docker सॉकेट (DooD) का उपयोग करके समान-स्तर के सैंडबॉक्स कंटेनरों का संचालन करता है। इससे पथ मैपिंग की एक सीमा उत्पन्न होती है:
  • कॉन्फ़िगरेशन में होस्ट पथ आवश्यक हैं: openclaw.json workspace में आंतरिक Gateway कंटेनर पथ के बजाय होस्ट का निरपेक्ष पथ (उदाहरण के लिए /home/user/.openclaw/workspaces) होना चाहिए। Docker डेमन पथों का मूल्यांकन Gateway के अपने नेमस्पेस के बजाय होस्ट OS नेमस्पेस के सापेक्ष करता है।
  • मेल खाता वॉल्यूम मैप आवश्यक है: Gateway प्रक्रिया उस workspace पथ पर Heartbeat और ब्रिज फ़ाइलें भी लिखती है। Gateway कंटेनर को समान वॉल्यूम मैप (-v /home/user/.openclaw:/home/user/.openclaw) दें, ताकि वही होस्ट पथ Gateway कंटेनर के भीतर से भी सही ढंग से रिज़ॉल्व हो। मैपिंग में अंतर होने पर Gateway द्वारा अपना Heartbeat लिखने का प्रयास करते समय EACCES दिखाई देता है।
  • Codex कोड मोड: जब OpenClaw सैंडबॉक्स सक्रिय होता है, तो उस टर्न के लिए OpenClaw, Codex ऐप-सर्वर के मूल Code Mode, उपयोगकर्ता MCP सर्वर और ऐप-समर्थित Plugin निष्पादन को अक्षम कर देता है (ये OpenClaw सैंडबॉक्स बैकएंड से नहीं, बल्कि Gateway-होस्ट ऐप-सर्वर प्रक्रिया से चलते हैं), जब तक कि सैंडबॉक्स टूल नीति आवश्यक टूल उपलब्ध न कराए और आप प्रयोगात्मक सैंडबॉक्स exec-सर्वर पथ को न चुनें। इसके बाद शेल पहुँच sandbox_exec और sandbox_process जैसे OpenClaw सैंडबॉक्स-समर्थित टूल के माध्यम से रूट होती है। होस्ट Docker सॉकेट को एजेंट सैंडबॉक्स कंटेनरों या कस्टम Codex सैंडबॉक्स में माउंट न करें। पूर्ण व्यवहार के लिए Codex हार्नेस देखें।
Docker सैंडबॉक्स मोड सक्षम वाले Ubuntu/AppArmor होस्ट पर, Codex ऐप-सर्वर के workspace-write शेल निष्पादन को सैंडबॉक्स कंटेनर के भीतर गैर-विशेषाधिकार प्राप्त उपयोगकर्ता नेमस्पेस की आवश्यकता होती है, और सेवा उपयोगकर्ता द्वारा उन्हें न बना पाने पर यह शेल शुरू होने से पहले विफल हो सकता है। Docker सैंडबॉक्स इग्रेस अक्षम होने पर (network: "none", डिफ़ॉल्ट) इसके लिए एक गैर-विशेषाधिकार प्राप्त नेटवर्क नेमस्पेस भी आवश्यक होता है। सामान्य लक्षण: bwrap: setting up uid map: Permission denied और bwrap: loopback: Failed RTM_NEWADDR: Operation not permittedopenclaw doctor चलाएँ; यदि यह Codex bwrap नेमस्पेस जाँच की विफलता रिपोर्ट करता है, तो ऐसा AppArmor प्रोफ़ाइल चुनें जो OpenClaw सेवा प्रक्रिया को आवश्यक नेमस्पेस प्रदान करता हो। kernel.apparmor_restrict_unprivileged_userns=0 सुरक्षा संबंधी समझौतों वाला होस्ट-व्यापी फ़ॉलबैक है; इसका उपयोग केवल तभी करें जब उस होस्ट की सुरक्षा स्थिति स्वीकार्य हो।

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

  • जब ब्राउज़र टूल को इसकी आवश्यकता होती है, तो सैंडबॉक्स ब्राउज़र स्वतः शुरू होता है (यह सुनिश्चित करता है कि 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" का उपयोग करें।
डिफ़ॉल्ट: 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 वर्कस्पेस सिंक मोड जोड़ता है।
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 नियंत्रित करता है कि सैंडबॉक्स क्या देख सकता है: OpenShell बैकएंड के साथ, mirror मोड अभी भी एक्ज़ेक टर्न के बीच स्थानीय वर्कस्पेस को कैनोनिकल स्रोत के रूप में उपयोग करता है, remote मोड आरंभिक प्रतिलिपि के बाद रिमोट OpenShell वर्कस्पेस को कैनोनिकल स्रोत के रूप में उपयोग करता है और workspaceAccess: "ro"/"none" अभी भी लिखने के व्यवहार को उसी प्रकार सीमित करते हैं। आने वाला मीडिया सक्रिय सैंडबॉक्स वर्कस्पेस (media/inbound/*) में कॉपी किया जाता है।
Skills: read टूल सैंडबॉक्स-रूटेड है। workspaceAccess: "none" के साथ, OpenClaw पात्र स्किल्स को सैंडबॉक्स वर्कस्पेस (.../skills) में मिरर करता है ताकि उन्हें पढ़ा जा सके। "rw" के साथ, वर्कस्पेस स्किल्स को /workspace/skills से पढ़ा जा सकता है और पात्र प्रबंधित, बंडल की गई या Plugin स्किल्स को जनरेट किए गए केवल-पढ़ने योग्य पथ /workspace/.openclaw/sandbox-skills/skills में उपलब्ध कराया जाता है।

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

जब किसी सैंडबॉक्स किए गए एजेंट को उसके प्राथमिक वर्कस्पेस से अधिक की आवश्यकता हो, तो Docker बाइंड माउंट का उपयोग करें। प्रत्येक प्रविष्टि एक होस्ट फ़ोल्डर को स्पष्ट एक्सेस मोड वाले कंटेनर पथ से मैप करती है:
  • ro माउंट किए गए फ़ोल्डर को सैंडबॉक्स के भीतर केवल-पढ़ने योग्य बनाता है।
  • rw सैंडबॉक्स किए गए टूल और प्रक्रियाओं को होस्ट फ़ोल्डर बदलने देता है।
  • कंटेनर पथ वह पथ है जिसका एजेंट उपयोग करता है। होस्ट पथ स्वचालित रूप से उजागर नहीं होते।
यह उदाहरण research एजेंट को लिखने योग्य प्राथमिक वर्कस्पेस, /reference पर केवल-पढ़ने योग्य संदर्भ सामग्री और /drafts पर एक अलग लिखने योग्य आउटपुट फ़ोल्डर देता है:
workspaceAccess और बाइंड मोड एक-दूसरे से स्वतंत्र हैं: workspaceAccess बदलने से कोई अतिरिक्त बाइंड ro से rw या इसके विपरीत नहीं बदलता। वैश्विक और प्रति-एजेंट docker.binds मर्ज किए जाते हैं। प्रति-एजेंट बाइंड के लिए scope: "agent" या "session" रखें; scope: "shared" सभी प्रति-एजेंट Docker ओवरराइड की उपेक्षा करता है और केवल वैश्विक बाइंड का उपयोग करता है। बाइंड माउंट समर्थित बहु-फ़ोल्डर सीमा हैं क्योंकि Docker माउंट आइसोलेशन के साथ कंटेनर का फ़ाइल सिस्टम दृश्य बनाता है और ro/rw मोड सैंडबॉक्स की प्रत्येक प्रक्रिया पर लागू होता है। यह सीमा प्रत्येक OpenClaw कोड पथ में पथ-अधिकरण जाँचों को दोहराए बिना exec, फ़ाइल सिस्टम टूल, चाइल्ड प्रक्रियाओं और लाइब्रेरी को कवर करती है। जब कोई अनुमत शेल या निर्भरता सीधे फ़ाइलों को एक्सेस कर सकती है, तब होस्ट-साइड पथ अनुमति-सूची वही संपूर्ण सीमा प्रदान नहीं कर सकती। ऑप्ट-इन dangerouslyAllowExternalBindSources केवल वर्कस्पेस रूट के बाहर के स्रोतों की अनुमति देता है। यह OpenClaw की अवरुद्ध सिस्टम, क्रेडेंशियल, Docker सॉकेट, सिमलिंक-पैरेंट या आरक्षित-लक्ष्य जाँचों को अक्षम नहीं करता। सबसे छोटे फ़ोल्डर को प्राथमिकता दें, जब तक लिखना आवश्यक न हो तब तक ro का उपयोग करें और माउंट बदलने के बाद सैंडबॉक्स को फिर से बनाएँ:

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

agents.defaults.sandbox.docker.binds वैश्विक माउंट कॉन्फ़िगर करता है। प्रारूप वही host:container:mode रूप है (उदाहरण के लिए, "/home/user/source:/source:rw")। agents.defaults.sandbox.browser.binds अतिरिक्त होस्ट डायरेक्टरियों को केवल सैंडबॉक्स ब्राउज़र कंटेनर में माउंट करता है। सेट किए जाने पर ([] सहित), यह ब्राउज़र कंटेनर के लिए docker.binds को प्रतिस्थापित करता है; छोड़े जाने पर, ब्राउज़र कंटेनर docker.binds पर फ़ॉलबैक करता है।
बाइंड सुरक्षा
  • बाइंड सैंडबॉक्स फ़ाइल सिस्टम को बायपास करते हैं: वे होस्ट पथों को आपके द्वारा निर्धारित मोड (:ro या :rw) के साथ उजागर करते हैं।
  • OpenClaw डिफ़ॉल्ट रूप से खतरनाक बाइंड स्रोतों को अवरुद्ध करता है: सिस्टम पथ (/etc, /proc, /sys, /dev, /root, /boot), Docker सॉकेट डायरेक्टरियाँ (/run, /var/run और उनके docker.sock प्रकार) तथा सामान्य होम-डायरेक्टरी क्रेडेंशियल रूट (~/.aws, ~/.cargo, ~/.config, ~/.docker, ~/.gnupg, ~/.netrc, ~/.npm, ~/.ssh)।
  • सत्यापन स्रोत पथ को नॉर्मलाइज़ करता है, फिर अवरुद्ध पथों और अनुमत रूट की दोबारा जाँच करने से पहले सबसे गहरे मौजूदा पूर्वज के माध्यम से उसे फिर से रिज़ॉल्व करता है, इसलिए अंतिम लीफ़ के अभी मौजूद न होने पर भी सिमलिंक-पैरेंट एस्केप बंद रहकर विफल होते हैं (उदाहरण के लिए, यदि run-link वहाँ इंगित करता है, तो /workspace/run-link/new-file अभी भी /var/run/... के रूप में रिज़ॉल्व होता है)।
  • आरक्षित कंटेनर माउंट पॉइंट (/workspace, /agent) को ढकने वाले बाइंड लक्ष्य भी डिफ़ॉल्ट रूप से अवरुद्ध होते हैं; agents.defaults.sandbox.docker.dangerouslyAllowReservedContainerTargets: true से ओवरराइड करें।
  • वर्कस्पेस/एजेंट-वर्कस्पेस की अनुमति-सूची वाले रूट के बाहर के बाइंड स्रोत डिफ़ॉल्ट रूप से अवरुद्ध होते हैं; agents.defaults.sandbox.docker.dangerouslyAllowExternalBindSources: true से ओवरराइड करें। अनुमत रूट भी उसी प्रकार कैनोनिकलाइज़ किए जाते हैं, इसलिए सिमलिंक रिज़ॉल्यूशन से पहले केवल अनुमति-सूची के भीतर दिखने वाला पथ भी अनुमत रूट से बाहर होने के कारण अस्वीकार कर दिया जाता है।
  • संवेदनशील माउंट (सीक्रेट, SSH कुंजियाँ, सेवा क्रेडेंशियल) तब तक :ro होने चाहिए, जब तक बिल्कुल आवश्यक न हों।
  • यदि आपको वर्कस्पेस तक केवल पढ़ने का एक्सेस चाहिए, तो workspaceAccess: "ro" के साथ संयोजित करें; बाइंड मोड स्वतंत्र रहते हैं।
  • बाइंड टूल नीति और एलिवेटेड एक्ज़ेक के साथ कैसे इंटरैक्ट करते हैं, इसके लिए सैंडबॉक्स बनाम टूल नीति बनाम एलिवेटेड देखें।

इमेज और सेटअप

डिफ़ॉल्ट Docker इमेज: openclaw-sandbox:bookworm-slim
स्रोत चेकआउट बनाम npm इंस्टॉलscripts/sandbox-setup.sh, scripts/sandbox-common-setup.sh और scripts/sandbox-browser-setup.sh सहायक स्क्रिप्ट केवल स्रोत चेकआउट से चलाते समय उपलब्ध होती हैं। वे npm पैकेज में शामिल नहीं हैं।यदि आपने OpenClaw को npm install -g openclaw के माध्यम से इंस्टॉल किया है, तो इसके बजाय नीचे दिखाए गए इनलाइन docker build कमांड का उपयोग करें।
1

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

स्रोत चेकआउट से:
npm इंस्टॉल से (स्रोत चेकआउट आवश्यक नहीं):
डिफ़ॉल्ट इमेज में Node शामिल नहीं है। यदि किसी स्किल को Node (या अन्य रनटाइम) की आवश्यकता है, तो या तो कस्टम इमेज में उसे पहले से शामिल करें या sandbox.docker.setupCommand के माध्यम से इंस्टॉल करें (नेटवर्क इग्रेस + लिखने योग्य रूट + रूट उपयोगकर्ता आवश्यक हैं)।openclaw-sandbox:bookworm-slim के न होने पर OpenClaw चुपचाप सामान्य debian:bookworm-slim को प्रतिस्थापित नहीं करता। डिफ़ॉल्ट इमेज को लक्षित करने वाले सैंडबॉक्स रन, आपके द्वारा इसे बनाए जाने तक बिल्ड निर्देश के साथ तुरंत विफल हो जाते हैं, क्योंकि बंडल की गई इमेज में सैंडबॉक्स लिखने/संपादित करने वाले सहायकों के लिए python3 होता है।
2

वैकल्पिक: सामान्य इमेज बनाएँ

सामान्य टूलिंग (उदाहरण के लिए curl, jq, Node 24, pnpm, python3 और git) वाली अधिक कार्यक्षम सैंडबॉक्स इमेज के लिए:स्रोत चेकआउट से:
npm इंस्टॉल से, पहले डिफ़ॉल्ट इमेज बनाएँ (ऊपर देखें), फिर रिपॉज़िटरी के scripts/docker/sandbox/Dockerfile.common का उपयोग करके उसके ऊपर सामान्य इमेज बनाएँ।फिर agents.defaults.sandbox.docker.image को openclaw-sandbox-common:bookworm-slim पर सेट करें।
3

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

स्रोत चेकआउट से:
npm इंस्टॉल से, रिपॉज़िटरी के scripts/docker/sandbox/Dockerfile.browser का उपयोग करके बनाएँ।
डिफ़ॉल्ट रूप से, Docker सैंडबॉक्स कंटेनर बिना नेटवर्क के चलते हैं। agents.defaults.sandbox.docker.network से ओवरराइड करें।
बंडल की गई सैंडबॉक्स ब्राउज़र इमेज कंटेनरीकृत वर्कलोड के लिए सावधानीपूर्ण 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=<N> नियंत्रित करता है, जिसमें 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)। प्राथमिकता क्रम के लिए बहु-एजेंट सैंडबॉक्स और टूल देखें।

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

संबंधित