Gateway

सुरक्षा

दायरा: व्यक्तिगत सहायक सुरक्षा मॉडल

  • समर्थित: प्रत्येक Gateway के लिए एक उपयोगकर्ता/विश्वास सीमा (प्रत्येक सीमा के लिए एक OS उपयोगकर्ता/होस्ट/VPS को प्राथमिकता दें)।
  • समर्थित नहीं: परस्पर अविश्वसनीय या विरोधी उपयोगकर्ताओं द्वारा उपयोग किया जाने वाला एक साझा Gateway/एजेंट।
  • विरोधी-उपयोगकर्ता पृथक्करण के लिए अलग-अलग Gateway (और आदर्श रूप से अलग OS उपयोगकर्ता/होस्ट) आवश्यक हैं।
  • यदि कई अविश्वसनीय उपयोगकर्ता किसी एक टूल-सक्षम एजेंट को संदेश भेज सकते हैं, तो वे उस एजेंट का प्रत्यायोजित टूल प्राधिकार साझा करते हैं।
  • यदि कोई व्यक्ति Gateway होस्ट की स्थिति/कॉन्फ़िगरेशन (~/.openclaw, जिसमें openclaw.json शामिल है) बदल सकता है, तो उसे विश्वसनीय ऑपरेटर मानें।
  • एक Gateway के भीतर, प्रमाणित ऑपरेटर पहुँच एक विश्वसनीय कंट्रोल-प्लेन भूमिका है, न कि प्रति-उपयोगकर्ता टेनेंट भूमिका।
  • sessionKey (सत्र ID, लेबल) एक रूटिंग चयनकर्ता है, प्राधिकरण टोकन नहीं।

कई उपयोगकर्ताओं या संगठनों को होस्ट कर रहे हैं? एक Gateway साझा करने के बजाय प्रत्येक टेनेंट के लिए एक पृथक Gateway सेल चलाएँ। बहु-टेनेंट होस्टिंग देखें।

रिमोट पहुँच, DM नीति, रिवर्स प्रॉक्सी या सार्वजनिक एक्सपोज़र बदलने से पहले, प्री-फ़्लाइट/रोलबैक चेकलिस्ट के रूप में Gateway एक्सपोज़र रनबुक का पालन करें।

openclaw security audit

कॉन्फ़िगरेशन में किसी भी बदलाव के बाद या नेटवर्क सतहों को एक्सपोज़ करने से पहले इसे चलाएँ:

bash
openclaw security auditopenclaw security audit --deep    # लाइव Gateway जाँच का प्रयास करता हैopenclaw security audit --fix     # सुरक्षित सुधार लागू करेंopenclaw security audit --json

--fix को जानबूझकर सीमित रखा गया है: यह खुली समूह नीतियों को अनुमति-सूचियों में बदलता है, logging.redactSensitive: "tools" को पुनर्स्थापित करता है, स्थिति/कॉन्फ़िगरेशन/शामिल-फ़ाइल अनुमतियों (600 फ़ाइलें, 700 डायरेक्टरियाँ) को कड़ा करता है, और Windows पर POSIX chmod के बजाय ACL रीसेट का उपयोग करता है।

ऑडिट क्या जाँचता है (उच्च स्तर पर)

  • इनबाउंड पहुँच - DM/समूह नीतियाँ, अनुमति-सूचियाँ: क्या अजनबी बॉट को ट्रिगर कर सकते हैं?
  • टूल प्रभाव-क्षेत्र - उन्नत टूल + खुले रूम: क्या प्रॉम्प्ट इंजेक्शन शेल/फ़ाइल/नेटवर्क कार्रवाइयों में बदल सकता है?
  • Exec फ़ाइल-सिस्टम विचलन - परिवर्तनकारी फ़ाइल-सिस्टम टूल अस्वीकृत हैं, जबकि exec/process सैंडबॉक्स प्रतिबंधों के बिना उपलब्ध रहते हैं।
  • Exec अनुमोदन विचलन - security="full", autoAllowSkills, strictInlineEval के बिना इंटरप्रेटर अनुमति-सूचियाँ। केवल security="full" एक व्यापक सुरक्षा-मुद्रा चेतावनी है, बग का प्रमाण नहीं - यह विश्वसनीय व्यक्तिगत-सहायक सेटअप के लिए चुना गया डिफ़ॉल्ट है; इसे केवल तभी कड़ा करें जब आपके खतरा मॉडल को अनुमोदन या अनुमति-सूची सुरक्षा-सीमाओं की आवश्यकता हो।
  • नेटवर्क एक्सपोज़र - Gateway बाइंड/प्रमाणीकरण, Tailscale Serve/Funnel, कमज़ोर/छोटे प्रमाणीकरण टोकन।
  • ब्राउज़र नियंत्रण एक्सपोज़र - रिमोट Node, रिले पोर्ट, रिमोट CDP एंडपॉइंट।
  • स्थानीय डिस्क स्वच्छता - अनुमतियाँ, सिमलिंक, कॉन्फ़िगरेशन इन्क्लूड, सिंक किए गए फ़ोल्डर पथ।
  • Plugins - स्पष्ट अनुमति-सूची के बिना लोड करना।
  • नीति विचलन - सैंडबॉक्स Docker सेटिंग्स कॉन्फ़िगर हैं लेकिन सैंडबॉक्स मोड बंद है; gateway.nodes.denyCommands प्रविष्टियाँ जो प्रभावी दिखती हैं, लेकिन केवल सटीक कमांड ID (उदाहरण के लिए system.run) से मेल खाती हैं, पेलोड के भीतर शेल टेक्स्ट से नहीं; खतरनाक gateway.nodes.allowCommands प्रविष्टियाँ; वैश्विक tools.profile="minimal" को प्रति एजेंट ओवरराइड किया गया है; अनुमतिशील नीति के अंतर्गत Plugin-स्वामित्व वाले टूल पहुँच योग्य हैं।
  • रनटाइम अपेक्षा विचलन - यह मानना कि अंतर्निहित exec का अर्थ अभी भी sandbox है, जबकि tools.exec.host अब डिफ़ॉल्ट रूप से auto होता है, या सैंडबॉक्स मोड बंद होने पर tools.exec.host="sandbox" सेट करना।
  • मॉडल स्वच्छता - कॉन्फ़िगर किए गए पुराने मॉडलों पर चेतावनी देता है (हल्की चेतावनी, कठोर अवरोध नहीं)।

प्रत्येक निष्कर्ष का एक संरचित checkId होता है (उदाहरण के लिए gateway.bind_no_auth, tools.exec.security_full_configured)। उपसर्ग: fs.* (अनुमतियाँ), gateway.* (बाइंड/प्रमाणीकरण/Tailscale/Control UI/विश्वसनीय-प्रॉक्सी), hooks.*/browser.*/sandbox.*/tools.exec.* (प्रति-सतह सुदृढ़ीकरण), plugins.*/skills.* (आपूर्ति शृंखला), security.exposure.* (पहुँच नीति x टूल प्रभाव-क्षेत्र)। गंभीरता और स्वतः-सुधार समर्थन सहित पूरी सूची: सुरक्षा ऑडिट जाँचेंऔपचारिक सत्यापन भी देखें।

निष्कर्षों की छँटाई करते समय प्राथमिकता क्रम

  1. कुछ भी "खुला" + टूल सक्षम: पहले DM/समूहों को प्रतिबंधित करें (पेयरिंग/अनुमति-सूचियाँ), फिर टूल नीति/सैंडबॉक्सिंग को कड़ा करें।
  2. सार्वजनिक नेटवर्क एक्सपोज़र (LAN बाइंड, Funnel, प्रमाणीकरण अनुपस्थित): तुरंत ठीक करें।
  3. ब्राउज़र नियंत्रण का रिमोट एक्सपोज़र: इसे ऑपरेटर पहुँच की तरह मानें (केवल tailnet, Node को सोच-समझकर पेयर करें, कोई सार्वजनिक एक्सपोज़र नहीं)।
  4. अनुमतियाँ: स्थिति/कॉन्फ़िगरेशन/क्रेडेंशियल/प्रमाणीकरण समूह/सभी के लिए पठनीय नहीं होने चाहिए।
  5. Plugins: केवल वही लोड करें जिन पर आप स्पष्ट रूप से विश्वास करते हैं।
  6. मॉडल चयन: टूल वाले किसी भी बॉट के लिए आधुनिक, निर्देश-सुदृढ़ मॉडल को प्राथमिकता दें।

60 सेकंड में सुदृढ़ आधाररेखा

json5
{  gateway: {    mode: "local",    bind: "loopback",    auth: { mode: "token", token: "replace-with-long-random-token" },  },  session: {    dmScope: "per-channel-peer",  },  tools: {    profile: "messaging",    deny: ["group:automation", "group:runtime", "group:fs", "sessions_spawn", "sessions_send"],    fs: { workspaceOnly: true },    exec: { security: "deny", ask: "always" },    elevated: { enabled: false },  },  channels: {    whatsapp: { dmPolicy: "pairing", groups: { "*": { requireMention: true } } },  },}

Gateway को केवल स्थानीय रखता है, DM को पृथक करता है और डिफ़ॉल्ट रूप से कंट्रोल-प्लेन/रनटाइम टूल अक्षम करता है। इसके बाद प्रत्येक विश्वसनीय एजेंट के लिए चुनिंदा टूल पुनः सक्षम करें।

चैट-चालित एजेंट टर्न के लिए अंतर्निहित आधाररेखा: गैर-स्वामी प्रेषक कॉन्फ़िगरेशन की परवाह किए बिना cron या gateway टूल का उपयोग नहीं कर सकते।

विश्वास सीमा मैट्रिक्स

जोखिम रिपोर्टों की छँटाई के लिए संक्षिप्त मॉडल:

सीमा या नियंत्रण इसका अर्थ सामान्य गलत व्याख्या
gateway.auth (टोकन/पासवर्ड/विश्वसनीय-प्रॉक्सी/डिवाइस प्रमाणीकरण) Gateway API पर कॉल करने वालों को प्रमाणित करता है "सुरक्षित होने के लिए प्रत्येक फ़्रेम पर प्रति-संदेश हस्ताक्षर आवश्यक हैं"
sessionKey संदर्भ/सत्र चयन के लिए रूटिंग कुंजी "सत्र कुंजी उपयोगकर्ता प्रमाणीकरण सीमा है"
प्रॉम्प्ट/सामग्री सुरक्षा-सीमाएँ मॉडल के दुरुपयोग का जोखिम घटाती हैं "केवल प्रॉम्प्ट इंजेक्शन प्रमाणीकरण बाइपास सिद्ध करता है"
canvas.eval / ब्राउज़र मूल्यांकन सक्षम होने पर जानबूझकर प्रदान की गई ऑपरेटर क्षमता "इस विश्वास मॉडल में कोई भी JS eval प्रिमिटिव स्वतः ही एक भेद्यता है"
स्थानीय TUI ! शेल ऑपरेटर द्वारा स्पष्ट रूप से ट्रिगर किया गया स्थानीय निष्पादन "स्थानीय शेल सुविधा कमांड रिमोट इंजेक्शन है"
Node पेयरिंग और Node कमांड पेयर किए गए डिवाइस पर ऑपरेटर-स्तरीय रिमोट निष्पादन "रिमोट डिवाइस नियंत्रण को डिफ़ॉल्ट रूप से अविश्वसनीय उपयोगकर्ता पहुँच माना जाना चाहिए"
gateway.nodes.pairing.autoApproveCidrs वैकल्पिक विश्वसनीय-नेटवर्क Node नामांकन नीति "डिफ़ॉल्ट रूप से अक्षम अनुमति-सूची स्वतः ही पेयरिंग भेद्यता है"
gateway.nodes.pairing.sshVerify ऑपरेटर SSH पर कुंजी-सत्यापित Node नामांकन "डिफ़ॉल्ट रूप से चालू स्वतः-अनुमोदन स्वतः ही पेयरिंग भेद्यता है"

डिज़ाइन के अनुसार भेद्यताएँ नहीं

सामान्य निष्कर्ष जिन्हें बिना कार्रवाई के बंद किया गया
  • नीति, प्रमाणीकरण या सैंडबॉक्स बाइपास के बिना केवल प्रॉम्प्ट-इंजेक्शन शृंखलाएँ।
  • ऐसे दावे जो एक साझा होस्ट या कॉन्फ़िगरेशन पर प्रतिकूल बहु-टेनेंट संचालन मानते हैं।
  • साझा-Gateway सेटअप में सामान्य ऑपरेटर पठन-पथ पहुँच (उदाहरण के लिए sessions.list / sessions.preview / chat.history) को IDOR के रूप में वर्गीकृत करना।
  • केवल localhost परिनियोजन संबंधी निष्कर्ष (उदाहरण के लिए केवल loopback वाले Gateway पर HSTS अनुपस्थित होना)।
  • ऐसे इनबाउंड पथों के लिए Discord इनबाउंड Webhook हस्ताक्षर संबंधी निष्कर्ष जो इस रेपो में मौजूद नहीं हैं।
  • Node पेयरिंग मेटाडेटा को system.run के लिए छिपी हुई दूसरी प्रति-कमांड अनुमोदन परत मानना; वास्तविक निष्पादन सीमा Gateway की वैश्विक Node कमांड नीति और Node के अपने exec अनुमोदन हैं।
  • gateway.nodes.pairing.sshVerify को भेद्यता मानना क्योंकि यह डिफ़ॉल्ट रूप से सक्षम है। यह केवल नेटवर्क निकटता या SSH पहुँच-योग्यता के आधार पर कभी अनुमोदन नहीं करता: Gateway SSH (BatchMode, कठोर होस्ट कुंजियाँ) पर डिवाइस पहचान वापस पढ़ता है और लंबित अनुरोध के साथ सटीक डिवाइस-कुंजी मिलान होने पर ही अनुमोदन करता है, जिसके लिए कनेक्ट करने वाली की-पेयर का पहले से ही ऑपरेटर द्वारा नियंत्रित होस्ट पर ऑपरेटर के खाते के अंतर्गत मौजूद होना आवश्यक है। जाँच निजी/CGNAT स्रोत पतों तक सीमित हैं, विश्वसनीय-CIDR पात्रता की न्यूनतम शर्त (केवल नया, स्कोप-रहित role: node) साझा करती हैं, और sshVerify: false इस सुविधा को बंद कर देता है।
  • gateway.nodes.pairing.autoApproveCidrs को अपने आप में भेद्यता मानना। यह डिफ़ॉल्ट रूप से अक्षम है, इसके लिए स्पष्ट CIDR/IP प्रविष्टियाँ आवश्यक हैं, यह केवल पहली बार की role: node पेयरिंग पर लागू होता है जिसमें कोई अनुरोधित स्कोप नहीं होता, और यह ऑपरेटर/ब्राउज़र/Control UI, WebChat, भूमिका/स्कोप अपग्रेड, मेटाडेटा या सार्वजनिक-कुंजी परिवर्तन, या समान-होस्ट loopback विश्वसनीय-प्रॉक्सी हेडर पथों को कभी स्वतः अनुमोदित नहीं करता (भले ही loopback विश्वसनीय-प्रॉक्सी प्रमाणीकरण सक्षम हो)।
  • "प्रति-उपयोगकर्ता प्राधिकरण अनुपस्थित" संबंधी निष्कर्ष जो sessionKey को प्रमाणीकरण टोकन मानते हैं।

Gateway और Node का विश्वास

Gateway और Node को अलग-अलग भूमिकाओं वाला एक ऑपरेटर विश्वास डोमेन मानें:

  • Gateway: कंट्रोल प्लेन और नीति सतह (gateway.auth, टूल नीति, रूटिंग)।
  • Node: उस Gateway से पेयर की गई रिमोट निष्पादन सतह (कमांड, डिवाइस कार्रवाइयाँ, होस्ट-स्थानीय क्षमताएँ)।
  • Gateway के लिए प्रमाणित कॉलर Gateway दायरे में विश्वसनीय होता है; पेयरिंग के बाद, Node कार्रवाइयाँ उस Node पर विश्वसनीय ऑपरेटर कार्रवाइयाँ होती हैं। ऑपरेटर स्कोप देखें।
  • साझा Gateway टोकन/पासवर्ड से प्रमाणित सीधे loopback बैकएंड क्लाइंट, उपयोगकर्ता डिवाइस पहचान प्रस्तुत किए बिना आंतरिक कंट्रोल-प्लेन RPC कर सकते हैं। यह रिमोट या ब्राउज़र पेयरिंग बाइपास नहीं है - नेटवर्क क्लाइंट, Node क्लाइंट, डिवाइस-टोकन क्लाइंट और स्पष्ट डिवाइस पहचान अब भी पेयरिंग और स्कोप-अपग्रेड प्रवर्तन से गुज़रते हैं।
  • Exec अनुमोदन (अनुमति-सूची + पूछना) ऑपरेटर की मंशा के लिए सुरक्षा-सीमाएँ हैं, प्रतिकूल बहु-टेनेंट पृथक्करण नहीं। वे सटीक अनुरोध संदर्भ और सर्वोत्तम-प्रयास वाले सीधे स्थानीय फ़ाइल ऑपरेंड को बाँधते हैं; वे प्रत्येक रनटाइम/इंटरप्रेटर लोडर पथ का अर्थगत मॉडल नहीं बनाते। मज़बूत सीमाओं के लिए सैंडबॉक्सिंग और होस्ट पृथक्करण का उपयोग करें।
  • विश्वसनीय एकल-ऑपरेटर डिफ़ॉल्ट: gateway/node पर होस्ट exec अनुमोदन प्रॉम्प्ट (security="full", ask="off") के बिना अनुमत है। यह जानबूझकर किया गया UX है, अपने आप में भेद्यता नहीं।

प्रतिकूल-उपयोगकर्ता पृथक्करण के लिए, OS उपयोगकर्ता/होस्ट के अनुसार विश्वास सीमाएँ अलग करें और अलग-अलग Gateway चलाएँ।

खतरा मॉडल

आपका AI सहायक मनमाने शेल कमांड निष्पादित कर सकता है, फ़ाइलें पढ़/लिख सकता है, नेटवर्क सेवाओं तक पहुँच सकता है और किसी को भी संदेश भेज सकता है (यदि उसे चैनल पहुँच दी गई हो)। उसे संदेश भेजने वाले लोग उसे बुरे काम करने के लिए छलने, आपके डेटा तक पहुँच पाने के लिए सोशल इंजीनियरिंग करने या इन्फ़्रास्ट्रक्चर के विवरण की टोह लेने का प्रयास कर सकते हैं।

यहाँ अधिकांश विफलताएँ असामान्य एक्सप्लॉइट नहीं होतीं - वे बस "किसी ने बॉट को संदेश भेजा और बॉट ने वही कर दिया जो उससे कहा गया था" जैसी होती हैं। OpenClaw का दृष्टिकोण, क्रम से:

  1. पहले पहचान - तय करें कि बॉट से कौन बात कर सकता है (DM पेयरिंग / अनुमतिसूचियाँ / स्पष्ट "open")।
  2. फिर दायरा - तय करें कि बॉट कहाँ कार्य कर सकता है (समूह अनुमतिसूचियाँ + उल्लेख गेटिंग, टूल, सैंडबॉक्सिंग, डिवाइस अनुमतियाँ)।
  3. अंत में मॉडल - मानकर चलें कि मॉडल को प्रभावित किया जा सकता है; ऐसी संरचना बनाएँ कि हेरफेर का प्रभाव क्षेत्र सीमित रहे।

DM पहुँच: पेयरिंग, अनुमतिसूची, खुली, अक्षम

DM में सक्षम प्रत्येक चैनल dmPolicy (या *.dm.policy) का समर्थन करता है, जो संदेश संसाधित होने से पहले आने वाले DM को नियंत्रित करता है:

नीति व्यवहार
pairing डिफ़ॉल्ट। अज्ञात प्रेषकों को पेयरिंग कोड मिलता है; स्वीकृति मिलने तक बॉट उन्हें अनदेखा करता है। कोड 1 घंटे बाद समाप्त हो जाते हैं; नया अनुरोध बनाए जाने तक बार-बार DM भेजने पर कोड दोबारा नहीं भेजा जाता। लंबित अनुरोध प्रति चैनल अधिकतम 3 हैं।
allowlist अज्ञात प्रेषक अवरुद्ध रहते हैं, कोई पेयरिंग हैंडशेक नहीं होता।
open कोई भी DM कर सकता है (सार्वजनिक)। चैनल की अनुमतिसूची में "*" शामिल होना आवश्यक है (स्पष्ट ऑप्ट-इन)।
disabled आने वाले DM पूरी तरह अनदेखे किए जाते हैं।
bash
openclaw pairing list <channel>openclaw pairing approve <channel> <code>

विवरण + डिस्क पर फ़ाइलें: पेयरिंग

dmPolicy="open" और groupPolicy="open" को अंतिम उपाय वाली सेटिंग मानें; जब तक आपको कक्ष के प्रत्येक सदस्य पर पूरा भरोसा न हो, पेयरिंग + अनुमतिसूचियों को प्राथमिकता दें।

अनुमतिसूचियाँ (दो स्तर)

  • DM अनुमतिसूची (allowFrom / channels.discord.allowFrom / channels.slack.allowFrom; विरासती: channels.discord.dm.allowFrom, channels.slack.dm.allowFrom): बॉट को कौन DM कर सकता है। dmPolicy="pairing" होने पर स्वीकृतियाँ ~/.openclaw/credentials/<channel>-allowFrom.json (डिफ़ॉल्ट खाता) या <channel>-<accountId>-allowFrom.json (गैर-डिफ़ॉल्ट खाते) में लिखी जाती हैं और कॉन्फ़िग अनुमतिसूचियों के साथ मिला दी जाती हैं।
  • समूह अनुमतिसूची (चैनल-विशिष्ट): बॉट किन समूहों/चैनलों/गिल्डों को स्वीकार करता है।
    • channels.whatsapp.groups, channels.telegram.groups, channels.imessage.groups: प्रति-समूह डिफ़ॉल्ट, जैसे requireMention; सेट होने पर यह समूह अनुमतिसूची का भी काम करता है (सभी को अनुमति देने वाला व्यवहार बनाए रखने के लिए "*" शामिल करें)। उल्लेख ट्रिगर को agents.list[].groupChat.mentionPatterns (उदाहरण के लिए ["@openclaw", "@mybot"]) से अनुकूलित करें, ताकि requireMention आपके अपने बॉट नामों के आधार पर नियंत्रित हो।
    • groupPolicy="allowlist" + groupAllowFrom: समूह सत्र में बॉट को कौन ट्रिगर कर सकता है, इसे सीमित करें (WhatsApp/Telegram/Signal/iMessage/Microsoft Teams)।
    • channels.discord.guilds / channels.slack.channels: प्रति-सतह अनुमतिसूचियाँ + उल्लेख डिफ़ॉल्ट।
    • जाँच क्रम: पहले groupPolicy/समूह अनुमतिसूचियाँ, फिर उल्लेख/उत्तर सक्रियण। बॉट संदेश का उत्तर देना (अंतर्निहित उल्लेख) groupAllowFrom को बायपास नहीं करता।

विवरण: कॉन्फ़िगरेशन और समूह

DM सत्र पृथक्करण (बहु-उपयोगकर्ता मोड)

डिफ़ॉल्ट रूप से, OpenClaw सभी DM को डिवाइसों के बीच निरंतरता बनाए रखने के लिए मुख्य सत्र में रूट करता है। यदि कई लोग बॉट को DM कर सकते हैं (खुले DM या बहु-व्यक्ति अनुमतिसूची), तो DM सत्रों को अलग करें:

json5
{ session: { dmScope: "per-channel-peer" } }

session.dmScope मान:

मान दायरा
main (कॉन्फ़िग डिफ़ॉल्ट) सभी DM एक सत्र साझा करते हैं।
per-channel-peer प्रत्येक चैनल+प्रेषक जोड़ी को अलग DM संदर्भ मिलता है (सुरक्षित DM मोड)।
per-account-channel-peer ऊपर जैसा, लेकिन खाते के आधार पर और विभाजित (बहु-खाता चैनल)।
per-peer प्रत्येक प्रेषक को समान प्रकार के सभी चैनलों में एक सत्र मिलता है।

स्थानीय CLI ऑनबोर्डिंग स्पष्ट session.dmScope को बनाए रखती है और अन्यथा उसे सेट नहीं करती, इसलिए "main" डिफ़ॉल्ट लागू होता है: सभी चैनलों के प्रत्यक्ष संदेश एजेंट के क्रमिक मुख्य सत्र को साझा करते हैं (व्यक्तिगत-एजेंट डिफ़ॉल्ट)। साझा या बहु-उपयोगकर्ता इनबॉक्स के लिए session.dmScope: "per-channel-peer" सेट करें; बहु-उपयोगकर्ता DM ट्रैफ़िक मिलने पर openclaw security audit पृथक्करण की अनुशंसा करता है।

यह संदेश-संदर्भ की सीमा है, होस्ट-प्रशासक की सीमा नहीं। यदि उपयोगकर्ता एक-दूसरे के विरोधी हैं और समान Gateway होस्ट/कॉन्फ़िग साझा करते हैं, तो प्रत्येक विश्वास सीमा के लिए अलग-अलग Gateway चलाएँ।

यदि एक ही व्यक्ति कई चैनलों पर आपसे संपर्क करता है, तो उन DM सत्रों को एक प्रामाणिक पहचान में समेटने के लिए session.identityLinks का उपयोग करें। सत्र प्रबंधन और कॉन्फ़िगरेशन देखें।

संदर्भ दृश्यता बनाम ट्रिगर प्राधिकरण

दो अलग अवधारणाएँ:

  • ट्रिगर प्राधिकरण: एजेंट को कौन ट्रिगर कर सकता है (dmPolicy, groupPolicy, अनुमतिसूचियाँ, उल्लेख गेट)।
  • संदर्भ दृश्यता: मॉडल तक कौन-सा पूरक संदर्भ पहुँचता है (उत्तर का मुख्य भाग, उद्धृत टेक्स्ट, थ्रेड इतिहास, अग्रेषित मेटाडेटा)।

contextVisibility दूसरे को नियंत्रित करता है:

  • "all" (डिफ़ॉल्ट): पूरक संदर्भ जैसा प्राप्त हुआ है, वैसा ही रखा जाता है।
  • "allowlist": पूरक संदर्भ सक्रिय अनुमतिसूची जाँचों द्वारा अनुमत प्रेषकों तक फ़िल्टर किया जाता है।
  • "allowlist_quote": allowlist जैसा, लेकिन फिर भी एक स्पष्ट उद्धृत उत्तर रखता है।

प्रति चैनल या प्रति कक्ष/वार्तालाप सेट करें - समूह देखें। जो रिपोर्ट केवल यह दिखाती हैं कि "मॉडल गैर-अनुमतिसूचीबद्ध प्रेषकों का उद्धृत/ऐतिहासिक टेक्स्ट देख सकता है", वे contextVisibility से संबोधित किए जा सकने वाले सुरक्षा-सुदृढ़ीकरण निष्कर्ष हैं, अपने-आप में प्रमाणीकरण या सैंडबॉक्स बायपास नहीं; सुरक्षा प्रभाव वाली रिपोर्ट के लिए फिर भी विश्वास-सीमा बायपास का प्रदर्शन आवश्यक है।

प्रॉम्प्ट इंजेक्शन

हमलावर ऐसा संदेश तैयार करता है जो मॉडल को असुरक्षित कार्रवाई के लिए प्रभावित करता है ("अपने निर्देशों को अनदेखा करें", "अपना फ़ाइल सिस्टम डंप करें", "इस लिंक का अनुसरण करके कमांड चलाएँ")। प्रॉम्प्ट इंजेक्शन का समाधान केवल सिस्टम प्रॉम्प्ट की सुरक्षा सीमाओं से नहीं होता - वे सामान्य मार्गदर्शन हैं; कठोर प्रवर्तन टूल नीति, निष्पादन स्वीकृतियों, सैंडबॉक्सिंग और चैनल अनुमतिसूचियों से आता है (जिन्हें ऑपरेटर संरचना के अनुसार फिर भी अक्षम कर सकते हैं)।

प्रॉम्प्ट इंजेक्शन के लिए सार्वजनिक DM आवश्यक नहीं हैं: भले ही केवल आप बॉट को संदेश भेज सकते हों, उसके द्वारा पढ़ी जाने वाली कोई भी अविश्वसनीय सामग्री (वेब खोज/फ़ेच परिणाम, ब्राउज़र पृष्ठ, ईमेल, दस्तावेज़, अटैचमेंट, चिपकाए गए लॉग/कोड) विरोधी निर्देश रख सकती है। केवल प्रेषक ही नहीं, सामग्री स्वयं भी आक्रमण का क्षेत्र है।

अविश्वसनीय माने जाने वाले चेतावनी संकेत:

  • "यह फ़ाइल/URL पढ़ें और इसमें जैसा कहा गया है, ठीक वैसा करें।"
  • "अपने सिस्टम प्रॉम्प्ट या सुरक्षा नियमों को अनदेखा करें।"
  • "अपने छिपे हुए निर्देश या टूल आउटपुट प्रकट करें।"
  • "~/.openclaw या अपने लॉग की पूरी सामग्री चिपकाएँ।"

व्यवहार में उपयोगी उपाय:

  • आने वाले DM को प्रतिबंधित रखें (पेयरिंग/अनुमतिसूचियाँ); समूहों में उल्लेख गेटिंग को प्राथमिकता दें; सार्वजनिक कक्षों में हमेशा सक्रिय रहने वाले बॉट से बचें।
  • लिंक, अटैचमेंट और चिपकाए गए निर्देशों को डिफ़ॉल्ट रूप से शत्रुतापूर्ण मानें।
  • संवेदनशील टूल निष्पादन सैंडबॉक्स में चलाएँ; सीक्रेट को एजेंट की पहुँच वाले फ़ाइल सिस्टम से बाहर रखें। सैंडबॉक्सिंग ऑप्ट-इन है: यदि सैंडबॉक्स मोड बंद है, तो अंतर्निहित host=auto Gateway होस्ट पर रिज़ॉल्व होता है, जबकि स्पष्ट host=sandbox फिर भी सुरक्षित रूप से विफल होता है (कोई सैंडबॉक्स रनटाइम उपलब्ध नहीं)। उस व्यवहार को कॉन्फ़िग में स्पष्ट करने के लिए host=gateway सेट करें।
  • उच्च-जोखिम वाले टूल (exec, browser, web_fetch, web_search) को विश्वसनीय एजेंटों या स्पष्ट अनुमतिसूचियों तक सीमित करें।
  • यदि आप इंटरप्रेटरों (python, node, ruby, perl, php, lua, osascript) को अनुमतिसूची में रखते हैं, तो tools.exec.strictInlineEval सक्षम करें ताकि इनलाइन मूल्यांकन रूपों (-c, -e और समान रूपों) के लिए फिर भी स्पष्ट स्वीकृति आवश्यक हो। अनुमतिसूची मोड में, प्रत्येक heredoc खंड (<<) को उद्धरण से स्वतंत्र रूप से हमेशा समीक्षक या स्पष्ट स्वीकृति की आवश्यकता होती है - अनुमतिसूचीबद्ध कमांड अनुमतिसूची समीक्षा को बायपास करने के लिए heredoc के मुख्य भाग का उपयोग नहीं कर सकता।
  • अविश्वसनीय सामग्री का सारांश बनाने के लिए केवल-पढ़ने योग्य या टूल-अक्षम रीडर एजेंट का उपयोग करके प्रभाव क्षेत्र कम करें, फिर सारांश अपने मुख्य एजेंट को दें।
  • Gmail हुक के लिए, अंतर्निहित प्रति-संदेश सत्र वार्तालाप संदर्भ को अलग करता है, लेकिन लक्ष्य एजेंट की टूल या कार्यस्थान अनुमतियाँ नहीं हटाता। अविश्वसनीय मेल को समर्पित रीडर एजेंट में रूट करें, प्रति-एजेंट सैंडबॉक्स और टूल प्रतिबंध लागू करें और मुख्य एजेंट को होने वाले किसी भी हस्तांतरण को tools.agentToAgent से सीमित करें। Gmail एकीकरण देखें।
  • टूल-सक्षम एजेंटों के लिए आवश्यकता न होने पर web_search / web_fetch / browser बंद रखें।
  • OpenResponses URL इनपुट (input_file / input_image) के लिए सख्त gateway.http.endpoints.responses.files.urlAllowlist / images.urlAllowlist सेट करें और maxUrlParts को कम रखें (खाली अनुमतिसूचियाँ अनसेट मानी जाती हैं)। URL फ़ेचिंग पूरी तरह अक्षम करने के लिए files.allowUrl: false / images.allowUrl: false का उपयोग करें।
  • सीक्रेट को प्रॉम्प्ट से बाहर रखें; इसके बजाय उन्हें Gateway होस्ट पर env/कॉन्फ़िग के माध्यम से दें।

मॉडल का चयन महत्वपूर्ण है। मॉडल स्तरों में प्रॉम्प्ट-इंजेक्शन प्रतिरोध समान नहीं होता - छोटे/सस्ते मॉडल विरोधी प्रॉम्प्ट के अंतर्गत टूल के दुरुपयोग और निर्देश अपहरण के प्रति अधिक संवेदनशील होते हैं।

  • ऐसे किसी भी बॉट के लिए नवीनतम पीढ़ी के सर्वोत्तम स्तर वाले मॉडल का उपयोग करें, जो टूल चला सकता हो या फ़ाइलों/नेटवर्क को छू सकता हो।
  • टूल-सक्षम एजेंटों या अविश्वसनीय इनबॉक्स के लिए पुराने/कमज़ोर/छोटे स्तरों का उपयोग न करें।
  • यदि आपको छोटा मॉडल उपयोग करना ही हो, तो प्रभाव क्षेत्र कम करें: केवल-पढ़ने योग्य टूल, मजबूत सैंडबॉक्सिंग, न्यूनतम फ़ाइल सिस्टम पहुँच, सख्त अनुमतिसूचियाँ। सभी सत्रों के लिए सैंडबॉक्सिंग सक्षम करें और जब तक इनपुट कड़ाई से नियंत्रित न हों, web_search/web_fetch/browser अक्षम रखें।
  • विश्वसनीय इनपुट और बिना टूल वाले केवल-चैट व्यक्तिगत सहायकों के लिए छोटे मॉडल आम तौर पर ठीक हैं।

बाहरी सामग्री और अविश्वसनीय-इनपुट रैपिंग

OpenResponses input_file टेक्स्ट को अब भी अविश्वसनीय बाहरी सामग्री के रूप में इंजेक्ट किया जाता है, भले ही Gateway उसे स्थानीय रूप से डीकोड करता हो - ब्लॉक में <<&lt;EXTERNAL_UNTRUSTED_CONTENT ...&gt;>> सीमा मार्कर और Source: External मेटाडेटा होता है (इस पथ में अन्य स्थानों पर उपयोग किया जाने वाला लंबा SECURITY NOTICE: बैनर शामिल नहीं है)। यही मार्कर-आधारित रैपिंग तब भी लागू होती है, जब मीडिया-समझ संलग्न दस्तावेज़ों से टेक्स्ट निकालकर उसे मीडिया प्रॉम्प्ट में जोड़ती है।

OpenClaw रैप की गई बाहरी सामग्री और मेटाडेटा से सामान्य स्वयं-होस्ट किए गए LLM चैट-टेम्पलेट विशेष-टोकन लिटरल (Qwen/ChatML, Llama, Gemma, Mistral, Phi, GPT-OSS भूमिका/टर्न टोकन) भी मॉडल तक पहुँचने से पहले हटा देता है। स्वयं-होस्ट किए गए OpenAI-संगत बैकएंड (vLLM, SGLang, TGI, LM Studio, कस्टम Hugging Face टोकनाइज़र स्टैक) कभी-कभी उपयोगकर्ता सामग्री के भीतर <|im_start|> या <|start_header_id|> जैसे लिटरल स्ट्रिंग को संरचनात्मक चैट-टेम्पलेट टोकन के रूप में टोकनाइज़ करते हैं; इस सैनिटाइज़ेशन के बिना, फ़ेच किए गए पेज, ईमेल बॉडी या फ़ाइल-सामग्री टूल आउटपुट में मौजूद अविश्वसनीय टेक्स्ट एक कृत्रिम assistant/system भूमिका सीमा बना सकता है। सैनिटाइज़ेशन बाहरी-सामग्री रैपिंग परत पर होता है, इसलिए यह फ़ेच/रीड टूल और इनबाउंड चैनल सामग्री में समान रूप से लागू होता है। होस्टेड प्रदाता (OpenAI, Anthropic) पहले से अपना अनुरोध-पक्ष सैनिटाइज़ेशन लागू करते हैं; बाहरी-सामग्री रैपिंग सक्षम रखें और उपलब्ध होने पर विशेष टोकन को विभाजित/एस्केप करने वाली बैकएंड सेटिंग को प्राथमिकता दें।

आउटबाउंड मॉडल प्रतिक्रियाओं में एक अलग सैनिटाइज़र होता है, जो अंतिम चैनल डिलीवरी सीमा पर उपयोगकर्ता को दिखाई देने वाले उत्तरों से लीक हुए <tool_call>, <function_calls>, <system-reminder>, <previous_response> और इसी तरह के आंतरिक स्कैफ़ोल्डिंग को हटा देता है।

यह dmPolicy, अनुमतिसूचियों, exec अनुमोदनों, सैंडबॉक्सिंग या contextVisibility का स्थान नहीं लेता - यह केवल टोकनाइज़र-परत के एक विशिष्ट बायपास को बंद करता है।

बायपास फ़्लैग (प्रोडक्शन में बंद रखें)

  • hooks.mappings[].allowUnsafeExternalContent
  • hooks.gmail.allowUnsafeExternalContent
  • Cron पेलोड फ़ील्ड allowUnsafeExternalContent

केवल सीमित दायरे वाली डीबगिंग के लिए अस्थायी रूप से सक्षम करें; सक्षम होने पर उस एजेंट को अलग रखें (सैंडबॉक्स + न्यूनतम टूल + समर्पित सत्र नेमस्पेस)।

हुक पेलोड तब भी अविश्वसनीय सामग्री होते हैं, जब डिलीवरी आपके नियंत्रण वाले सिस्टम से आती है (मेल/दस्तावेज़/वेब सामग्री में प्रॉम्प्ट इंजेक्शन हो सकता है)। कमज़ोर मॉडल टियर इस जोखिम को बढ़ाते हैं - हुक-संचालित ऑटोमेशन के लिए, मज़बूत आधुनिक मॉडल टियर को प्राथमिकता दें और टूल नीति को सख्त रखें (tools.profile: "messaging" या उससे अधिक सख्त), साथ ही जहाँ संभव हो वहाँ सैंडबॉक्सिंग का उपयोग करें।

समूहों में रीजनिंग और विस्तृत आउटपुट

/reasoning, /verbose और /trace ऐसे आंतरिक रीजनिंग, टूल आउटपुट या Plugin डायग्नोस्टिक्स उजागर कर सकते हैं जो सार्वजनिक चैनल के लिए अभिप्रेत नहीं हैं - इनमें टूल आर्ग्युमेंट, URL, Plugin डायग्नोस्टिक्स और मॉडल द्वारा देखा गया डेटा शामिल हो सकता है। इन्हें सार्वजनिक कक्षों में अक्षम रखें; केवल विश्वसनीय DM या कड़े नियंत्रण वाले कक्षों में सक्षम करें।

कमांड प्राधिकरण

स्लैश कमांड और डायरेक्टिव केवल अधिकृत प्रेषकों के लिए स्वीकार किए जाते हैं, जिन्हें चैनल अनुमतिसूचियों/पेयरिंग और commands.useAccessGroups से निर्धारित किया जाता है (कॉन्फ़िगरेशन और स्लैश कमांड देखें)। यदि किसी चैनल की अनुमतिसूची खाली है या उसमें "*" शामिल है, तो उस चैनल के लिए कमांड प्रभावी रूप से सभी के लिए खुले होते हैं।

/exec अधिकृत ऑपरेटरों के लिए केवल सत्र की सुविधा है - यह कॉन्फ़िग नहीं लिखता या अन्य सत्रों को नहीं बदलता।

कंट्रोल प्लेन टूल

दो बिल्ट-इन टूल कंट्रोल-प्लेन के लिए संवेदनशील बने रहते हैं:

  • gateway, config.schema.lookup / config.get के साथ कॉन्फ़िग पढ़ता है। यह कॉन्फ़िग नहीं लिख सकता, OpenClaw को अपडेट नहीं कर सकता या Gateway को पुनः आरंभ नहीं कर सकता।
  • cron ऐसे शेड्यूल किए गए जॉब बनाता है जो मूल चैट/कार्य समाप्त होने के बाद भी चलते रहते हैं।

gateway टूल केवल स्वामी के लिए रहता है, क्योंकि कॉन्फ़िग रीड से सीक्रेट और होस्ट टोपोलॉजी उजागर हो सकते हैं। एजेंट स्थायी कॉन्फ़िग या लाइफ़साइकल बदलावों का अनुरोध openclaw डेलिगेशन टूल के माध्यम से करते हैं; OpenClaw उन्हें टाइप किए गए ऑपरेशन में मैप करता है और लागू करने से पहले मानव अनुमोदन आवश्यक करता है। OpenClaw सेटअप एजेंट देखें।

अविश्वसनीय सामग्री संभालने वाले किसी भी एजेंट/सतह के लिए, इन्हें डिफ़ॉल्ट रूप से अस्वीकार करें:

json5
{  tools: {    deny: ["gateway", "cron", "sessions_spawn", "sessions_send"],  },}

commands.restart=false, /restart और बाहरी SIGUSR1 पुनः आरंभ अनुरोधों को अक्षम करता है। gateway एजेंट टूल में पुनः आरंभ की कोई कार्रवाई नहीं है।

Node निष्पादन (system.run)

यदि कोई macOS Node पेयर किया गया है, तो Gateway उस पर system.run इनवोक कर सकता है - यह उस Mac पर रिमोट कोड निष्पादन है।

  • Node पेयरिंग आवश्यक है (अनुमोदन + टोकन)। पेयरिंग Node की पहचान/विश्वास और टोकन जारी करना स्थापित करती है; यह प्रति-कमांड अनुमोदन सतह नहीं है।
  • Gateway, gateway.nodes.allowCommands / denyCommands के माध्यम से एक मोटी वैश्विक Node कमांड नीति लागू करता है। denyCommands केवल सटीक Node कमांड नामों से मेल खाता है (उदाहरण के लिए system.run), कमांड पेलोड के भीतर शेल टेक्स्ट से नहीं - अलग कमांड सूची विज्ञापित करने वाला पुनः कनेक्ट होता Node अपने-आप में भेद्यता नहीं है, यदि Gateway की वैश्विक नीति और Node के अपने exec अनुमोदन अब भी सीमा लागू करते हैं।
  • प्रति-Node system.run नीति, Node की अपनी exec अनुमोदन फ़ाइल (exec.approvals.node.*) है, जिसे Mac पर Settings -> Exec approvals (security + ask + allowlist) के माध्यम से नियंत्रित किया जाता है; यह Gateway की वैश्विक कमांड-ID नीति से अधिक सख्त या अधिक ढीली हो सकती है।
  • security="full" और ask="off" चलाने वाला Node डिफ़ॉल्ट विश्वसनीय-ऑपरेटर मॉडल का पालन करता है - यह अपेक्षित व्यवहार है, बग नहीं, जब तक आपके डिप्लॉयमेंट को अधिक सख्त रुख की आवश्यकता न हो।
  • अनुमोदन मोड सटीक अनुरोध संदर्भ और जहाँ संभव हो, एक ठोस स्थानीय स्क्रिप्ट/फ़ाइल ऑपरेंड से बँधता है। यदि OpenClaw किसी इंटरप्रेटर/रनटाइम कमांड के लिए ठीक एक प्रत्यक्ष स्थानीय फ़ाइल की पहचान नहीं कर सकता, तो पूर्ण सिमैंटिक कवरेज का वादा करने के बजाय अनुमोदन-समर्थित निष्पादन अस्वीकार कर दिया जाता है।
  • host=node के लिए, अनुमोदन-समर्थित रन एक कैनॉनिकल तैयार systemRunPlan भी संग्रहीत करते हैं; बाद में अनुमोदित फ़ॉरवर्ड उसी संग्रहीत योजना का पुनः उपयोग करते हैं, और Gateway सत्यापन अनुमोदन अनुरोध बनाए जाने के बाद कमांड/cwd/सत्र संदर्भ में कॉलर के बदलावों को अस्वीकार करता है।
  • रिमोट निष्पादन को पूरी तरह अक्षम करने के लिए: सुरक्षा को deny पर सेट करें और उस Mac की Node पेयरिंग हटा दें।

डायनेमिक Skills (वॉचर / रिमोट Node)

OpenClaw सत्र के बीच में Skills सूची को रीफ़्रेश कर सकता है: SKILL.md बदलने पर Skills वॉचर अगले एजेंट टर्न में स्नैपशॉट अपडेट करता है, और macOS Node कनेक्ट करने से केवल macOS वाली Skills पात्र हो सकती हैं (बिन प्रोबिंग के आधार पर)। Skills फ़ोल्डर को विश्वसनीय कोड मानें और यह सीमित करें कि उन्हें कौन संशोधित कर सकता है।

Plugins

Plugins, Gateway के साथ इन-प्रोसेस चलते हैं - उन्हें विश्वसनीय कोड मानें।

  • केवल विश्वसनीय स्रोतों से इंस्टॉल करें; स्पष्ट plugins.allow अनुमतिसूचियों को प्राथमिकता दें; सक्षम करने से पहले Plugin कॉन्फ़िग की समीक्षा करें; Plugin बदलावों के बाद Gateway को पुनः आरंभ करें।
  • Plugins को इंस्टॉल/अपडेट करने से निष्पादन योग्य कोड चलता है:
    • इंस्टॉल पथ सक्रिय Plugin इंस्टॉल रूट के अंतर्गत प्रति-Plugin डायरेक्टरी है।
    • ClawHub पैकेज और OpenClaw के बंडल किए गए/आधिकारिक कैटलॉग विश्वसनीय स्रोत हैं। कोई नया मनमाना npm, npm-pack:, git, स्थानीय पथ/आर्काइव या मार्केटप्लेस स्रोत इंस्टॉल से पहले चेतावनी देता है; गैर-इंटरैक्टिव इंस्टॉल के लिए उस स्रोत की समीक्षा और उस पर विश्वास करने के बाद --force आवश्यक है। --force उद्गम की पुष्टि करता है और ओवरराइट की अनुमति देता है; यह security.installPolicy या शेष इंस्टॉल सुरक्षा जाँचों को बायपास नहीं करता। अपडेट पहले से चुने गए स्रोत का पुनः उपयोग करते हैं।
    • OpenClaw इंस्टॉल/अपडेट के दौरान बिल्ट-इन स्थानीय खतरनाक-कोड ब्लॉकिंग नहीं चलाता। ऑपरेटर-स्वामित्व वाले स्थानीय अनुमति/ब्लॉक निर्णयों के लिए security.installPolicy और डायग्नोस्टिक स्कैनिंग के लिए openclaw security audit --deep का उपयोग करें।
    • npm और git Plugin इंस्टॉल केवल स्पष्ट इंस्टॉल/अपडेट प्रवाह के दौरान पैकेज-मैनेजर निर्भरता अभिसरण चलाते हैं। स्थानीय पथ और आर्काइव को स्व-निहित पैकेज माना जाता है; OpenClaw उन्हें npm install चलाए बिना कॉपी/रेफ़रेंस करता है।
    • पिन किए गए सटीक संस्करणों (@scope/pkg@1.2.3) को प्राथमिकता दें और सक्षम करने से पहले अनपैक किए गए कोड का निरीक्षण करें।
    • --dangerously-force-unsafe-install अप्रचलित है और अब इंस्टॉल/अपडेट व्यवहार नहीं बदलता।
    • security.installPolicy ऑपरेटरों को Skills और Plugin इंस्टॉल के लिए होस्ट-विशिष्ट अनुमति/ब्लॉक निर्णय लेने हेतु एक विश्वसनीय स्थानीय कमांड चलाने देता है। यह स्रोत सामग्री स्टेज होने के बाद लेकिन इंस्टॉल जारी रहने से पहले चलता है, ClawHub Skills पर भी लागू होता है और अप्रचलित असुरक्षित फ़्लैग द्वारा बायपास नहीं होता।

विवरण: Plugins

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

समर्पित दस्तावेज़: सैंडबॉक्सिंग

दो पूरक दृष्टिकोण:

  • Docker में पूरा Gateway (कंटेनर सीमा): Docker
  • टूल सैंडबॉक्स (agents.defaults.sandbox; होस्ट Gateway + सैंडबॉक्स-पृथक टूल; Docker डिफ़ॉल्ट बैकएंड है): सैंडबॉक्सिंग

सैंडबॉक्स के भीतर एजेंट वर्कस्पेस पहुँच (agents.defaults.sandbox.workspaceAccess):

  • "none" (डिफ़ॉल्ट): टूल को ~/.openclaw/sandboxes के अंतर्गत सैंडबॉक्स वर्कस्पेस दिखाई देता है; एजेंट वर्कस्पेस तक पहुँच प्रतिबंधित है।
  • "ro": एजेंट वर्कस्पेस को /agent पर केवल-पढ़ने योग्य रूप में माउंट करता है (write/edit/apply_patch को अक्षम करता है)।
  • "rw": एजेंट वर्कस्पेस को /workspace पर पढ़ने/लिखने योग्य रूप में माउंट करता है।

अतिरिक्त sandbox.docker.binds का सत्यापन सामान्यीकृत, कैनॉनिकलाइज़ किए गए स्रोत पथों के विरुद्ध किया जाता है। अवरुद्ध-पथ अस्वीकृतिसूची में /etc, /private/etc, /proc, /sys, /dev, /root, /boot, और वे डायरेक्टरी शामिल हैं जिनमें सामान्यतः Docker सॉकेट होता है या उसका उपनाम होता है (उनके अंतर्गत /run, /var/run और docker.sock), साथ ही HOME क्रेडेंशियल उपपथ (.aws, .cargo, .config, .docker, .gnupg, .netrc, .npm, .ssh)। पैरेंट-सिमलिंक तरकीबों और कैनॉनिकल होम उपनामों को मौजूदा पूर्वजों के माध्यम से रिज़ॉल्व करके दोबारा जाँचा जाता है, इसलिए यदि वे किसी अवरुद्ध रूट में रिज़ॉल्व होते हैं तो वे अब भी सुरक्षित रूप से विफल होते हैं।

उप-एजेंट डेलिगेशन सुरक्षा-सीमा

यदि आप सत्र टूल की अनुमति देते हैं, तो डेलिगेट किए गए उप-एजेंट रन को एक अन्य सीमा निर्णय मानें:

  • जब तक एजेंट को वास्तव में डेलिगेशन की आवश्यकता न हो, sessions_spawn को अस्वीकार करें।
  • agents.defaults.subagents.allowAgents और किसी भी प्रति-एजेंट agents.list[].subagents.allowAgents ओवरराइड को ज्ञात-सुरक्षित लक्ष्य एजेंटों तक सीमित रखें।
  • उन वर्कफ़्लो के लिए जिन्हें सैंडबॉक्स में ही रहना आवश्यक है, sessions_spawn को sandbox: "require" के साथ कॉल करें (डिफ़ॉल्ट "inherit" है); लक्ष्य चाइल्ड रनटाइम सैंडबॉक्स में न होने पर "require" तुरंत विफल होता है।

केवल-पढ़ने योग्य मोड

agents.defaults.sandbox.workspaceAccess: "ro" (या वर्कस्पेस तक कोई पहुँच न देने के लिए "none") को उन टूल अनुमति/अस्वीकृति सूचियों के साथ मिलाकर केवल-पढ़ने योग्य प्रोफ़ाइल बनाएँ जो write, edit, apply_patch, exec, process आदि को ब्लॉक करती हैं।

  • tools.exec.applyPatch.workspaceOnly: true (डिफ़ॉल्ट): सैंडबॉक्सिंग बंद होने पर भी apply_patch को कार्यक्षेत्र डायरेक्टरी के बाहर लिखने/हटाने से रोकता है। false केवल तभी सेट करें, जब आप जानबूझकर चाहते हों कि apply_patch कार्यक्षेत्र के बाहर की फ़ाइलों को छुए।
  • tools.fs.workspaceOnly: true (वैकल्पिक): read/write/edit/apply_patch पथों और नेटिव प्रॉम्प्ट इमेज के स्वचालित-लोड पथों को कार्यक्षेत्र डायरेक्टरी तक सीमित करता है।
  • फ़ाइल सिस्टम रूट संकरे रखें—एजेंट/सैंडबॉक्स कार्यक्षेत्रों के लिए अपनी होम डायरेक्टरी जैसे व्यापक रूट से बचें, क्योंकि इससे संवेदनशील स्थानीय फ़ाइलें (उदाहरण के लिए ~/.openclaw के अंतर्गत स्थिति/कॉन्फ़िगरेशन) फ़ाइल सिस्टम टूल के सामने उजागर हो सकती हैं।

प्रति-एजेंट पहुँच प्रोफ़ाइल (मल्टी-एजेंट)

हर एजेंट की अपनी सैंडबॉक्स + टूल नीति हो सकती है: पूर्ण पहुँच, केवल-पढ़ने की पहुँच, या कोई पहुँच नहीं। वरीयता नियमों के लिए मल्टी-एजेंट सैंडबॉक्स और टूल देखें।

सामान्य पैटर्न: निजी एजेंट (पूर्ण पहुँच, कोई सैंडबॉक्स नहीं), परिवार/कार्य एजेंट (सैंडबॉक्सयुक्त + केवल-पढ़ने वाले टूल), सार्वजनिक एजेंट (सैंडबॉक्सयुक्त + कोई फ़ाइल सिस्टम/शेल टूल नहीं)।

पूर्ण पहुँच (कोई सैंडबॉक्स नहीं)

json5
{  agents: {    list: [      { id: "personal", workspace: "~/.openclaw/workspace-personal", sandbox: { mode: "off" } },    ],  },}

केवल-पढ़ने वाले टूल + केवल-पढ़ने योग्य कार्यक्षेत्र

json5
{  agents: {    list: [      {        id: "family",        workspace: "~/.openclaw/workspace-family",        sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro" },        tools: {          allow: ["read"],          deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],        },      },    ],  },}

कोई फ़ाइल सिस्टम/शेल पहुँच नहीं (प्रदाता संदेश सेवा अनुमत)

json5
{  agents: {    list: [      {        id: "public",        workspace: "~/.openclaw/workspace-public",        sandbox: { mode: "all", scope: "agent", workspaceAccess: "none" },        tools: {          // सत्र टूल ट्रांसक्रिप्ट डेटा प्रकट कर सकते हैं। डिफ़ॉल्ट दायरा वर्तमान + उत्पन्न किए गए सत्र हैं;          // रीड में परिवेशी समूह जागरूकता के माध्यम से देखे जाने वाले समान-एजेंट समूह भी शामिल होते हैं।          // उन देखे गए सत्रों को बाहर रखने के लिए visibility: "self" का उपयोग करें।          sessions: { visibility: "tree" }, // self | tree | agent | all          allow: [            "sessions_list",            "sessions_history",            "sessions_send",            "sessions_spawn",            "session_status",            "discord",            "slack",            "telegram",            "whatsapp",          ],          deny: [            "apply_patch",            "browser",            "canvas",            "cron",            "edit",            "exec",            "gateway",            "image",            "nodes",            "process",            "read",            "write",          ],        },      },    ],  },}

ब्राउज़र नियंत्रण के जोखिम

ब्राउज़र नियंत्रण सक्षम करने से मॉडल को एक वास्तविक ब्राउज़र मिलता है। यदि उस प्रोफ़ाइल में पहले से लॉग-इन सत्र हैं, तो मॉडल उन खातों और डेटा तक पहुँच सकता है—ब्राउज़र प्रोफ़ाइल को संवेदनशील स्थिति मानें।

  • एजेंट के लिए एक समर्पित प्रोफ़ाइल को प्राथमिकता दें (डिफ़ॉल्ट openclaw प्रोफ़ाइल); अपनी निजी दैनिक-उपयोग वाली प्रोफ़ाइल से बचें।
  • सैंडबॉक्सयुक्त एजेंटों के लिए होस्ट ब्राउज़र नियंत्रण तब तक अक्षम रखें, जब तक आप उन पर भरोसा न करते हों।
  • स्वतंत्र लूपबैक ब्राउज़र नियंत्रण API केवल साझा-गुप्त प्रमाणीकरण (Gateway टोकन बेयरर प्रमाणीकरण या Gateway पासवर्ड) स्वीकार करता है—यह विश्वसनीय-प्रॉक्सी या Tailscale Serve पहचान हेडर का उपयोग नहीं करता।
  • ब्राउज़र डाउनलोड को अविश्वसनीय इनपुट मानें; एक पृथक डाउनलोड डायरेक्टरी को प्राथमिकता दें।
  • यदि संभव हो, तो एजेंट प्रोफ़ाइल में ब्राउज़र सिंक/पासवर्ड मैनेजर अक्षम करें।
  • रिमोट Gateway के लिए, "ब्राउज़र नियंत्रण" उस प्रोफ़ाइल की पहुँच के अंतर्गत आने वाली हर चीज़ के लिए "ऑपरेटर पहुँच" के बराबर है।
  • Gateway और Node होस्ट को केवल टेलनेट तक सीमित रखें; ब्राउज़र नियंत्रण पोर्ट को LAN या सार्वजनिक इंटरनेट पर उजागर करने से बचें।
  • आवश्यक न होने पर ब्राउज़र प्रॉक्सी रूटिंग अक्षम करें (gateway.nodes.browser.mode="off")।
  • Chrome MCP का मौजूदा-सत्र मोड "अधिक सुरक्षित" नहीं है—वह उस होस्ट Chrome प्रोफ़ाइल की पहुँच के अंतर्गत आने वाली हर जगह आपकी ओर से कार्य कर सकता है।
  • ब्राउज़र मशीन पर एक Node होस्ट चलाएँ और जब Gateway ब्राउज़र से रिमोट हो, तब Gateway को ब्राउज़र क्रियाओं की प्रॉक्सी करने दें (ब्राउज़र टूल देखें); Node पेयरिंग को एडमिन पहुँच जैसा मानें, Gateway और Node होस्ट को एक ही टेलनेट पर रखें, और रिले/नियंत्रण पोर्ट को LAN, सार्वजनिक इंटरनेट या Tailscale Funnel पर उजागर करने से बचें।

ब्राउज़र SSRF नीति (डिफ़ॉल्ट रूप से सख्त)

निजी/आंतरिक गंतव्य तब तक अवरुद्ध रहते हैं, जब तक आप उन्हें स्पष्ट रूप से सक्षम नहीं करते।

  • डिफ़ॉल्ट: browser.ssrfPolicy.dangerouslyAllowPrivateNetwork सेट नहीं होता, इसलिए निजी/आंतरिक/विशेष-उपयोग वाले गंतव्य अवरुद्ध रहते हैं। पुराना उपनाम allowPrivateNetwork अभी भी स्वीकार किया जाता है।
  • सक्रिय करना: उन गंतव्यों को अनुमति देने के लिए dangerouslyAllowPrivateNetwork: true सेट करें।
  • सख्त मोड में, स्पष्ट अपवादों के लिए hostnameAllowlist (*.example.com जैसे पैटर्न) और allowedHostnames (सटीक होस्ट अपवाद, जिनमें localhost जैसे अन्यथा-अवरुद्ध नाम शामिल हैं) का उपयोग करें।
  • प्रत्यक्ष नेविगेशन अनुरोधों की पहले से जाँच की जाती है। कार्रवाई और कार्रवाई के बाद की सीमित अनुग्रह अवधि के दौरान, संरक्षित Playwright इंटरैक्शन (क्लिक, निर्देशांक क्लिक, होवर, ड्रैग, स्क्रॉल, चयन, कुंजी दबाना, टाइप करना, फ़ॉर्म भरना और मूल्यांकन) HTTP अनुरोध बाइट भेजे जाने से पहले नीति द्वारा अस्वीकृत शीर्ष-स्तरीय और सबफ़्रेम दस्तावेज़ लोड को रोकते हैं, फिर अंतिम http(s) URL की यथासंभव दोबारा जाँच करते हैं।
  • हर नए प्रबंधित Chrome लॉन्च से पहले, OpenClaw यथासंभव नेटवर्क पूर्वानुमान अक्षम करता है और उन अस्वीकृत लोड के लिए Chromium के देखे गए अनुमानित प्रीकनेक्ट को रोकता है। यह बहुस्तरीय सुरक्षा है, नीति की सीमा नहीं: नियंत्रण-सेवा पुनरारंभों के बीच पुनः उपयोग किया गया ब्राउज़र और अन्य ब्राउज़र बैकएंड इस कठोरता को साझा न कर सकते हैं। पेज रूटिंग अनुरोध-स्तरीय अवरोधन ही रहती है, नेटवर्क फ़ायरवॉल नहीं: रीडायरेक्ट चरण, पॉपअप का पहला अनुरोध, Service Worker ट्रैफ़िक, सीमित सुरक्षा अवधि के बाद चलने वाला पेज कोड और कुछ बैकग्राउंड/उप-संसाधन पथ इसे बायपास कर सकते हैं। अंतिम-URL जाँच पहचान/क्वारंटीन सुरक्षा बनी रहती है; पूर्ण रोकथाम के लिए स्वामी-पक्षीय निर्गमन पृथक्करण या नीति लागू करने वाली प्रॉक्सी आवश्यक है।
json5
{  browser: {    ssrfPolicy: {      dangerouslyAllowPrivateNetwork: false,      hostnameAllowlist: ["*.example.com", "example.com"],      allowedHostnames: ["localhost"],    },  },}

नेटवर्क अनावरण

बाइंड, पोर्ट, फ़ायरवॉल

Gateway एक पोर्ट पर WebSocket + HTTP को मल्टीप्लेक्स करता है (डिफ़ॉल्ट 18789; कॉन्फ़िगरेशन/फ़्लैग/परिवेश: gateway.port, --port, OPENCLAW_GATEWAY_PORT)। उस HTTP सतह में Control UI (SPA एसेट, डिफ़ॉल्ट आधार पथ /) और कैनवस होस्ट (/__openclaw__/canvas और /__openclaw__/a2ui—मनमाना HTML/JS; सामान्य ब्राउज़र में लोड किए जाने पर इसे अविश्वसनीय सामग्री मानें; इसे अविश्वसनीय नेटवर्क/उपयोगकर्ताओं के सामने उजागर न करें और विशेषाधिकार-प्राप्त वेब सतहों के साथ कोई ओरिजिन साझा न करें) शामिल हैं।

gateway.bind नियंत्रित करता है कि Gateway कहाँ सुनता है:

  • "loopback" (डिफ़ॉल्ट): केवल स्थानीय क्लाइंट कनेक्ट कर सकते हैं।
  • "lan", "tailnet", "custom": आक्रमण सतह का विस्तार करते हैं। केवल Gateway प्रमाणीकरण (साझा टोकन/पासवर्ड या सही ढंग से कॉन्फ़िगर की गई विश्वसनीय प्रॉक्सी) और वास्तविक फ़ायरवॉल के साथ उपयोग करें।

सामान्य नियम: LAN बाइंड की अपेक्षा Tailscale Serve को प्राथमिकता दें (Serve Gateway को लूपबैक पर रखता है और Tailscale पहुँच संभालता है); यदि LAN से बाइंड करना आवश्यक हो, तो व्यापक रूप से पोर्ट-फ़ॉरवर्ड करने के बजाय पोर्ट को एक सीमित स्रोत-IP अनुमत-सूची तक फ़ायरवॉल करें; Gateway को 0.0.0.0 पर कभी भी अप्रमाणित रूप से उजागर न करें।

UFW के साथ Docker पोर्ट प्रकाशन

प्रकाशित कंटेनर पोर्ट (-p HOST:CONTAINER या Compose ports:) केवल होस्ट INPUT नियमों से नहीं, बल्कि Docker की फ़ॉरवर्डिंग शृंखलाओं से रूट होते हैं। DOCKER-USER में नियम लागू करें (Docker के स्वयं के स्वीकार नियमों से पहले मूल्यांकित); अधिकांश आधुनिक वितरण iptables-nft फ़्रंटएंड का उपयोग करते हैं, जो इन नियमों को nftables बैकएंड पर भी लागू करता है।

bash
# /etc/ufw/after.rules (append as its own *filter section)*filter:DOCKER-USER - [0:0]-A DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN-A DOCKER-USER -s 127.0.0.0/8 -j RETURN-A DOCKER-USER -s 10.0.0.0/8 -j RETURN-A DOCKER-USER -s 172.16.0.0/12 -j RETURN-A DOCKER-USER -s 192.168.0.0/16 -j RETURN-A DOCKER-USER -s 100.64.0.0/10 -j RETURN-A DOCKER-USER -p tcp --dport 80 -j RETURN-A DOCKER-USER -p tcp --dport 443 -j RETURN-A DOCKER-USER -m conntrack --ctstate NEW -j DROP-A DOCKER-USER -j RETURNCOMMIT

IPv6 की अलग तालिकाएँ होती हैं—यदि Docker IPv6 सक्षम है, तो /etc/ufw/after6.rules में मेल खाती नीति जोड़ें। इंटरफ़ेस नामों (eth0) को हार्डकोड करने से बचें, क्योंकि वे VPS इमेज (ens3, enp*, आदि) के बीच बदलते हैं और असंगति आपके अस्वीकार नियम को चुपचाप छोड़ सकती है।

bash
ufw reloadiptables -S DOCKER-USERip6tables -S DOCKER-USERnmap -sT -p 1-65535 <public-ip> --open

अपेक्षित बाहरी पोर्ट केवल वही होने चाहिए जिन्हें आप जानबूझकर उजागर करते हैं (अधिकांश सेटअप के लिए: SSH + रिवर्स प्रॉक्सी पोर्ट)।

mDNS/Bonjour खोज

जब बंडल किया गया bonjour Plugin सक्षम होता है, तो Gateway स्थानीय डिवाइस खोज के लिए mDNS (_openclaw-gw._tcp, पोर्ट 5353) के माध्यम से अपनी उपस्थिति प्रसारित करता है। पूर्ण मोड में ऐसे TXT रिकॉर्ड शामिल होते हैं जो परिचालन विवरण उजागर करते हैं: cliPath (उपयोगकर्ता नाम और इंस्टॉल स्थान प्रकट करने वाला फ़ाइल सिस्टम पथ), sshPort (SSH उपलब्धता की घोषणा करता है), displayName/lanHost (होस्टनाम जानकारी)। अवसंरचना विवरण प्रसारित करने से LAN की टोह लेना आसान हो जाता है।

  • जब तक LAN खोज आवश्यक न हो, Bonjour अक्षम रखें—यह macOS होस्ट पर स्वतः प्रारंभ होता है और अन्यत्र इसे स्पष्ट रूप से सक्षम करना पड़ता है; प्रत्यक्ष Gateway URL, टेलनेट, SSH या वाइड-एरिया DNS-SD स्थानीय मल्टीकास्ट से बचते हैं।

  • न्यूनतम मोड (Bonjour सक्षम होने पर डिफ़ॉल्ट, उजागर Gateway के लिए अनुशंसित) संवेदनशील फ़ील्ड छोड़ देता है:

    json5
    { discovery: { mdns: { mode: "minimal" } } }
  • बंद Plugin को सक्षम रखते हुए स्थानीय खोज को रोकता है:

    json5
    { discovery: { mdns: { mode: "off" } } }
  • पूर्ण मोड (स्पष्ट रूप से सक्षम करना आवश्यक) में cliPath + sshPort शामिल होते हैं:

    json5
    { discovery: { mdns: { mode: "full" } } }
  • या कॉन्फ़िगरेशन बदले बिना mDNS अक्षम करने के लिए OPENCLAW_DISABLE_BONJOUR=1 सेट करें।

न्यूनतम मोड में Gateway role, gatewayPort, transport प्रसारित करता है, लेकिन cliPath/sshPort छोड़ देता है; जिन ऐप्स को CLI पथ चाहिए, वे इसके बजाय उसे प्रमाणित WebSocket कनेक्शन पर प्राप्त कर सकते हैं।

Gateway WebSocket प्रमाणीकरण

Gateway प्रमाणीकरण डिफ़ॉल्ट रूप से आवश्यक है—कोई वैध प्रमाणीकरण पथ कॉन्फ़िगर न होने पर Gateway WebSocket कनेक्शन अस्वीकार करता है (विफलता पर बंद)। ऑनबोर्डिंग डिफ़ॉल्ट रूप से एक टोकन बनाता है (लूपबैक के लिए भी), इसलिए स्थानीय क्लाइंट को प्रमाणीकरण करना आवश्यक है।

json5
{ gateway: { auth: { mode: "token", token: "your-token" } } }

openclaw doctor --generate-gateway-token आपके लिए एक टोकन बना सकता है।

wss:// का उपयोग करते समय रिमोट TLS को gateway.remote.tlsFingerprint के साथ पिन करें। प्लेनटेक्स्ट ws:// लूपबैक, निजी IP लिटरल, .local, और Tailnet *.ts.net gateway URL के लिए स्वीकार किया जाता है; अन्य विश्वसनीय निजी-DNS नामों के लिए, ब्रेक-ग्लास उपाय के रूप में क्लाइंट प्रक्रिया पर OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 सेट करें (केवल प्रक्रिया परिवेश में, किसी openclaw.json कुंजी के रूप में नहीं)। मोबाइल पेयरिंग और Android के मैन्युअल/स्कैन किए गए gateway मार्ग अधिक सख्त हैं: क्लियरटेक्स्ट केवल लूपबैक के लिए अनुमत है, जबकि निजी-LAN, लिंक-लोकल, .local, और बिना डॉट वाले होस्टनाम को TLS का उपयोग करना होगा, जब तक कि आप स्पष्ट रूप से विश्वसनीय निजी-नेटवर्क क्लियरटेक्स्ट पथ का विकल्प न चुनें।

प्रत्यक्ष स्थानीय लूपबैक कनेक्शन के लिए डिवाइस पेयरिंग स्वतः स्वीकृत होती है (साथ ही विश्वसनीय साझा-सीक्रेट सहायक प्रवाहों के लिए एक सीमित बैकएंड/कंटेनर-लोकल स्व-कनेक्शन पथ); Tailnet और LAN कनेक्शन, जिनमें Tailnet पते से उसी होस्ट के कनेक्शन भी शामिल हैं, रिमोट माने जाते हैं और उन्हें अब भी स्वीकृति चाहिए। 127.0.0.1 या 0.0.0.0 के अतिरिक्त कोई रिज़ॉल्व किया गया tailnet पता या custom पता एक अलग 127.0.0.1 लिसनर जोड़ता है; केवल उस स्थानीय लिसनर के कनेक्शन को लूपबैक अर्थवत्ता मिलती है। लूपबैक अनुरोध पर फ़ॉरवर्डेड-हेडर साक्ष्य उसे लूपबैक स्थानीयता के लिए अयोग्य बनाता है; मेटाडेटा-अपग्रेड की स्वतः स्वीकृति का दायरा सीमित है। Gateway पेयरिंग देखें।

प्रमाणीकरण मोड:

  • "token": साझा बियरर टोकन (अधिकांश सेटअप के लिए अनुशंसित)।
  • "password": इसे OPENCLAW_GATEWAY_PASSWORD के माध्यम से सेट करना बेहतर है।
  • "trusted-proxy": उपयोगकर्ताओं को प्रमाणित करने और हेडर के माध्यम से पहचान भेजने के लिए पहचान-जागरूक रिवर्स प्रॉक्सी पर भरोसा करें। विश्वसनीय प्रॉक्सी प्रमाणीकरण देखें।

रोटेशन चेकलिस्ट (टोकन/पासवर्ड): नया सीक्रेट जनरेट/सेट करें (gateway.auth.token या OPENCLAW_GATEWAY_PASSWORD); Gateway को पुनः प्रारंभ करें (या macOS ऐप को, यदि वह Gateway की निगरानी करता है); रिमोट क्लाइंट अपडेट करें (gateway.remote.token/.password); सत्यापित करें कि पुराने क्रेडेंशियल अब काम नहीं करते।

Tailscale Serve पहचान हेडर

जब gateway.auth.allowTailscale, true होता है (Serve के लिए डिफ़ॉल्ट), तब OpenClaw, Control UI/WebSocket प्रमाणीकरण के लिए Tailscale Serve पहचान हेडर tailscale-user-login स्वीकार करता है। यह स्थानीय Tailscale डेमन (tailscale whois) के माध्यम से x-forwarded-for पते को रिज़ॉल्व करके और उसे हेडर से मिलाकर पहचान सत्यापित करता है—यह केवल उन लूपबैक अनुरोधों के लिए सक्रिय होता है जिनमें Tailscale द्वारा डाले गए x-forwarded-for, x-forwarded-proto, और x-forwarded-host मौजूद हों। इस एसिंक्रोनस जाँच के लिए, उसी {scope, ip} के विफल प्रयासों को लिमिटर द्वारा विफलता दर्ज करने से पहले क्रमबद्ध किया जाता है, इसलिए एक Serve क्लाइंट से एक साथ होने वाले गलत पुनः प्रयास दूसरे प्रयास को तुरंत लॉक आउट कर सकते हैं।

HTTP API एंडपॉइंट (/v1/*, /tools/invoke, /api/channels/*) Tailscale पहचान-हेडर प्रमाणीकरण का उपयोग नहीं करते—वे gateway के कॉन्फ़िगर किए गए HTTP प्रमाणीकरण मोड का पालन करते हैं।

Gateway HTTP बियरर प्रमाणीकरण प्रभावी रूप से पूर्ण या शून्य ऑपरेटर पहुँच देता है। वे क्रेडेंशियल जो /v1/chat/completions, /v1/responses, /api/v1/admin/rpc जैसे plugin मार्गों, या /api/channels/* को कॉल कर सकते हैं, उस gateway के लिए पूर्ण-पहुँच ऑपरेटर सीक्रेट हैं: साझा-सीक्रेट बियरर प्रमाणीकरण पूर्ण डिफ़ॉल्ट ऑपरेटर स्कोप (operator.admin, operator.approvals, operator.pairing, operator.read, operator.talk.secrets, operator.write) और एजेंट टर्न के लिए स्वामी अर्थवत्ता पुनर्स्थापित करता है, और अधिक सीमित x-openclaw-scopes मान उस साझा-सीक्रेट पथ को कम नहीं करते। प्रति-अनुरोध स्कोप अर्थवत्ता केवल तब लागू होती है जब अनुरोध पहचान-युक्त मोड (विश्वसनीय प्रॉक्सी प्रमाणीकरण) या स्पष्ट रूप से प्रमाणीकरण-रहित निजी इनग्रेस से आता है; इन मोड में x-openclaw-scopes छोड़ देने पर सामान्य डिफ़ॉल्ट ऑपरेटर स्कोप सेट का उपयोग होता है, और स्कोप सीमित किए जाने पर x-openclaw-model जैसे स्वामी-स्तरीय हेडर के लिए operator.admin आवश्यक होता है। /tools/invoke और HTTP सत्र इतिहास एंडपॉइंट भी इसी साझा-सीक्रेट नियम का पालन करते हैं। इन क्रेडेंशियल को अविश्वसनीय कॉलर के साथ साझा न करें; प्रत्येक विश्वास सीमा के लिए अलग gateway को प्राथमिकता दें।

टोकन-रहित Serve प्रमाणीकरण यह मानता है कि gateway होस्ट स्वयं विश्वसनीय है—यह उसी होस्ट की दुर्भावनापूर्ण प्रक्रियाओं से सुरक्षा नहीं देता। यदि gateway होस्ट पर अविश्वसनीय स्थानीय कोड चल सकता है, तो allowTailscale अक्षम करें और स्पष्ट साझा-सीक्रेट प्रमाणीकरण (token या password) आवश्यक बनाएँ।

इन हेडर को अपने रिवर्स प्रॉक्सी से फ़ॉरवर्ड न करें। यदि आप gateway के आगे TLS समाप्त करते हैं या प्रॉक्सी लगाते हैं, तो allowTailscale अक्षम करें और इसके बजाय साझा-सीक्रेट प्रमाणीकरण या विश्वसनीय प्रॉक्सी प्रमाणीकरण का उपयोग करें।

Tailscale और वेब अवलोकन देखें।

रिवर्स प्रॉक्सी कॉन्फ़िगरेशन

nginx/Caddy/Traefik आदि के पीछे फ़ॉरवर्ड किए गए क्लाइंट IP को ठीक से संभालने के लिए gateway.trustedProxies सेट करें। जब Gateway किसी ऐसे पते से प्रॉक्सी हेडर का पता लगाता है जो trustedProxies में नहीं है, तो वह कनेक्शन को स्थानीय नहीं मानेगा; यदि gateway प्रमाणीकरण अक्षम है, तो वह कनेक्शन अस्वीकार कर दिया जाता है। यह प्रॉक्सी किए गए कनेक्शन को localhost से आया हुआ दिखने और स्वतः विश्वास प्राप्त करने से रोकता है।

trustedProxies, gateway.auth.mode: "trusted-proxy" को भी डेटा देता है, जो अधिक सख्त है: डिफ़ॉल्ट रूप से यह लूपबैक-स्रोत प्रॉक्सी पर सुरक्षित रूप से विफल होता है। उसी होस्ट के लूपबैक रिवर्स प्रॉक्सी स्थानीय-क्लाइंट पहचान और फ़ॉरवर्डेड-IP प्रबंधन के लिए trustedProxies का उपयोग कर सकते हैं, लेकिन trusted-proxy प्रमाणीकरण मोड को केवल तब संतुष्ट कर सकते हैं जब gateway.auth.trustedProxy.allowLoopback = true; अन्यथा टोकन/पासवर्ड प्रमाणीकरण का उपयोग करें।

yaml
gateway:  trustedProxies:    - "10.0.0.1" # रिवर्स प्रॉक्सी IP  allowRealIpFallback: false # डिफ़ॉल्ट false; केवल तभी सक्षम करें जब आपका प्रॉक्सी X-Forwarded-For प्रदान नहीं कर सकता  auth:    mode: password    password: ${OPENCLAW_GATEWAY_PASSWORD}

जब trustedProxies सेट होता है, तो Gateway क्लाइंट IP निर्धारित करने के लिए X-Forwarded-For का उपयोग करता है; X-Real-IP को तब तक अनदेखा किया जाता है जब तक gateway.allowRealIpFallback: true स्पष्ट रूप से सेट न हो। सुनिश्चित करें कि आपका प्रॉक्सी X-Forwarded-For/X-Real-IP में मान जोड़ने के बजाय उन्हें अधिलेखित करता है:

nginx
# सहीproxy_set_header X-Forwarded-For $remote_addr;proxy_set_header X-Real-IP $remote_addr; # गलत: अविश्वसनीय क्लाइंट द्वारा दिए गए मानों को सुरक्षित रखता/जोड़ता हैproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

विश्वसनीय प्रॉक्सी हेडर Node डिवाइस पेयरिंग को स्वतः विश्वसनीय नहीं बनाते—gateway.nodes.pairing.autoApproveCidrs एक अलग, डिफ़ॉल्ट रूप से अक्षम ऑपरेटर नीति है, और लूपबैक-स्रोत विश्वसनीय-प्रॉक्सी हेडर पथ Node की स्वतः स्वीकृति से बाहर रहते हैं, भले ही लूपबैक विश्वसनीय-प्रॉक्सी प्रमाणीकरण सक्षम हो (क्योंकि स्थानीय कॉलर उन हेडर की जालसाज़ी कर सकते हैं)।

HSTS और ओरिजिन संबंधी टिप्पणियाँ

  • OpenClaw का gateway मुख्यतः स्थानीय/लूपबैक उपयोग के लिए है। यदि आप रिवर्स प्रॉक्सी पर TLS समाप्त करते हैं, तो HSTS वहीं सेट करें।
  • यदि gateway स्वयं HTTPS समाप्त करता है, तो gateway.http.securityHeaders.strictTransportSecurity, OpenClaw प्रतिक्रियाओं से HSTS हेडर उत्सर्जित करता है।
  • गैर-लूपबैक Control UI परिनियोजन के लिए डिफ़ॉल्ट रूप से gateway.controlUi.allowedOrigins आवश्यक है; allowedOrigins: ["*"] एक स्पष्ट सभी-अनुमत नीति है, सुदृढ़ डिफ़ॉल्ट नहीं—कड़े नियंत्रण वाले स्थानीय परीक्षण के बाहर इससे बचें।
  • सामान्य लूपबैक छूट सक्षम होने पर भी लूपबैक पर ब्राउज़र-ओरिजिन प्रमाणीकरण विफलताएँ दर-सीमित रहती हैं, लेकिन लॉकआउट कुंजी एक साझा localhost बकेट के बजाय प्रत्येक सामान्यीकृत Origin मान के लिए अलग होती है।
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true, Host-हेडर ओरिजिन फ़ॉलबैक मोड सक्षम करता है; इसे ऑपरेटर द्वारा चुनी गई खतरनाक नीति मानें।
  • DNS रीबाइंडिंग और प्रॉक्सी-होस्ट हेडर व्यवहार को परिनियोजन सुदृढ़ीकरण संबंधी चिंता मानें; trustedProxies को कड़ा रखें और gateway को सीधे सार्वजनिक इंटरनेट पर उजागर करने से बचें।
  • विस्तृत परिनियोजन मार्गदर्शन: विश्वसनीय प्रॉक्सी प्रमाणीकरण

HTTP पर Control UI

डिवाइस पहचान जनरेट करने के लिए Control UI को सुरक्षित संदर्भ (HTTPS या localhost) चाहिए।

  • gateway.controlUi.allowInsecureAuth: स्थानीय संगतता टॉगल। localhost पर, पृष्ठ के असुरक्षित HTTP पर लोड होने की स्थिति में डिवाइस पहचान के बिना Control UI प्रमाणीकरण की अनुमति देता है। यह पेयरिंग जाँचों को बायपास नहीं करता और रिमोट (गैर-localhost) डिवाइस पहचान आवश्यकताओं को शिथिल नहीं करता। HTTPS (Tailscale Serve) को प्राथमिकता दें या UI को 127.0.0.1 पर खोलें।
  • gateway.controlUi.dangerouslyDisableDeviceAuth: केवल ब्रेक-ग्लास उपयोग के लिए; डिवाइस पहचान जाँचों को पूरी तरह अक्षम करता है। यह सुरक्षा में गंभीर कमी है; इसे तब तक बंद रखें जब तक आप सक्रिय रूप से डीबग न कर रहे हों और इसे शीघ्र वापस बदलने में सक्षम न हों।
  • इन फ़्लैग से अलग, सफल gateway.auth.mode: "trusted-proxy", डिवाइस पहचान के बिना ऑपरेटर Control UI सत्रों को प्रवेश दे सकता है—यह जानबूझकर किया गया प्रमाणीकरण-मोड व्यवहार है, कोई allowInsecureAuth शॉर्टकट नहीं, और यह Node-भूमिका वाले Control UI सत्रों तक विस्तृत नहीं होता।

allowInsecureAuth सक्षम होने पर openclaw security audit चेतावनी देता है।

असुरक्षित/खतरनाक फ़्लैग

openclaw security audit प्रत्येक सक्षम ज्ञात असुरक्षित/खतरनाक डीबग स्विच के लिए config.insecure_or_dangerous_flags उत्पन्न करता है (प्रत्येक फ़्लैग पर एक निष्कर्ष)। उत्पादन में इन्हें सेट न रखें। यदि ऑडिट दमन कॉन्फ़िगर किए गए हैं, तो मेल खाते निष्कर्षों के suppressedFindings में चले जाने पर भी security.audit.suppressions.active सक्रिय आउटपुट में बना रहता है।

आज ऑडिट द्वारा ट्रैक किए जाने वाले फ़्लैग
  • gateway.controlUi.allowInsecureAuth=true
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true
  • gateway.controlUi.dangerouslyDisableDeviceAuth=true
  • security.audit.suppressions configured (<count>)
  • hooks.gmail.allowUnsafeExternalContent=true
  • hooks.mappings[<index>].allowUnsafeExternalContent=true
  • tools.exec.applyPatch.workspaceOnly=false
  • plugins.entries.acpx.config.permissionMode=approve-all
कॉन्फ़िग स्कीमा में सभी dangerous*/dangerously* कुंजियाँ

Control UI और ब्राउज़र:

  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback
  • gateway.controlUi.dangerouslyDisableDeviceAuth
  • browser.ssrfPolicy.dangerouslyAllowPrivateNetwork

चैनल नाम-मिलान (बंडल किए गए और plugin चैनल; जहाँ लागू हो, प्रत्येक accounts.<accountId> के लिए भी):

  • channels.discord.dangerouslyAllowNameMatching
  • channels.googlechat.dangerouslyAllowNameMatching
  • channels.msteams.dangerouslyAllowNameMatching
  • channels.slack.dangerouslyAllowNameMatching
  • channels.irc.dangerouslyAllowNameMatching (plugin चैनल)
  • channels.mattermost.dangerouslyAllowNameMatching (plugin चैनल)
  • channels.synology-chat.dangerouslyAllowNameMatching (plugin चैनल)
  • channels.synology-chat.dangerouslyAllowInheritedWebhookPath (plugin चैनल)
  • channels.zalouser.dangerouslyAllowNameMatching (plugin चैनल)

नेटवर्क एक्सपोज़र:

  • channels.telegram.network.dangerouslyAllowPrivateNetwork (प्रत्येक खाते के लिए भी)

सैंडबॉक्स Docker (डिफ़ॉल्ट + प्रत्येक एजेंट के लिए):

  • agents.defaults.sandbox.docker.dangerouslyAllowReservedContainerTargets
  • agents.defaults.sandbox.docker.dangerouslyAllowExternalBindSources
  • agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin

परिनियोजन और होस्ट पर विश्वास

  • Gateway होस्ट पर पूर्ण-डिस्क एन्क्रिप्शन; यदि होस्ट साझा है, तो Gateway के लिए समर्पित OS उपयोगकर्ता खाते को प्राथमिकता दें।
  • प्रकाशित पैकेज निर्भरता लॉक: स्रोत चेकआउट pnpm-lock.yaml का उपयोग करते हैं; प्रकाशित openclaw npm पैकेज और OpenClaw के स्वामित्व वाले npm plugin पैकेजों में npm-shrinkwrap.json शामिल होता है, ताकि इंस्टॉलेशन के समय नया ग्राफ़ हल करने के बजाय रिलीज़ से समीक्षा किए गए ट्रांज़िटिव निर्भरता ग्राफ़ का उपयोग किया जाए। यह आपूर्ति-श्रृंखला सुदृढ़ीकरण और रिलीज़ पुनरुत्पादकता की सीमा है, सैंडबॉक्स नहीं—देखें npm shrinkwrap
  • सुरक्षित फ़ाइल संचालन: OpenClaw रूट-सीमित फ़ाइल एक्सेस, एटॉमिक राइट्स, आर्काइव निष्कर्षण, अस्थायी वर्कस्पेस और गुप्त फ़ाइल हेल्पर के लिए @openclaw/fs-safe का उपयोग करता है। वैकल्पिक POSIX Python हेल्पर डिफ़ॉल्ट रूप से बंद होता है; OPENCLAW_FS_SAFE_PYTHON_MODE=auto या require केवल तभी सेट करें, जब आपको अतिरिक्त fd-सापेक्ष म्यूटेशन सुदृढ़ीकरण चाहिए और आप Python रनटाइम का समर्थन कर सकते हैं। विवरण: सुरक्षित फ़ाइल संचालन
  • साझा Slack वर्कस्पेस का जोखिम: यदि Slack में हर कोई बॉट को संदेश भेज सकता है, तो मुख्य जोखिम प्रत्यायोजित टूल प्राधिकार है—कोई भी अनुमत प्रेषक एजेंट की नीति के भीतर टूल कॉल (exec, ब्राउज़र, नेटवर्क/फ़ाइल टूल) करवा सकता है; एक प्रेषक से आया प्रॉम्प्ट/सामग्री इंजेक्शन साझा स्थिति/डिवाइस/आउटपुट को प्रभावित कर सकता है; और यदि साझा एजेंट के पास संवेदनशील क्रेडेंशियल/फ़ाइलें हैं, तो कोई भी अनुमत प्रेषक टूल के उपयोग के माध्यम से संभावित रूप से डेटा बाहर निकलवा सकता है। टीम वर्कफ़्लो के लिए न्यूनतम टूल वाले अलग-अलग एजेंट/Gateway का उपयोग करें; निजी डेटा वाले एजेंटों को निजी रखें।
  • कंपनी-साझा एजेंट (स्वीकार्य पैटर्न): यह तब उचित है, जब एजेंट का उपयोग करने वाला हर व्यक्ति समान विश्वास सीमा में हो (उदाहरण के लिए, कंपनी की एक टीम) और एजेंट का दायरा सख्ती से व्यावसायिक हो। इसे किसी समर्पित मशीन/VM/कंटेनर पर चलाएँ, समर्पित OS उपयोगकर्ता + समर्पित ब्राउज़र/प्रोफ़ाइल/खातों का उपयोग करें और उस रनटाइम को व्यक्तिगत Apple/Google खातों या व्यक्तिगत पासवर्ड-मैनेजर/ब्राउज़र प्रोफ़ाइल में साइन इन न करें। एक ही रनटाइम पर व्यक्तिगत और कंपनी की पहचानों को मिलाने से यह पृथक्करण समाप्त हो जाता है और व्यक्तिगत डेटा उजागर होने का जोखिम बढ़ता है।

डिस्क पर गुप्त जानकारी

मान लें कि ~/.openclaw/ (या $OPENCLAW_STATE_DIR/) के अंतर्गत किसी भी चीज़ में गुप्त या निजी डेटा हो सकता है:

पथ सामग्री
openclaw.json कॉन्फ़िगरेशन में टोकन (Gateway, रिमोट Gateway), प्रदाता सेटिंग्स और अनुमति-सूचियाँ शामिल हो सकती हैं।
credentials/** चैनल क्रेडेंशियल (उदाहरण के लिए WhatsApp क्रेडेंशियल), पेयरिंग अनुमति-सूचियाँ, पुराने OAuth आयात।
state/openclaw.sqlite साझा रनटाइम स्थिति, जिसमें नेटिव MCP OAuth एक्सेस/रिफ़्रेश टोकन, डायनेमिक क्लाइंट पंजीकरण सीक्रेट और डिस्कवरी स्थिति शामिल हैं।
agents/<agentId>/agent/openclaw-agent.sqlite प्रत्येक एजेंट की रनटाइम स्थिति, जिसमें मॉडल प्रमाणीकरण प्रोफ़ाइल शामिल हैं।
agents/<agentId>/agent/auth-profiles.json पुराने मॉडल-प्रमाणीकरण माइग्रेशन का स्रोत; doctor समर्थित रिकॉर्ड को प्रत्येक एजेंट के SQLite डेटाबेस में आयात करता है।
agents/<agentId>/agent/codex-home/** प्रत्येक एजेंट का Codex ऐप-सर्वर अकाउंट, कॉन्फ़िगरेशन, स्किल्स, प्लगिन, नेटिव थ्रेड स्थिति और डायग्नोस्टिक्स (डिफ़ॉल्ट)।
$CODEX_HOME/** या ~/.codex/** नेटिव Codex रनटाइम स्थिति। सामान्य हार्नेस इसे केवल स्पष्ट plugins.entries.codex.config.appServer.homeScope: "user" के साथ एक्सेस करता है। अलग पर्यवेक्षण कनेक्शन इसे तब एक्सेस करता है, जब उसका निर्धारित होम स्कोप "user" हो, जो सेट न होने पर stdio या Unix के लिए डिफ़ॉल्ट है। इसमें नेटिव Codex अकाउंट, कॉन्फ़िगरेशन, प्लगिन और थ्रेड स्टोर शामिल हैं। पर्यवेक्षण स्रोत मेटाडेटा सूचीबद्ध करता है और जारी रखी गई Chat की कैनोनिकल नेटिव ब्रांच तथा उस कनेक्शन पर बाद के टर्न बनाए रखता है; ब्रांचिंग सीमित, स्थायी उपयोगकर्ता और असिस्टेंट इतिहास को एक प्रमाणित, मॉडल-लॉक OpenClaw Chat में कॉपी करती है। इसे केवल स्वामी-नियंत्रित Gateway के लिए सक्षम करें। Codex हार्नेस और Codex पर्यवेक्षण देखें।
secrets.json (वैकल्पिक) file SecretRef प्रदाताओं (secrets.providers) द्वारा उपयोग किया जाने वाला फ़ाइल-समर्थित सीक्रेट पेलोड।
agents/<agentId>/agent/auth.json पुरानी संगतता फ़ाइल; मिलने पर स्थिर api_key प्रविष्टियाँ साफ़ कर दी जाती हैं।
agents/<agentId>/agent/openclaw-agent.sqlite प्रत्येक एजेंट की रनटाइम स्थिति, जिसमें ऐसे सेशन रो और ट्रांसक्रिप्ट शामिल हैं जिनमें निजी संदेश और टूल आउटपुट हो सकते हैं।
agents/<agentId>/sessions/** पुराने सेशन माइग्रेशन स्रोत और अभिलेखागार, जिनमें निजी संदेश और टूल आउटपुट हो सकते हैं।
बंडल किए गए प्लगिन पैकेज इंस्टॉल किए गए प्लगिन (और उनके node_modules/)।
sandboxes/** टूल सैंडबॉक्स कार्यस्थान; सैंडबॉक्स के भीतर पढ़ी/लिखी गई फ़ाइलों की प्रतियाँ जमा हो सकती हैं।

क्रेडेंशियल संग्रहण मानचित्र

बैकअप संबंधी निर्णयों के लिए भी उपयोगी:

  • WhatsApp: ~/.openclaw/credentials/whatsapp/<accountId>/creds.json
  • Telegram बॉट टोकन: कॉन्फ़िगरेशन/परिवेश या channels.telegram.tokenFile (केवल सामान्य फ़ाइल; सिमलिंक अस्वीकृत)
  • Discord बॉट टोकन: कॉन्फ़िगरेशन/परिवेश या SecretRef (परिवेश/फ़ाइल/निष्पादन प्रदाता)
  • Slack टोकन: कॉन्फ़िगरेशन/परिवेश (channels.slack.*)
  • पेयरिंग अनुमति-सूचियाँ: ~/.openclaw/credentials/<channel>-allowFrom.json (डिफ़ॉल्ट खाता) / <channel>-<accountId>-allowFrom.json (गैर-डिफ़ॉल्ट खाते)
  • मॉडल प्रमाणीकरण प्रोफ़ाइलें: ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite (auth_profile_store)
  • MCP OAuth सत्र: ~/.openclaw/state/openclaw.sqlite (mcp_oauth_stores)
  • लेगेसी OAuth आयात: ~/.openclaw/credentials/oauth.json

सुरक्षा सुदृढ़ीकरण: अनुमतियाँ कड़ी रखें (डायरेक्टरी पर 700, फ़ाइलों पर 600); Gateway होस्ट पर पूर्ण-डिस्क एन्क्रिप्शन का उपयोग करें; यदि होस्ट साझा है, तो एक समर्पित OS उपयोगकर्ता खाते को प्राथमिकता दें।

फ़ाइल अनुमतियाँ

  • ~/.openclaw/openclaw.json: 600 (केवल उपयोगकर्ता द्वारा पढ़ने/लिखने योग्य)
  • ~/.openclaw: 700 (केवल उपयोगकर्ता)

openclaw doctor चेतावनी दे सकता है और इन्हें अधिक प्रतिबंधित करने का प्रस्ताव दे सकता है।

कार्यक्षेत्र की .env फ़ाइलें

OpenClaw एजेंटों और टूल के लिए कार्यक्षेत्र-स्थानीय .env फ़ाइलें लोड करता है, लेकिन उन्हें कभी भी Gateway के रनटाइम नियंत्रणों को चुपचाप ओवरराइड नहीं करने देता:

  • अविश्वसनीय कार्यक्षेत्र की .env फ़ाइलों में प्रदाता क्रेडेंशियल के परिवेश चर अवरुद्ध होते हैं—उदाहरण के लिए GEMINI_API_KEY, GOOGLE_API_KEY, XAI_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY, DEEPSEEK_API_KEY, PERPLEXITY_API_KEY, BRAVE_API_KEY, TAVILY_API_KEY, EXA_API_KEY, FIRECRAWL_API_KEY, और इंस्टॉल किए गए विश्वसनीय plugins द्वारा घोषित प्रदाता प्रमाणीकरण कुंजियाँ। इसके बजाय प्रदाता क्रेडेंशियल को Gateway प्रक्रिया परिवेश, ~/.openclaw/.env ($OPENCLAW_STATE_DIR/.env), कॉन्फ़िगरेशन के env ब्लॉक या वैकल्पिक लॉगिन-शेल आयात में रखें।
  • OPENCLAW_ से शुरू होने वाली प्रत्येक कुंजी को अविश्वसनीय कार्यक्षेत्र की .env फ़ाइलों में अवरुद्ध किया जाता है। इससे पूरा रनटाइम नेमस्पेस आरक्षित रहता है, ताकि भविष्य का कोई OPENCLAW_* नियंत्रण चेक-इन की गई या हमलावर द्वारा दी गई .env सामग्री से चुपचाप इनहेरिट होने के बजाय डिफ़ॉल्ट रूप से विफल होने पर बंद रहे।
  • चैनल और प्रदाता की एंडपॉइंट-रूटिंग सेटिंग भी कार्यक्षेत्र के .env ओवरराइड में अवरुद्ध होती हैं (उदाहरण के लिए MATRIX_HOMESERVER, MATTERMOST_URL, IRC_HOST, SYNOLOGY_CHAT_INCOMING_URL, AZURE_SPEECH_ENDPOINT, और _ENDPOINT पर समाप्त होने वाली अन्य कुंजियाँ), ताकि क्लोन किया गया कार्यक्षेत्र स्थानीय एंडपॉइंट कॉन्फ़िगरेशन के माध्यम से बंडल किए गए कनेक्टर ट्रैफ़िक को पुनर्निर्देशित न कर सके। इन्हें Gateway प्रक्रिया परिवेश, वैश्विक रनटाइम dotenv, स्पष्ट कॉन्फ़िगरेशन या env.shellEnv से आना चाहिए।
  • विश्वसनीय प्रक्रिया/OS परिवेश चर, वैश्विक रनटाइम dotenv, कॉन्फ़िगरेशन env, और सक्षम लॉगिन-शेल आयात अब भी लागू होते हैं—यह केवल कार्यक्षेत्र की .env फ़ाइलों की लोडिंग को सीमित करता है।

कार्यक्षेत्र की .env फ़ाइलें प्रायः एजेंट कोड के पास होती हैं, गलती से कमिट हो जाती हैं या टूल द्वारा लिखी जाती हैं; प्रदाता क्रेडेंशियल को अवरुद्ध करने से क्लोन किया गया कार्यक्षेत्र हमलावर-नियंत्रित प्रदाता खातों को प्रतिस्थापित नहीं कर सकता।

लॉग और ट्रांसक्रिप्ट

OpenClaw सत्र निरंतरता और वैकल्पिक मेमोरी इंडेक्सिंग के लिए सत्र ट्रांसक्रिप्ट को डिस्क पर ~/.openclaw/agents/<agentId>/sessions/*.jsonl के अंतर्गत संग्रहीत करता है—फ़ाइल सिस्टम तक पहुँच रखने वाली कोई भी प्रक्रिया/उपयोगकर्ता उन्हें पढ़ सकता है। डिस्क पहुँच को विश्वास-सीमा मानें और ~/.openclaw की अनुमतियों को प्रतिबंधित करें; अधिक मजबूत पृथक्करण के लिए एजेंटों को अलग-अलग OS उपयोगकर्ताओं या होस्ट पर चलाएँ।

Gateway लॉग में टूल सारांश, त्रुटियाँ और URL शामिल हो सकते हैं; सत्र ट्रांसक्रिप्ट में चिपकाए गए सीक्रेट, फ़ाइल सामग्री, कमांड आउटपुट और लिंक शामिल हो सकते हैं।

  • लॉग/ट्रांसक्रिप्ट रिडैक्शन को चालू रखें (logging.redactSensitive: "tools", डिफ़ॉल्ट)।
  • logging.redactPatterns के माध्यम से अपने परिवेश के लिए कस्टम पैटर्न जोड़ें (टोकन, होस्टनाम, आंतरिक URL)।
  • डायग्नोस्टिक्स साझा करते समय कच्चे लॉग के बजाय openclaw status --all (चिपकाने योग्य, सीक्रेट रिडैक्ट किए हुए) को प्राथमिकता दें।
  • यदि लंबे समय तक प्रतिधारण की आवश्यकता नहीं है, तो पुराने सत्र ट्रांसक्रिप्ट और लॉग फ़ाइलें हटाएँ।

विवरण: लॉगिंग

सुरक्षित आधारभूत कॉन्फ़िगरेशन (कॉपी/पेस्ट)

json5
{  gateway: {    mode: "local",    bind: "loopback",    port: 18789,    auth: { mode: "token", token: "your-long-random-token" },  },  channels: {    whatsapp: {      dmPolicy: "pairing",      groups: { "*": { requireMention: true } },    },  },}

यह Gateway को निजी रखता है, DM पेयरिंग आवश्यक करता है और समूह बॉट को हमेशा चालू रखने से बचाता है। टूल के अधिक सुरक्षित निष्पादन के लिए भी, किसी भी गैर-स्वामी एजेंट हेतु सैंडबॉक्स जोड़ें और खतरनाक टूल अस्वीकार करें (ऊपर "प्रति-एजेंट पहुँच प्रोफ़ाइलें" देखें)।

अलग नंबर (WhatsApp, Signal, Telegram)

फ़ोन नंबर-आधारित चैनलों के लिए, सहायक को अपने निजी नंबर से अलग नंबर पर चलाने पर विचार करें, ताकि निजी बातचीत गोपनीय रहे और बॉट नंबर अपनी सीमाओं के भीतर स्वचालन संभाले।

घटना प्रतिक्रिया

नियंत्रण

  1. इसे रोकें: macOS ऐप बंद करें (यदि वह Gateway का पर्यवेक्षण करता है) या अपनी openclaw gateway प्रक्रिया समाप्त करें।
  2. एक्सपोज़र बंद करें: जब तक यह समझ न आए कि क्या हुआ, gateway.bind: "loopback" सेट करें (या Tailscale Funnel/Serve अक्षम करें)।
  3. पहुँच रोकें: जोखिमपूर्ण DM/समूहों को dmPolicy: "disabled" पर स्विच करें / उल्लेख आवश्यक करें, और सभी को अनुमति देने वाली "*" प्रविष्टियाँ हटाएँ।

रोटेट करें (सीक्रेट लीक होने पर समझौता मानें)

  1. Gateway प्रमाणीकरण (gateway.auth.token / OPENCLAW_GATEWAY_PASSWORD) रोटेट करें और पुनः आरंभ करें।
  2. Gateway को कॉल कर सकने वाली प्रत्येक मशीन पर रिमोट क्लाइंट सीक्रेट (gateway.remote.token / .password) रोटेट करें।
  3. प्रदाता/API क्रेडेंशियल (WhatsApp क्रेडेंशियल, Slack/Discord टोकन, auth-profiles.json में मॉडल/API कुंजियाँ, और उपयोग किए जाने पर एन्क्रिप्टेड सीक्रेट पेलोड मान) रोटेट करें।

ऑडिट

  1. Gateway लॉग जाँचें: /tmp/openclaw/openclaw-YYYY-MM-DD.log (या logging.file)।
  2. प्रासंगिक ट्रांसक्रिप्ट की समीक्षा करें: ~/.openclaw/agents/<agentId>/sessions/*.jsonl
  3. हाल के उन कॉन्फ़िगरेशन परिवर्तनों की समीक्षा करें जिनसे पहुँच बढ़ सकती थी: gateway.bind, gateway.auth, DM/समूह नीतियाँ, tools.elevated, plugin परिवर्तन।
  4. openclaw security audit --deep दोबारा चलाएँ और पुष्टि करें कि गंभीर निष्कर्षों का समाधान हो गया है।

रिपोर्ट के लिए संग्रह करें

  • टाइमस्टैम्प, Gateway होस्ट का OS + OpenClaw संस्करण।
  • सत्र ट्रांसक्रिप्ट + लॉग का संक्षिप्त अंतिम भाग (रिडैक्ट करने के बाद)।
  • हमलावर ने क्या भेजा और एजेंट ने क्या किया।
  • क्या Gateway लूपबैक से परे एक्सपोज़ था (LAN/Tailscale Funnel/Serve)।

सीक्रेट स्कैनिंग

CI रिपॉज़िटरी पर प्री-कमिट detect-private-key हुक चलाता है। यदि यह विफल हो, तो कमिट की गई कुंजी सामग्री हटाएँ या रोटेट करें, फिर स्थानीय रूप से इसे पुनरुत्पादित करें:

bash
pre-commit run --all-files detect-private-key

सुरक्षा समस्याओं की रिपोर्टिंग

OpenClaw में कोई भेद्यता मिली? जिम्मेदारी से रिपोर्ट करें:

  1. ईमेल: security@openclaw.ai
  2. समस्या ठीक होने तक इसे सार्वजनिक रूप से पोस्ट न करें।
  3. हम आपको श्रेय देंगे (जब तक आप गुमनाम रहना पसंद न करें)।
Was this useful?
On this page

On this page