CLI commands
ความปลอดภัย
openclaw security
เครื่องมือด้านความปลอดภัย (การตรวจสอบ + การแก้ไขเพิ่มเติมตามตัวเลือก)
ที่เกี่ยวข้อง:
- คู่มือความปลอดภัย: ความปลอดภัย
การตรวจสอบ
openclaw security auditopenclaw security audit --deepopenclaw security audit --deep --password <password>openclaw security audit --deep --token <token>openclaw security audit --fixopenclaw security audit --jsonsecurity audit แบบปกติจะอยู่บนเส้นทางการตั้งค่า/ระบบไฟล์/อ่านอย่างเดียวแบบเย็น โดยค่าเริ่มต้นจะไม่ค้นหาตัวรวบรวมความปลอดภัยรันไทม์ของ Plugin ดังนั้นการตรวจสอบตามปกติจะไม่โหลดรันไทม์ของ Plugin ที่ติดตั้งไว้ทุกตัว ใช้ --deep เพื่อรวมการ probe Gateway แบบสดโดยพยายามให้ดีที่สุดและตัวรวบรวมการตรวจสอบความปลอดภัยที่ Plugin เป็นเจ้าของ; ตัวเรียกภายในที่ชัดเจนอาจเลือกใช้ตัวรวบรวมที่ Plugin เป็นเจ้าของเหล่านั้นได้เช่นกันเมื่อมีขอบเขตรันไทม์ที่เหมาะสมอยู่แล้ว
การตรวจสอบจะเตือนเมื่อผู้ส่ง DM หลายรายใช้เซสชันหลักร่วมกัน และแนะนำ โหมด DM ที่ปลอดภัย: session.dmScope="per-channel-peer" (หรือ per-account-channel-peer สำหรับช่องทางหลายบัญชี) สำหรับกล่องขาเข้าที่ใช้ร่วมกัน
สิ่งนี้มีไว้เพื่อเสริมความแข็งแกร่งให้กล่องขาเข้าที่ร่วมมือกัน/ใช้ร่วมกัน Gateway เดียวที่ใช้ร่วมกันโดยผู้ปฏิบัติงานที่ไม่ไว้วางใจกันหรือเป็นฝ่ายตรงข้ามกันไม่ใช่การตั้งค่าที่แนะนำ; ให้แยกขอบเขตความไว้วางใจด้วย Gateway แยกกัน (หรือผู้ใช้/โฮสต์ OS แยกกัน)
นอกจากนี้ยังส่งออก security.trust_model.multi_user_heuristic เมื่อการตั้งค่าบ่งชี้ว่าน่าจะมีทางเข้าจากผู้ใช้ร่วมกัน (เช่น นโยบาย DM/กลุ่มแบบเปิด, เป้าหมายกลุ่มที่ตั้งค่าไว้, หรือกฎผู้ส่งแบบไวลด์การ์ด) และเตือนว่า OpenClaw เป็นโมเดลความไว้วางใจแบบผู้ช่วยส่วนตัวโดยค่าเริ่มต้น
สำหรับการตั้งค่าผู้ใช้ร่วมกันโดยตั้งใจ คำแนะนำจากการตรวจสอบคือให้ sandbox ทุกเซสชัน จำกัดการเข้าถึงระบบไฟล์ไว้เฉพาะเวิร์กสเปซ และเก็บตัวตนหรือข้อมูลรับรองส่วนตัว/ส่วนบุคคลออกจากรันไทม์นั้น
นอกจากนี้ยังเตือนเมื่อมีการใช้โมเดลขนาดเล็ก (<=300B) โดยไม่มี sandboxing และเปิดใช้เครื่องมือเว็บ/เบราว์เซอร์
สำหรับทางเข้า Webhook เมื่อเริ่มต้นระบบจะบันทึกคำเตือนความปลอดภัยแบบไม่ถึงขั้นล้มเหลว และการตรวจสอบจะทำเครื่องหมายการใช้ hooks.token ซ้ำกับค่าการตรวจสอบสิทธิ์ shared-secret ของ Gateway ที่ยังใช้งานอยู่ รวมถึง gateway.auth.token / OPENCLAW_GATEWAY_TOKEN และ gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD นอกจากนี้ยังเตือนเมื่อ:
hooks.tokenสั้นhooks.path="/"- ไม่ได้ตั้งค่า
hooks.defaultSessionKey hooks.allowedAgentIdsไม่ถูกจำกัด- เปิดใช้การ override
sessionKeyของคำขอ - เปิดใช้การ override โดยไม่มี
hooks.allowedSessionKeyPrefixes
หากส่งการตรวจสอบสิทธิ์ด้วยรหัสผ่านของ Gateway เฉพาะตอนเริ่มต้น ให้ส่งค่าเดียวกันไปยัง openclaw security audit --auth password --password <password> เพื่อให้การตรวจสอบสามารถตรวจเทียบกับ hooks.token ได้
รัน openclaw doctor --fix เพื่อหมุน hooks.token ที่ถูกคงไว้และนำกลับมาใช้ซ้ำ จากนั้นอัปเดตผู้ส่ง hook ภายนอกให้ใช้โทเค็น hook ใหม่
นอกจากนี้ยังเตือนเมื่อมีการตั้งค่า Docker ของ sandbox ขณะที่โหมด sandbox ปิดอยู่, เมื่อ gateway.nodes.denyCommands ใช้รายการที่คล้ายแพตเทิร์น/ไม่รู้จักซึ่งไม่มีผล (จับคู่เฉพาะชื่อคำสั่ง node แบบตรงตัวเท่านั้น ไม่ใช่การกรองข้อความ shell), เมื่อ gateway.nodes.allowCommands เปิดใช้คำสั่ง node ที่อันตรายอย่างชัดเจน, เมื่อ tools.profile="minimal" ส่วนกลางถูก override โดยโปรไฟล์เครื่องมือของ agent, เมื่อเครื่องมือเขียน/แก้ไขถูกปิดใช้งานแต่ exec ยังพร้อมใช้งานโดยไม่มีขอบเขตระบบไฟล์ sandbox ที่จำกัด, เมื่อ DM หรือกลุ่มแบบเปิดเปิดเผยเครื่องมือรันไทม์/ระบบไฟล์โดยไม่มีตัวป้องกัน sandbox/เวิร์กสเปซ, และเมื่อเครื่องมือของ Plugin ที่ติดตั้งไว้อาจเข้าถึงได้ภายใต้นโยบายเครื่องมือแบบผ่อนปรน
นอกจากนี้ยังทำเครื่องหมาย gateway.allowRealIpFallback=true (ความเสี่ยงการปลอมแปลง header หากตั้งค่า proxy ผิด) และ discovery.mdns.mode="full" (การรั่วไหลของเมทาดาทาผ่านระเบียน mDNS TXT)
นอกจากนี้ยังเตือนเมื่อเบราว์เซอร์ sandbox ใช้เครือข่าย Docker bridge โดยไม่มี sandbox.browser.cdpSourceRange
นอกจากนี้ยังทำเครื่องหมายโหมดเครือข่าย Docker ของ sandbox ที่อันตราย (รวมถึง host และการ join namespace แบบ container:*)
นอกจากนี้ยังเตือนเมื่อคอนเทนเนอร์ Docker ของเบราว์เซอร์ sandbox ที่มีอยู่ขาด label hash หรือมี label hash เก่า (เช่น คอนเทนเนอร์ก่อนการ migration ที่ไม่มี openclaw.browserConfigEpoch) และแนะนำ openclaw sandbox recreate --browser --all
นอกจากนี้ยังเตือนเมื่อระเบียนการติดตั้ง Plugin/hook แบบ npm ไม่ได้ pin, ขาดเมทาดาทา integrity, หรือเบี่ยงเบนจากเวอร์ชันแพ็กเกจที่ติดตั้งอยู่ในปัจจุบัน
จะเตือนเมื่อ allowlist ของช่องทางพึ่งพาชื่อ/อีเมล/แท็กที่เปลี่ยนแปลงได้แทน ID ที่เสถียร (Discord, Slack, Google Chat, Microsoft Teams, Mattermost, ขอบเขต IRC เมื่อใช้ได้)
จะเตือนเมื่อ gateway.auth.mode="none" ทำให้ HTTP API ของ Gateway เข้าถึงได้โดยไม่มี shared secret (/tools/invoke รวมถึง endpoint /v1/* ใด ๆ ที่เปิดใช้)
การตั้งค่าที่ขึ้นต้นด้วย dangerous/dangerously คือ override ของผู้ปฏิบัติงานแบบ break-glass ที่ชัดเจน; การเปิดใช้งานรายการใดรายการหนึ่งไม่ใช่รายงานช่องโหว่ด้านความปลอดภัยโดยตัวมันเอง
สำหรับรายการพารามิเตอร์อันตรายทั้งหมด โปรดดูส่วน "สรุปแฟล็กที่ไม่ปลอดภัยหรืออันตราย" ใน ความปลอดภัย
สามารถยอมรับ finding ที่ตั้งใจให้คงอยู่ได้ด้วย 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" } ] } }}finding ที่ถูกระงับจะถูกนำออกจาก summary และรายการ findings ที่ใช้งานอยู่
เอาต์พุต JSON จะเก็บไว้ภายใต้ suppressedFindings เพื่อให้ตรวจสอบย้อนหลังได้
เมื่อมีการตั้งค่าการระงับ เอาต์พุตที่ใช้งานอยู่จะเก็บ finding ระดับข้อมูล
security.audit.suppressions.active ที่ไม่สามารถระงับได้ไว้ด้วย เพื่อให้ผู้อ่านรู้ว่าการตรวจสอบ
ถูกกรองแล้ว แฟล็กการตั้งค่าที่อันตรายจะถูกส่งออกหนึ่งแฟล็กต่อหนึ่ง finding ดังนั้น
การยอมรับแฟล็กอันตรายหนึ่งรายการจะไม่ซ่อนแฟล็กอื่นที่เปิดใช้งานและใช้
config.insecure_or_dangerous_flags checkId เดียวกัน
เนื่องจากการระงับสามารถซ่อนความเสี่ยงที่คงอยู่ได้ การเพิ่มหรือลบผ่าน
คำสั่ง shell ที่รันโดย agent ต้องได้รับอนุมัติ exec เว้นแต่ว่า exec กำลังรันอยู่แล้ว
ด้วย security="full" และ ask="off" สำหรับระบบอัตโนมัติภายในเครื่องที่ไว้วางใจได้
พฤติกรรม SecretRef:
security auditจะแก้ค่า SecretRef ที่รองรับในโหมดอ่านอย่างเดียวสำหรับเส้นทางเป้าหมายของมัน- หาก SecretRef ไม่พร้อมใช้งานในเส้นทางคำสั่งปัจจุบัน การตรวจสอบจะดำเนินต่อและรายงาน
secretDiagnostics(แทนที่จะ crash) --tokenและ--passwordจะ override การตรวจสอบสิทธิ์ deep-probe เฉพาะสำหรับการเรียกคำสั่งครั้งนั้นเท่านั้น; จะไม่เขียนการตั้งค่าหรือ mapping ของ SecretRef ใหม่
เอาต์พุต JSON
ใช้ --json สำหรับการตรวจสอบ CI/นโยบาย:
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 เปลี่ยน
--fix จะใช้การแก้ไขที่ปลอดภัยและกำหนดผลได้แน่นอน:
- เปลี่ยน
groupPolicy="open"ที่พบบ่อยเป็นgroupPolicy="allowlist"(รวมถึงรูปแบบบัญชีในช่องทางที่รองรับ) - เมื่อ policy ของกลุ่ม WhatsApp เปลี่ยนเป็น
allowlistจะเติมค่าเริ่มต้นให้groupAllowFromจาก ไฟล์allowFromที่จัดเก็บไว้เมื่อรายการนั้นมีอยู่และการตั้งค่ายังไม่ได้ กำหนดallowFrom - ตั้งค่า
logging.redactSensitiveจาก"off"เป็น"tools" - เพิ่มความเข้มงวดของสิทธิ์สำหรับ state/config และไฟล์ที่มักมีข้อมูลละเอียดอ่อน
(
credentials/*.json,auth-profiles.json,sessions.json, session*.jsonl) - เพิ่มความเข้มงวดของไฟล์ include การตั้งค่าที่อ้างอิงจาก
openclaw.jsonด้วย - ใช้
chmodบนโฮสต์ POSIX และรีเซ็ตicaclsบน Windows
--fix จะไม่:
- หมุนโทเค็น/รหัสผ่าน/API key
- ปิดใช้งานเครื่องมือ (
gateway,cron,exec, ฯลฯ) - เปลี่ยนตัวเลือก bind/auth/การเปิดเผยเครือข่ายของ gateway
- ลบหรือเขียน Plugin/Skills ใหม่