agents.defaults.sandbox أو agents.list[].sandbox). إذا كان العزل متوقفًا، تعمل الأدوات على المضيف. يبقى Gateway على المضيف؛ ويعمل تنفيذ الأدوات في بيئة معزولة عند تفعيله.
هذا ليس حدًا أمنيًا مثاليًا، لكنه يحد بشكل ملموس من الوصول إلى نظام الملفات والعمليات عندما ينفذ النموذج إجراءً غير مناسب.
ما الذي يُعزل
- تنفيذ الأدوات (
exec،read،write،edit،apply_patch،process، إلخ). - المتصفح المعزول الاختياري (
agents.defaults.sandbox.browser).
Sandboxed browser details
Sandboxed browser details
- افتراضيًا، يبدأ المتصفح المعزول تلقائيًا (لضمان إمكانية الوصول إلى CDP) عندما تحتاج إليه أداة المتصفح. اضبط ذلك عبر
agents.defaults.sandbox.browser.autoStartوagents.defaults.sandbox.browser.autoStartTimeoutMs. - افتراضيًا، تستخدم حاويات المتصفح المعزول شبكة Docker مخصصة (
openclaw-sandbox-browser) بدلًا من شبكةbridgeالعامة. اضبط ذلك باستخدامagents.defaults.sandbox.browser.network. - يقيد الخيار الاختياري
agents.defaults.sandbox.browser.cdpSourceRangeدخول CDP عند حافة الحاوية باستخدام قائمة سماح CIDR (على سبيل المثال172.21.0.1/32). - وصول مراقب noVNC محمي بكلمة مرور افتراضيًا؛ يصدر OpenClaw عنوان URL برمز قصير العمر يقدّم صفحة تمهيد محلية ويفتح noVNC مع كلمة المرور في جزء عنوان URL (وليس في سجلات الاستعلام/الترويسة).
- يتيح
agents.defaults.sandbox.browser.allowHostControlللجلسات المعزولة استهداف متصفح المضيف صراحةً. - قوائم السماح الاختيارية تضبط
target: "custom":allowedControlUrls، وallowedControlHosts، وallowedControlPorts.
- عملية Gateway نفسها.
- أي أداة يُسمح لها صراحةً بالعمل خارج البيئة المعزولة (مثل
tools.elevated).- يتجاوز التنفيذ المرفوع العزل ويستخدم مسار الخروج المضبوط (
gatewayافتراضيًا، أوnodeعندما يكون هدف التنفيذ هوnode). - إذا كان العزل متوقفًا، فإن
tools.elevatedلا يغير التنفيذ (فهو بالفعل على المضيف). راجع الوضع المرفوع.
- يتجاوز التنفيذ المرفوع العزل ويستخدم مسار الخروج المضبوط (
الأوضاع
يتحكمagents.defaults.sandbox.mode في وقت استخدام العزل:
- off
- non-main
- all
لا يوجد عزل.
النطاق
يتحكمagents.defaults.sandbox.scope في عدد الحاويات التي تُنشأ:
"agent"(الافتراضي): حاوية واحدة لكل وكيل."session": حاوية واحدة لكل جلسة."shared": حاوية واحدة مشتركة بين جميع الجلسات المعزولة.
الخلفية
يتحكمagents.defaults.sandbox.backend في بيئة التشغيل التي توفر العزل:
"docker"(الافتراضي عند تفعيل العزل): بيئة تشغيل عزل محلية مدعومة بـ Docker."ssh": بيئة تشغيل عزل بعيدة عامة مدعومة بـ SSH."openshell": بيئة تشغيل عزل مدعومة بـ OpenShell.
agents.defaults.sandbox.ssh. وتوجد إعدادات OpenShell الخاصة تحت plugins.entries.openshell.config.
اختيار خلفية
| Docker | SSH | OpenShell | |
|---|---|---|---|
| مكان التشغيل | حاوية محلية | أي مضيف يمكن الوصول إليه عبر SSH | بيئة معزولة مُدارة من OpenShell |
| الإعداد | scripts/sandbox-setup.sh | مفتاح SSH + المضيف الهدف | Plugin OpenShell مفعّل |
| نموذج مساحة العمل | ربط تحميل أو نسخ | مرجعي بعيد (بذر مرة واحدة) | mirror أو remote |
| التحكم في الشبكة | docker.network (الافتراضي: لا شيء) | يعتمد على المضيف البعيد | يعتمد على OpenShell |
| عزل المتصفح | مدعوم | غير مدعوم | غير مدعوم بعد |
| ربط التحميلات | docker.binds | N/A | N/A |
| الأنسب لـ | التطوير المحلي، عزل كامل | نقل الحمل إلى جهاز بعيد | بيئات معزولة بعيدة مُدارة مع مزامنة اختيارية ثنائية الاتجاه |
خلفية Docker
العزل متوقف افتراضيًا. إذا فعّلت العزل ولم تختر خلفية، يستخدم OpenClaw خلفية Docker. ينفذ الأدوات والمتصفحات المعزولة محليًا عبر مقبس عفريت Docker (/var/run/docker.sock). يتحدد عزل حاوية البيئة المعزولة بواسطة نطاقات أسماء Docker.
لإتاحة وحدات GPU الخاصة بالمضيف لبيئات Docker المعزولة، اضبط agents.defaults.sandbox.docker.gpus أو تجاوز كل وكيل agents.list[].sandbox.docker.gpus. تُمرر القيمة إلى علامة Docker --gpus كوسيط منفصل، مثل "all" أو "device=GPU-uuid"، وتتطلب بيئة تشغيل مضيف متوافقة مثل NVIDIA Container Toolkit.
خلفية SSH
استخدمbackend: "ssh" عندما تريد من OpenClaw عزل exec، وأدوات الملفات، وقراءات الوسائط على جهاز عشوائي يمكن الوصول إليه عبر SSH.
How it works
How it works
- ينشئ OpenClaw جذرًا بعيدًا لكل نطاق تحت
sandbox.ssh.workspaceRoot. - عند أول استخدام بعد الإنشاء أو إعادة الإنشاء، يبذر OpenClaw مساحة العمل البعيدة تلك من مساحة العمل المحلية مرة واحدة.
- بعد ذلك، تعمل
exec، وread، وwrite، وedit، وapply_patch، وقراءات وسائط الموجه، وتجهيز الوسائط الواردة مباشرةً على مساحة العمل البعيدة عبر SSH. - لا يزامن OpenClaw التغييرات البعيدة تلقائيًا إلى مساحة العمل المحلية.
Authentication material
Authentication material
identityFile، وcertificateFile، وknownHostsFile: استخدم الملفات المحلية الموجودة ومررها عبر إعدادات OpenSSH.identityData، وcertificateData، وknownHostsData: استخدم سلاسل مضمنة أو SecretRefs. يحلها OpenClaw عبر لقطة بيئة تشغيل الأسرار العادية، ويكتبها إلى ملفات مؤقتة بصلاحيات0600، ويحذفها عندما تنتهي جلسة SSH.- إذا ضُبط كل من
*Fileو*Dataللعنصر نفسه، تكون الأولوية لـ*Dataفي جلسة SSH تلك.
Remote-canonical consequences
Remote-canonical consequences
هذا نموذج مرجعي بعيد. تصبح مساحة عمل SSH البعيدة حالة البيئة المعزولة الحقيقية بعد البذر الأولي.
- التعديلات المحلية على المضيف التي تُجرى خارج OpenClaw بعد خطوة البذر لا تظهر عن بُعد حتى تعيد إنشاء البيئة المعزولة.
- يحذف
openclaw sandbox recreateالجذر البعيد لكل نطاق ويعيد البذر من المحلي عند الاستخدام التالي. - عزل المتصفح غير مدعوم على خلفية SSH.
- لا تنطبق إعدادات
sandbox.docker.*على خلفية SSH.
خلفية OpenShell
استخدمbackend: "openshell" عندما تريد من OpenClaw عزل الأدوات في بيئة بعيدة مُدارة من OpenShell. للحصول على دليل الإعداد الكامل، ومرجع الإعدادات، ومقارنة أوضاع مساحة العمل، راجع صفحة OpenShell المخصصة.
يعيد OpenShell استخدام نقل SSH الأساسي نفسه وجسر نظام الملفات البعيد نفسه مثل خلفية SSH العامة، ويضيف دورة حياة خاصة بـ OpenShell (sandbox create/get/delete، وsandbox ssh-config) إضافةً إلى وضع مساحة العمل الاختياري mirror.
mirror(الافتراضي): تبقى مساحة العمل المحلية هي المرجع. يزامن OpenClaw الملفات المحلية إلى OpenShell قبل exec ويزامن مساحة العمل البعيدة مرة أخرى بعد exec.remote: تكون مساحة عمل OpenShell هي المرجع بعد إنشاء البيئة المعزولة. يبذر OpenClaw مساحة العمل البعيدة مرة واحدة من مساحة العمل المحلية، ثم تعمل أدوات الملفات وexec مباشرةً على البيئة المعزولة البعيدة دون مزامنة التغييرات مرة أخرى.
تفاصيل النقل البعيد
تفاصيل النقل البعيد
- يطلب OpenClaw من OpenShell إعداد SSH خاصًا ببيئة العزل عبر
openshell sandbox ssh-config <name>. - يكتب Core إعداد SSH هذا إلى ملف مؤقت، ويفتح جلسة SSH، ويعيد استخدام جسر نظام الملفات البعيد نفسه المستخدم بواسطة
backend: "ssh". - في وضع
mirrorيختلف دور الحياة فقط: مزامنة المحلي إلى البعيد قبل exec، ثم المزامنة مرة أخرى بعد exec.
قيود OpenShell الحالية
قيود OpenShell الحالية
- متصفح بيئة العزل غير مدعوم بعد
sandbox.docker.bindsغير مدعوم على واجهة OpenShell الخلفية- مفاتيح ضبط وقت التشغيل الخاصة بـ Docker ضمن
sandbox.docker.*ما زالت تنطبق فقط على واجهة Docker الخلفية
أوضاع مساحة العمل
لدى OpenShell نموذجان لمساحة العمل. هذا هو الجزء الأكثر أهمية في الممارسة.- mirror (المحلي هو المرجعي)
- remote (OpenShell هو المرجعي)
استخدم
plugins.entries.openshell.config.mode: "mirror" عندما تريد أن تبقى مساحة العمل المحلية مرجعية.السلوك:- قبل
exec، يزامن OpenClaw مساحة العمل المحلية إلى بيئة عزل OpenShell. - بعد
exec، يزامن OpenClaw مساحة العمل البعيدة مرة أخرى إلى مساحة العمل المحلية. - تظل أدوات الملفات تعمل عبر جسر بيئة العزل، لكن مساحة العمل المحلية تبقى مصدر الحقيقة بين الأدوار.
- تعدل الملفات محليًا خارج OpenClaw وتريد أن تظهر هذه التغييرات في بيئة العزل تلقائيًا
- تريد أن تتصرف بيئة عزل OpenShell بأقرب شكل ممكن إلى واجهة Docker الخلفية
- تريد أن تعكس مساحة عمل المضيف كتابات بيئة العزل بعد كل دور exec
mirror إذا كنت تعتبر بيئة العزل بيئة تنفيذ مؤقتة. اختر remote إذا كنت تعتبر بيئة العزل مساحة العمل الحقيقية.
دورة حياة OpenShell
ما زالت بيئات عزل OpenShell تدار عبر دورة حياة بيئة العزل العادية:- يعرض
openclaw sandbox listأوقات تشغيل OpenShell وكذلك أوقات تشغيل Docker - يحذف
openclaw sandbox recreateوقت التشغيل الحالي ويتيح لـ OpenClaw إعادة إنشائه عند الاستخدام التالي - منطق التنظيف مدرك للواجهة الخلفية أيضًا
remote، فإن إعادة الإنشاء مهمة خصوصًا:
- تحذف إعادة الإنشاء مساحة العمل البعيدة المرجعية لذلك النطاق
- يهيئ الاستخدام التالي مساحة عمل بعيدة جديدة من مساحة العمل المحلية
mirror، تعيد إعادة الإنشاء أساسًا ضبط بيئة التنفيذ البعيدة لأن مساحة العمل المحلية تبقى مرجعية على أي حال.
الوصول إلى مساحة العمل
يتحكمagents.defaults.sandbox.workspaceAccess في ما يمكن لبيئة العزل رؤيته:
- none (الافتراضي)
- ro
- rw
ترى الأدوات مساحة عمل بيئة عزل ضمن
~/.openclaw/sandboxes.- ما زال وضع
mirrorيستخدم مساحة العمل المحلية كمصدر مرجعي بين أدوار exec - يستخدم وضع
remoteمساحة عمل OpenShell البعيدة كمصدر مرجعي بعد التهيئة الأولية - يظل
workspaceAccess: "ro"و"none"يقيدان سلوك الكتابة بالطريقة نفسها
media/inbound/*).
ملاحظة Skills: أداة
read متجذرة في بيئة العزل. مع workspaceAccess: "none"، يعكس OpenClaw المهارات المؤهلة إلى مساحة عمل بيئة العزل (.../skills) كي يمكن قراءتها. مع "rw"، يمكن قراءة Skills مساحة العمل من /workspace/skills، وتُجسَّد Skills المؤهلة المدارة أو المضمنة أو التابعة لـ Plugin في مسار القراءة فقط المولد /workspace/.openclaw/sandbox-skills/skills.عمليات تثبيت الربط المخصصة
يثبتagents.defaults.sandbox.docker.binds أدلة مضيف إضافية داخل الحاوية. الصيغة: host:container:mode (مثل "/home/user/source:/source:rw").
تُدمج عمليات الربط العامة والخاصة بكل وكيل ولا تُستبدل. ضمن scope: "shared"، يتم تجاهل عمليات الربط الخاصة بكل وكيل.
يثبت agents.defaults.sandbox.browser.binds أدلة مضيف إضافية داخل حاوية متصفح بيئة العزل فقط.
- عند ضبطه (بما في ذلك
[])، يستبدلagents.defaults.sandbox.docker.bindsلحاوية المتصفح. - عند حذفه، ترجع حاوية المتصفح إلى
agents.defaults.sandbox.docker.binds(متوافق مع الإصدارات السابقة).
الصور والإعداد
صورة 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 المضمنة المعروضة أدناه بدلًا من ذلك.بناء الصورة الافتراضية
من نسخة مصدرية:من تثبيت npm (لا حاجة إلى نسخة مصدرية):لا تتضمن الصورة الافتراضية Node. إذا كانت إحدى Skills تحتاج إلى Node (أو أوقات تشغيل أخرى)، فإما أن تخبز صورة مخصصة أو تثبت عبر
sandbox.docker.setupCommand (يتطلب خروج شبكة + جذرًا قابلًا للكتابة + مستخدم root).لا يستبدل OpenClaw بصمت debian:bookworm-slim العادي عند فقدان openclaw-sandbox:bookworm-slim. تفشل عمليات تشغيل بيئة العزل التي تستهدف الصورة الافتراضية بسرعة مع تعليمات بناء إلى أن تبنيها، لأن الصورة المضمنة تحمل python3 لمساعدات الكتابة/التحرير داخل بيئة العزل.اختياري: بناء الصورة المشتركة
للحصول على صورة بيئة عزل أكثر وظيفية تتضمن أدوات شائعة (على سبيل المثال من تثبيت npm، ابنِ الصورة الافتراضية أولًا (انظر أعلاه)، ثم ابنِ الصورة المشتركة فوقها باستخدام
curl وjq وNode 24 وpnpm وpython3 وgit):من نسخة مصدرية:scripts/docker/sandbox/Dockerfile.common من المستودع.ثم اضبط agents.defaults.sandbox.docker.image على openclaw-sandbox-common:bookworm-slim.اختياري: بناء صورة متصفح بيئة العزل
agents.defaults.sandbox.docker.network.
إعدادات Chromium الافتراضية لمتصفح بيئة العزل
إعدادات 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-3d-apis--disable-gpu--disable-dev-shm-usage--disable-background-networking--disable-extensions--disable-features=TranslateUI--disable-breakpad--disable-crash-reporter--disable-software-rasterizer--no-zygote--metrics-recording-only--renderer-process-limit=2--no-sandboxعندما يكونnoSandboxممكّنًا.- أعلام تقوية الرسوميات الثلاثة (
--disable-3d-apisو--disable-software-rasterizerو--disable-gpu) اختيارية ومفيدة عندما تفتقر الحاويات إلى دعم GPU. اضبطOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0إذا كان حمل العمل لديك يتطلب WebGL أو ميزات متصفح/ثلاثية الأبعاد أخرى. - يتم تمكين
--disable-extensionsافتراضيًا ويمكن تعطيله باستخدامOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0للتدفقات المعتمدة على الإضافات. - يتحكم
OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>في--renderer-process-limit=2، حيث يُبقي0إعداد Chromium الافتراضي.
browser.extraArgs لإلحاق أعلام بدء تشغيل إضافية.الإعدادات الافتراضية لأمان الشبكة
الإعدادات الافتراضية لأمان الشبكة
- يتم حظر
network: "host". - يتم حظر
network: "container:<id>"افتراضياً (خطر تجاوز عبر الانضمام إلى namespace). - تجاوز الطوارئ:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
scripts/docker/setup.sh تمهيد إعدادات sandbox. عيّن OPENCLAW_SANDBOX=1 (أو true/yes/on) لتمكين هذا المسار. يمكنك تجاوز موقع المقبس باستخدام OPENCLAW_DOCKER_SOCKET. مرجع الإعداد الكامل والبيئة: Docker.
setupCommand (إعداد الحاوية لمرة واحدة)
يعملsetupCommand مرة واحدة بعد إنشاء حاوية sandbox (وليس عند كل تشغيل). يتم تنفيذه داخل الحاوية عبر sh -lc.
المسارات:
- عام:
agents.defaults.sandbox.docker.setupCommand - لكل وكيل:
agents.list[].sandbox.docker.setupCommand
المشكلات الشائعة
المشكلات الشائعة
- القيمة الافتراضية لـ
docker.networkهي"none"(لا يوجد خروج إلى الشبكة)، لذلك ستفشل تثبيتات الحزم. - يتطلب
docker.network: "container:<id>"ضبطdangerouslyAllowContainerNamespaceJoin: trueوهو مخصص للطوارئ فقط. - يمنع
readOnlyRoot: trueعمليات الكتابة؛ اضبطreadOnlyRoot: falseأو ابنِ صورة مخصصة. - يجب أن يكون
userهو root لتثبيت الحزم (احذفuserأو اضبطuser: "0:0"). - لا يرث تنفيذ sandbox متغيرات
process.envالخاصة بالمضيف. استخدمagents.defaults.sandbox.docker.env(أو صورة مخصصة) لمفاتيح API الخاصة بـ Skills. - تُمرَّر القيم في
agents.defaults.sandbox.docker.envكمتغيرات بيئة صريحة لحاوية Docker. يمكن لأي شخص لديه وصول إلى Docker daemon فحصها باستخدام أوامر بيانات Docker الوصفية مثلdocker inspect. استخدم صورة مخصصة، أو ملف أسرار مركباً، أو مساراً آخر لتسليم الأسرار إذا كان هذا الكشف عبر البيانات الوصفية غير مقبول.
سياسة الأدوات ومخارج التجاوز
تظل سياسات السماح/الرفض للأدوات مطبقة قبل قواعد sandbox. إذا رُفضت أداة عالمياً أو لكل وكيل، فلن يعيدها sandboxing.tools.elevated هو مخرج تجاوز صريح يشغل exec خارج sandbox (gateway افتراضياً، أو node عندما يكون هدف التنفيذ هو node). لا تنطبق توجيهات /exec إلا على المرسلين المصرح لهم وتستمر لكل جلسة؛ لتعطيل exec بشكل صارم، استخدم رفض سياسة الأدوات (راجع Sandbox مقابل سياسة الأدوات مقابل Elevated).
تصحيح الأخطاء:
- استخدم
openclaw sandbox explainلفحص وضع sandbox الفعال، وسياسة الأدوات، ومفاتيح إعداد الإصلاح. - راجع Sandbox مقابل سياسة الأدوات مقابل Elevated للحصول على النموذج الذهني لسؤال “لماذا تم حظر هذا؟”.
تجاوزات الوكلاء المتعددين
يمكن لكل وكيل تجاوز sandbox + الأدوات:agents.list[].sandbox وagents.list[].tools (بالإضافة إلى agents.list[].tools.sandbox.tools لسياسة أدوات sandbox). راجع Sandbox والأدوات للوكلاء المتعددين لمعرفة الأسبقية.
مثال تمكين بسيط
ذات صلة
- Sandbox والأدوات للوكلاء المتعددين — التجاوزات لكل وكيل والأسبقية
- OpenShell — إعداد واجهة sandbox الخلفية المُدارة، وأوضاع مساحة العمل، ومرجع الإعدادات
- إعدادات Sandbox
- Sandbox مقابل سياسة الأدوات مقابل Elevated — تصحيح “لماذا تم حظر هذا؟”
- الأمان