CLI commands
امنیت
openclaw security
ابزارهای امنیتی: ممیزی بههمراه اصلاحات امن اختیاری. مرتبط: امنیت.
openclaw security auditopenclaw security audit --deepopenclaw security audit --deep --password <password>openclaw security audit --deep --token <token>openclaw security audit --auth password --password <password>openclaw security audit --fixopenclaw security audit --jsonحالتهای ممیزی
حالت سادهٔ security audit در مسیر سردِ پیکربندی/سیستم فایل/فقطخواندنی باقی میماند: گردآورندههای امنیتی زمان اجرای Plugin را شناسایی نمیکند، بنابراین ممیزیهای معمول زمان اجرای همهٔ Pluginهای نصبشده را بارگذاری نمیکنند. --deep کاوشهای زندهٔ Gateway را بهصورت بهترین تلاش و گردآورندههای ممیزی امنیتی متعلق به Plugin را اضافه میکند (فراخوانهای داخلی صریح نیز، هنگامی که از قبل دامنهٔ زمان اجرای مناسبی دارند، میتوانند استفاده از آن گردآورندهها را انتخاب کنند).
اگر احراز هویت گذرواژهای Gateway فقط هنگام راهاندازی ارائه شده است، همان مقدار را با --auth password --password <password> ارسال کنید تا ممیزی بتواند آن را با hooks.token مقایسه کند.
موارد بررسیشده
مدل پیام مستقیم/اعتماد
- هنگامی هشدار میدهد که چند فرستندهٔ پیام مستقیم نشست اصلی را بهاشتراک میگذارند و حالت امن پیام مستقیم را پیشنهاد میکند:
session.dmScope="per-channel-peer"(یاper-account-channel-peerبرای کانالهای چندحسابی) برای صندوقهای ورودی مشترک. این مقاومسازی برای همکاری/صندوق ورودی مشترک است، نه جداسازی اپراتورهایی که متقابلاً به یکدیگر اعتماد ندارند؛ برای چنین حالتی، مرزهای اعتماد را با Gatewayهای جداگانه (یا کاربران/میزبانهای جداگانهٔ سیستمعامل) تفکیک کنید. - هنگامی که پیکربندی احتمال ورود کاربران مشترک را نشان دهد (برای مثال خطمشی بازِ پیام مستقیم/گروه، مقصدهای گروهی پیکربندیشده یا قواعد فرستنده با نویسهٔ عام)،
security.trust_model.multi_user_heuristicرا صادر میکند — مدل اعتماد پیشفرض OpenClaw دستیار شخصی (یک اپراتور) است، نه جداسازی چندمستاجری در محیط متخاصم. برای راهاندازیهای اشتراکی عمدی: همهٔ نشستها را در محیط ایزوله اجرا کنید، دسترسی سیستم فایل را به فضای کاری محدود نگه دارید و هویتها یا اعتبارنامههای شخصی/خصوصی را از آن زمان اجرا دور نگه دارید. - هنگامی هشدار میدهد که مدلهای کوچک (با
<=300Bپارامتر) بدون محیط ایزوله و با ابزارهای وب/مرورگر فعال استفاده میشوند.
Webhook/قلابها
راهاندازی یک هشدار امنیتی غیرکشنده ثبت میکند و ممیزی استفادهٔ مجدد از hooks.token برای مقادیر فعال احراز هویتِ راز مشترک Gateway (gateway.auth.token / OPENCLAW_GATEWAY_TOKEN، gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD) را علامتگذاری میکند. همچنین در موارد زیر هشدار میدهد:
hooks.tokenکوتاه استhooks.path="/"hooks.defaultSessionKeyتنظیم نشده استhooks.allowedAgentIdsنامحدود است- بازنویسیهای
sessionKeyدرخواست فعال هستند - بازنویسیها بدون
hooks.allowedSessionKeyPrefixesفعال هستند
برای تعویض hooks.token ذخیرهشدهای که مجدداً استفاده شده است، openclaw doctor --fix را اجرا کنید، سپس فرستندههای قلاب خارجی را برای استفاده از توکن جدید بهروزرسانی کنید.
محیط ایزوله/ابزارها
- هنگامی هشدار میدهد که تنظیمات Docker محیط ایزوله پیکربندی شدهاند، اما حالت محیط ایزوله خاموش است.
- هنگامی هشدار میدهد که
gateway.nodes.commands.denyاز ورودیهای ناشناخته یا الگوگونهٔ بیاثر استفاده میکند (تطبیق فقط بر اساس نام دقیق فرمان Node است، نه پالایش متن پوسته). - هنگامی هشدار میدهد که
gateway.nodes.commands.allowصراحتاً فرمانهای خطرناک Node را فعال میکند. - هنگامی هشدار میدهد که
tools.profile="minimal"سراسری توسط پروفایلهای ابزار عامل بازنویسی میشود. - هنگامی هشدار میدهد که ابزارهای نوشتن/ویرایش غیرفعال هستند، اما
execهمچنان بدون مرز محدودکنندهٔ سیستم فایلِ محیط ایزوله در دسترس است. - هنگامی هشدار میدهد که پیامهای مستقیم یا گروههای باز، ابزارهای زمان اجرا/سیستم فایل را بدون محافظهای محیط ایزوله/فضای کاری در معرض دسترسی قرار میدهند.
- هنگامی هشدار میدهد که ممکن است ابزارهای Pluginهای نصبشده تحت خطمشی ابزار سهلگیرانه قابل دسترسی باشند.
مرورگر محیط ایزوله
- هنگامی هشدار میدهد که مرورگر محیط ایزوله بدون
sandbox.browser.cdpSourceRangeاز شبکهٔ Docker باbridgeاستفاده میکند. - حالتهای خطرناک شبکهٔ Docker محیط ایزوله، از جمله اتصال به فضای نام
hostوcontainer:*را علامتگذاری میکند. - هنگامی هشدار میدهد که کانتینرهای Docker موجود برای مرورگر محیط ایزوله دارای برچسبهای هش مفقود/قدیمی هستند (برای مثال کانتینرهای پیش از مهاجرت که
openclaw.browserConfigEpochرا ندارند) وopenclaw sandbox recreate --browser --allرا پیشنهاد میکند.
شبکه/کشف
gateway.allowRealIpFallback=trueرا علامتگذاری میکند (در صورت پیکربندی نادرست پروکسیها، خطر جعل سرآیند).discovery.mdns.mode="full"را علامتگذاری میکند (نشت فراداده از طریق رکوردهای TXT مربوط به mDNS).- هنگامی هشدار میدهد که
gateway.auth.mode="none"، APIهای HTTP مربوط به Gateway را بدون راز مشترک در دسترس باقی میگذارد (/tools/invokeبههمراه هر نقطهٔ پایانی فعالِ/v1/*).
Pluginها/کانالها
- هنگامی هشدار میدهد که سوابق نصب Plugin/قلاب مبتنی بر npm به نسخهای ثابت نشدهاند، فرادادهٔ یکپارچگی را ندارند یا با نسخههای فعلی بستههای نصبشده اختلاف دارند.
- هنگامی هشدار میدهد که فهرستهای مجاز کانال بهجای شناسههای پایدار به نامها/ایمیلها/برچسبهای تغییرپذیر متکی هستند (دامنههای Discord، Slack، Google Chat، Microsoft Teams، Mattermost و IRC در موارد مقتضی).
تنظیماتی با پیشوند dangerous/dangerously بازنویسیهای صریح اضطراری اپراتور هستند؛ فعالکردن یکی از آنها بهخودیخود گزارش یک آسیبپذیری امنیتی نیست. برای فهرست کامل پارامترهای خطرناک، بخش «خلاصهٔ پرچمهای ناامن یا خطرناک» را در امنیت ببینید.
رفتار SecretRef
security audit، SecretRefهای پشتیبانیشده را برای مسیرهای هدف خود در حالت فقطخواندنی تفکیک میکند. اگر SecretRef در مسیر فرمان فعلی در دسترس نباشد، ممیزی ادامه مییابد و بهجای ازکارافتادن، secretDiagnostics را گزارش میکند. --token و --password فقط احراز هویتِ کاوش عمیق را برای همان بار اجرای فرمان بازنویسی میکنند؛ آنها پیکربندی یا نگاشتهای SecretRef را بازنویسی نمیکنند.
سرکوبها
یافتههای دائمی عمدی را با security.audit.suppressions بپذیرید. هر سرکوب با یک checkId دقیق مطابقت دارد و میتوان آن را با زیررشتههای titleIncludes و/یا detailIncludes که به بزرگی و کوچکی حروف حساس نیستند، محدودتر کرد:
{ "security": { "audit": { "suppressions": [ { "checkId": "plugins.tools_reachable_permissive_policy", "detailIncludes": "Enabled extension plugins: gbrain", "reason": "trusted local operator plugin" } ] } }}یافتههای سرکوبشده از فهرست فعال summary و findings حذف میشوند. خروجی JSON برای ممیزیپذیری آنها را زیر suppressedFindings نگه میدارد. هنگامی که سرکوبها پیکربندی شدهاند، خروجی فعال همچنین یک یافتهٔ اطلاعاتی سرکوبناپذیرِ security.audit.suppressions.active را نگه میدارد تا خوانندگان بتوانند تشخیص دهند که ممیزی پالایش شده است. پرچمهای خطرناک پیکربندی بهازای هر پرچم در یک یافته صادر میشوند، بنابراین پذیرش یک پرچم خطرناک، سایر پرچمهای فعال با همان checkId مربوط به config.insecure_or_dangerous_flags را پنهان نمیکند.
ازآنجاکه سرکوبها میتوانند ریسک دائمی را پنهان کنند، افزودن یا حذف آنها از طریق فرمانهای پوستهای که عامل اجرا میکند، به تأیید اجرا نیاز دارد؛ مگر اینکه اجرا از قبل برای خودکارسازی محلی مورداعتماد با security="full" و ask="off" در حال انجام باشد.
خروجی JSON
openclaw security audit --json | jq '.summary'openclaw security audit --deep --json | jq '.findings[] | select(.severity=="critical") | .checkId'با --fix --json، خروجی هم اقدامات اصلاحی و هم گزارش نهایی را شامل میشود:
openclaw security audit --fix --json | jq '{fix: .fix.ok, summary: .report.summary}'آنچه --fix تغییر میدهد
اصلاحات امن و قطعی را اعمال میکند:
groupPolicy="open"های رایج را بهgroupPolicy="allowlist"تغییر میدهد (از جمله گونههای حساب در کانالهای پشتیبانیشده)- هنگامی که خطمشی گروه WhatsApp به
allowlistتغییر میکند، در صورت وجود آن فهرست و تعریفنشدنallowFromدر پیکربندی،groupAllowFromرا از فایل ذخیرهشدهٔallowFromمقداردهی اولیه میکند logging.redactSensitiveرا از"off"به"tools"تنظیم میکند- مجوزهای وضعیت/پیکربندی و فایلهای حساس رایج (
credentials/*.json،auth-profiles.json،openclaw-agent.sqliteو آثار نشست قدیمی) را سختگیرانهتر میکند - همچنین مجوزهای فایلهای شاملشدهٔ پیکربندی را که از
openclaw.jsonارجاع داده شدهاند، سختگیرانهتر میکند - در میزبانهای POSIX از
chmodو در Windows از بازنشانیهایicaclsاستفاده میکند
--fix موارد زیر را انجام نمیدهد:
- توکنها/گذرواژهها/کلیدهای API را تعویض نمیکند
- ابزارها (
gateway،cron،execو غیره) را غیرفعال نمیکند - گزینههای اتصال/احراز هویت/در معرض شبکه قرارگرفتن Gateway را تغییر نمیدهد
- Pluginها/Skills را حذف یا بازنویسی نمیکند