Sandboxing
يمكن لـ OpenClaw تشغيل الأدوات داخل حاويات Docker لتقليل نطاق التأثير. هذا اختياري ويتم التحكم فيه عبر التهيئة (agents.defaults.sandbox أو
agents.list[].sandbox). إذا كان sandboxing معطّلًا، تعمل الأدوات على المضيف.
يبقى Gateway على المضيف؛ بينما يتم تنفيذ الأدوات داخل sandbox معزول
عند تمكينه.
هذا ليس حدًا أمنيًا مثاليًا، لكنه يحدّ بشكل ملموس من الوصول إلى نظام الملفات
والعمليات عندما يرتكب النموذج تصرّفًا غير ذكي.
ما الذي يتم وضعه داخل sandbox
- تنفيذ الأدوات (
exec،read،write،edit،apply_patch،process، إلخ). - متصفح معزول اختياري (
agents.defaults.sandbox.browser).- افتراضيًا، يبدأ متصفح sandbox تلقائيًا (لضمان إمكانية الوصول إلى CDP) عندما تحتاجه أداة المتصفح.
تتم التهيئة عبر
agents.defaults.sandbox.browser.autoStartوagents.defaults.sandbox.browser.autoStartTimeoutMs. - يتيح
agents.defaults.sandbox.browser.allowHostControlللجلسات المعزولة استهداف متصفح المضيف صراحةً. - قوائم السماح الاختيارية تضبط
target: "custom":allowedControlUrls،allowedControlHosts،allowedControlPorts.
- افتراضيًا، يبدأ متصفح sandbox تلقائيًا (لضمان إمكانية الوصول إلى CDP) عندما تحتاجه أداة المتصفح.
تتم التهيئة عبر
- عملية Gateway نفسها.
- أي أداة يُسمح لها صراحةً بالتشغيل على المضيف (مثل
tools.elevated).- التنفيذ بصلاحيات مرتفعة يعمل على المضيف ويتجاوز sandboxing.
- إذا كان sandboxing معطّلًا، فإن
tools.elevatedلا يغيّر التنفيذ (هو أصلًا على المضيف). راجع Elevated Mode.
أوضاع
يتحكمagents.defaults.sandbox.mode في متى يتم استخدام sandboxing:
"off": بدون sandboxing."non-main": عزل جلسات غير الرئيسية فقط (الافتراضي إذا أردت محادثات عادية على المضيف)."all": كل جلسة تعمل داخل sandbox. ملاحظة: يعتمد"non-main"علىsession.mainKey(الافتراضي"main") وليس على معرّف الوكيل. جلسات المجموعات/القنوات تستخدم مفاتيحها الخاصة، لذا تُعد غير رئيسية وسيتم عزلها.
النطاق
يتحكمagents.defaults.sandbox.scope في عدد الحاويات التي يتم إنشاؤها:
"session"(افتراضي): حاوية واحدة لكل جلسة."agent": حاوية واحدة لكل وكيل."shared": حاوية واحدة مشتركة بين جميع الجلسات المعزولة.
الوصول إلى مساحة العمل
يتحكمagents.defaults.sandbox.workspaceAccess في ما الذي يمكن لـ sandbox رؤيته:
"none"(افتراضي): ترى الأدوات مساحة عمل sandbox تحت~/.openclaw/sandboxes."ro": يركّب مساحة عمل الوكيل للقراءة فقط عند/agent(يعطّلwrite/edit/apply_patch)."rw": يركّب مساحة عمل الوكيل للقراءة/الكتابة عند/workspace.
media/inbound/*).
ملاحظة Skills: أداة read تكون جذورها داخل sandbox. مع workspaceAccess: "none"،
يعكس OpenClaw مهارات مؤهلة إلى مساحة عمل sandbox (.../skills) بحيث
يمكن قراءتها. ومع "rw"، تكون مهارات مساحة العمل قابلة للقراءة من
/workspace/skills.
ربط مخصص (bind mounts)
يقومagents.defaults.sandbox.docker.binds بتركيب أدلة إضافية من المضيف داخل الحاوية.
الصيغة: host:container:mode (مثلًا، "/home/user/source:/source:rw").
يتم دمج الروابط العامة وروابط كل وكيل (ولا يتم استبدالها). ضمن scope: "shared"، يتم تجاهل روابط كل وكيل.
agents.defaults.sandbox.browser.binds يقوم بربط (mount) أدلة إضافية من المضيف داخل حاوية sandbox browser فقط.
- عند تعيينه (بما في ذلك
[])، فإنه يستبدلagents.defaults.sandbox.docker.bindsلحاوية المتصفح. - عند عدم تعيينه، تعود حاوية المتصفح لاستخدام
agents.defaults.sandbox.docker.binds(متوافق مع الإصدارات السابقة).
- تتجاوز الروابط نظام ملفات sandbox: فهي تكشف مسارات المضيف وفق الوضع الذي تحدده (
:roأو:rw). - ينبغي أن تكون التركيبات الحساسة (مثل
docker.sock، والأسرار، ومفاتيح SSH):roما لم تكن مطلوبة على الإطلاق. - اجمع ذلك مع
workspaceAccess: "ro"إذا كنت تحتاج فقط إلى وصول للقراءة إلى مساحة العمل؛ تبقى أوضاع الروابط مستقلة. - راجع Sandbox vs Tool Policy vs Elevated لمعرفة كيفية تفاعل الروابط مع سياسة الأدوات والتنفيذ بصلاحيات مرتفعة.
الصور + الإعداد
الصورة الافتراضية:openclaw-sandbox:bookworm-slim
قم ببنائها مرة واحدة:
sandbox.docker.setupCommand (يتطلب خروج شبكة + جذر قابل للكتابة +
مستخدم root).
صورة متصفح sandbox:
agents.defaults.sandbox.docker.network.
تثبيتات Docker والـ Gateway المُحَوْسَب موجودة هنا:
Docker
setupCommand (إعداد الحاوية لمرة واحدة)
يشغّلsetupCommand مرة واحدة بعد إنشاء حاوية sandbox (وليس في كل تشغيل).
يُنفَّذ داخل الحاوية عبر sh -lc.
المسارات:
- عام:
agents.defaults.sandbox.docker.setupCommand - لكل وكيل:
agents.list[].sandbox.docker.setupCommand
- القيمة الافتراضية لـ
docker.networkهي"none"(بدون خروج)، لذا ستفشل تثبيتات الحزم. - يمنع
readOnlyRoot: trueالكتابة؛ عيّنreadOnlyRoot: falseأو ابنِ صورة مخصصة. - يجب أن يكون
userهو root لتثبيت الحزم (احذفuserأو عيّنuser: "0:0"). - تنفيذ sandbox لا يرث
process.envمن المضيف. استخدمagents.defaults.sandbox.docker.env(أو صورة مخصصة) لمفاتيح واجهات برمجة التطبيقات الخاصة بالمهارات.
سياسة الأدوات + مخارج الهروب
تُطبَّق سياسات السماح/المنع للأدوات قبل قواعد sandbox. إذا كانت أداة ممنوعة عالميًا أو لكل وكيل، فلن يعيدها sandboxing.tools.elevated هو مخرج هروب صريح يشغّل exec على المضيف.
تُطبَّق توجيهات /exec فقط للمرسلين المخوّلين وتستمر لكل جلسة؛ لتعطيل
exec بشكل صارم، استخدم منع سياسة الأدوات (راجع Sandbox vs Tool Policy vs Elevated).
التنقيح:
- استخدم
openclaw sandbox explainلفحص وضع sandbox الفعّال، وسياسة الأدوات، ومفاتيح تهيئة الإصلاح. - راجع Sandbox vs Tool Policy vs Elevated لنموذج التفكير «لماذا تم الحظر؟». احرص على إبقائه مقفلًا.
تجاوزات متعددة الوكلاء
يمكن لكل وكيل تجاوز sandbox + الأدوات:agents.list[].sandbox و agents.list[].tools (بالإضافة إلى agents.list[].tools.sandbox.tools لسياسة أدوات sandbox).
راجع Multi-Agent Sandbox & Tools لمعرفة الأولوية.