Gateway
محیط محدود در برابر سیاست ابزار در برابر حالت ارتقایافته
OpenClaw سه کنترل مرتبط (اما متفاوت) دارد:
- محیط ایزوله (
agents.defaults.sandbox.*/agents.list[].sandbox.*) تعیین میکند ابزارها کجا اجرا شوند (بکاند محیط ایزوله در برابر میزبان). - سیاست ابزار (
tools.*,tools.sandbox.tools.*,agents.list[].tools.*) تعیین میکند کدام ابزارها در دسترس/مجاز هستند. - ارتقایافته (
tools.elevated.*,agents.list[].tools.elevated.*) یک راه خروج فقط برای exec است تا وقتی در محیط ایزوله هستید، بیرون از محیط ایزوله اجرا شود (gatewayبهطور پیشفرض، یاnodeوقتی هدف exec برایnodeپیکربندی شده باشد).
اشکالزدایی سریع
از بازرس استفاده کنید تا ببینید OpenClaw واقعاً چه کاری انجام میدهد:
openclaw sandbox explain
openclaw sandbox explain --session agent:main:main
openclaw sandbox explain --agent work
openclaw sandbox explain --json
این موارد را چاپ میکند:
- حالت/دامنه/دسترسی مؤثر محیط ایزوله به فضای کاری
- اینکه نشست در حال حاضر در محیط ایزوله است یا نه (اصلی در برابر غیر اصلی)
- اجازه/رد مؤثر ابزار محیط ایزوله (و اینکه از عامل/سراسری/پیشفرض آمده است)
- گیتهای ارتقایافته و مسیرهای کلید رفع مشکل
محیط ایزوله: ابزارها کجا اجرا میشوند
محیط ایزوله با agents.defaults.sandbox.mode کنترل میشود:
"off": همهچیز روی میزبان اجرا میشود."non-main": فقط نشستهای غیر اصلی در محیط ایزوله هستند («غافلگیری» رایج برای گروهها/کانالها)."all": همهچیز در محیط ایزوله است.
برای ماتریس کامل (دامنه، اتصالهای فضای کاری، imageها)، محیط ایزوله را ببینید.
اتصالهای Bind (بررسی امنیتی سریع)
docker.bindsسامانه فایل محیط ایزوله را سوراخ میکند: هرچه را mount کنید داخل کانتینر با حالتی که تعیین کردهاید (:roیا:rw) قابل مشاهده است.- اگر حالت را حذف کنید، پیشفرض خواندن-نوشتن است؛ برای سورس/secretها
:roرا ترجیح دهید. scope: "shared"اتصالهای هر عامل را نادیده میگیرد (فقط اتصالهای سراسری اعمال میشوند).- OpenClaw منابع bind را دو بار اعتبارسنجی میکند: ابتدا روی مسیر منبع نرمالسازیشده، سپس دوباره پس از resolve شدن از طریق عمیقترین ancestor موجود. خروج از طریق والد symlink، بررسیهای مسیر مسدودشده یا ریشه مجاز را دور نمیزند.
- مسیرهای leaf ناموجود همچنان بهصورت ایمن بررسی میشوند. اگر
/workspace/alias-out/new-fileاز طریق یک والد symlinkشده به یک مسیر مسدود یا بیرون از ریشههای مجاز پیکربندیشده resolve شود، bind رد میشود. - bind کردن
/var/run/docker.sockعملاً کنترل میزبان را به محیط ایزوله میدهد؛ این کار را فقط آگاهانه انجام دهید. - دسترسی فضای کاری (
workspaceAccess: "ro"/"rw") مستقل از حالتهای bind است.
سیاست ابزار: کدام ابزارها وجود دارند/قابل فراخوانی هستند
دو لایه مهم است:
- پروفایل ابزار:
tools.profileوagents.list[].tools.profile(allowlist پایه) - پروفایل ابزار ارائهدهنده:
tools.byProvider[provider].profileوagents.list[].tools.byProvider[provider].profile - سیاست ابزار سراسری/هر عامل:
tools.allow/tools.denyوagents.list[].tools.allow/agents.list[].tools.deny - سیاست ابزار ارائهدهنده:
tools.byProvider[provider].allow/denyوagents.list[].tools.byProvider[provider].allow/deny - سیاست ابزار محیط ایزوله (فقط وقتی در محیط ایزوله هستید اعمال میشود):
tools.sandbox.tools.allow/tools.sandbox.tools.denyوagents.list[].tools.sandbox.tools.*
قاعدههای کلی:
denyهمیشه برنده است.- اگر
allowخالی نباشد، هر چیز دیگری مسدود در نظر گرفته میشود. - سیاست ابزار توقف سخت است:
/execنمیتواند ابزارexecردشده را override کند. /execفقط پیشفرضهای نشست را برای فرستندگان مجاز تغییر میدهد؛ دسترسی ابزار اعطا نمیکند. کلیدهای ابزار ارائهدهنده یاprovider(مثلاًgoogle-antigravity) یاprovider/model(مثلاًopenai/gpt-5.4) را میپذیرند.
گروههای ابزار (میانبرها)
سیاستهای ابزار (سراسری، عامل، محیط ایزوله) از ورودیهای group:* پشتیبانی میکنند که به چند ابزار گسترش مییابند:
{
tools: {
sandbox: {
tools: {
allow: ["group:runtime", "group:fs", "group:sessions", "group:memory"],
},
},
},
}
گروههای موجود:
group:runtime:exec,process,code_execution(bashبهعنوان alias برایexecپذیرفته میشود)group:fs:read,write,edit,apply_patchgroup:sessions:sessions_list,sessions_history,sessions_send,sessions_spawn,sessions_yield,subagents,session_statusgroup:memory:memory_search,memory_getgroup:web:web_search,x_search,web_fetchgroup:ui:browser,canvasgroup:automation:heartbeat_respond,cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:agents:agents_list,update_plangroup:media:image,image_generate,music_generate,video_generate,ttsgroup:openclaw: همه ابزارهای داخلی OpenClaw (Pluginهای ارائهدهنده را شامل نمیشود)
ارتقایافته: «اجرا روی میزبان» فقط برای exec
ارتقایافته ابزارهای اضافی اعطا نمیکند؛ فقط روی exec اثر میگذارد.
- اگر در محیط ایزوله هستید،
/elevated on(یاexecباelevated: true) بیرون از محیط ایزوله اجرا میشود (تأییدها ممکن است همچنان اعمال شوند). - برای رد کردن تأییدهای exec برای نشست، از
/elevated fullاستفاده کنید. - اگر از قبل مستقیم اجرا میشوید، ارتقایافته عملاً بیاثر است (همچنان با گیت کنترل میشود).
- ارتقایافته محدود به skill نیست و allow/deny ابزار را override نمیکند.
- ارتقایافته overrideهای دلخواه بین میزبانها را از
host=autoاعطا نمیکند؛ از قواعد عادی هدف exec پیروی میکند و فقط وقتی هدف پیکربندیشده/نشست از قبلnodeباشد،nodeرا حفظ میکند. /execاز ارتقایافته جداست. فقط پیشفرضهای exec هر نشست را برای فرستندگان مجاز تنظیم میکند.
گیتها:
- فعالسازی:
tools.elevated.enabled(و اختیاریagents.list[].tools.elevated.enabled) - allowlistهای فرستنده:
tools.elevated.allowFrom.<provider>(و اختیاریagents.list[].tools.elevated.allowFrom.<provider>)
حالت ارتقایافته را ببینید.
رفع مشکلهای رایج «حبس محیط ایزوله»
«ابزار X توسط سیاست ابزار محیط ایزوله مسدود شده است»
کلیدهای رفع مشکل (یکی را انتخاب کنید):
- غیرفعال کردن محیط ایزوله:
agents.defaults.sandbox.mode=off(یا برای هر عاملagents.list[].sandbox.mode=off) - مجاز کردن ابزار داخل محیط ایزوله:
- آن را از
tools.sandbox.tools.denyحذف کنید (یا برای هر عاملagents.list[].tools.sandbox.tools.deny) - یا آن را به
tools.sandbox.tools.allowاضافه کنید (یا allow هر عامل)
- آن را از
«فکر میکردم این اصلی است؛ چرا در محیط ایزوله است؟»
در حالت "non-main"، کلیدهای گروه/کانال اصلی نیستند. از کلید نشست اصلی (که sandbox explain نشان میدهد) استفاده کنید یا حالت را به "off" تغییر دهید.
مرتبط
- محیط ایزوله -- مرجع کامل محیط ایزوله (حالتها، دامنهها، بکاندها، imageها)
- محیط ایزوله و ابزارهای چندعاملی -- overrideهای هر عامل و تقدم
- حالت ارتقایافته