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 ได้
สิ่งที่ตรวจสอบ
โมเดล DM/ความไว้วางใจ
- เตือนเมื่อผู้ส่ง DM หลายรายใช้เซสชันหลักร่วมกัน และแนะนำโหมด DM ที่ปลอดภัย:
session.dmScope="per-channel-peer"(หรือper-account-channel-peerสำหรับช่องทางที่มีหลายบัญชี) สำหรับกล่องข้อความเข้าที่ใช้ร่วมกัน นี่เป็นการเสริมความปลอดภัยสำหรับการทำงานร่วมกัน/กล่องข้อความเข้าที่ใช้ร่วมกัน ไม่ใช่การแยกผู้ดำเนินการที่ไม่ไว้วางใจซึ่งกันและกัน ให้แบ่งขอบเขตความไว้วางใจด้วย Gateway แยกกัน (หรือผู้ใช้ระบบปฏิบัติการ/โฮสต์แยกกัน) สำหรับกรณีดังกล่าว - แสดง
security.trust_model.multi_user_heuristicเมื่อการกำหนดค่าบ่งชี้ว่ามีแนวโน้มจะรับข้อมูลเข้าจากผู้ใช้หลายรายร่วมกัน (เช่น นโยบาย DM/กลุ่มแบบเปิด เป้าหมายกลุ่มที่กำหนดค่าไว้ หรือกฎผู้ส่งแบบไวลด์การ์ด) — โมเดลความไว้วางใจเริ่มต้นของ OpenClaw คือผู้ช่วยส่วนตัว (ผู้ดำเนินการหนึ่งราย) ไม่ใช่การแยกผู้เช่าหลายรายในสภาพแวดล้อมที่เป็นภัย สำหรับการตั้งค่าแบบใช้ร่วมกันหลายรายโดยเจตนา: ให้แซนด์บ็อกซ์ทุกเซสชัน จำกัดการเข้าถึงระบบไฟล์ไว้ในขอบเขตเวิร์กสเปซ และไม่นำข้อมูลประจำตัวหรือข้อมูลรับรองส่วนบุคคล/ส่วนตัวมาไว้บนรันไทม์นั้น - เตือนเมื่อใช้โมเดลขนาดเล็ก (พารามิเตอร์
<=300B) โดยไม่มีแซนด์บ็อกซ์และเปิดใช้เครื่องมือเว็บ/เบราว์เซอร์
Webhook/ฮุก
เมื่อเริ่มต้น ระบบจะบันทึกคำเตือนด้านความปลอดภัยที่ไม่ทำให้การทำงานล้มเหลว และการตรวจสอบจะรายงานการนำค่าการยืนยันตัวตนด้วยข้อมูลลับที่ใช้ร่วมกันของ Gateway ที่ยังใช้งานอยู่กลับมาใช้ซ้ำใน hooks.token (gateway.auth.token / OPENCLAW_GATEWAY_TOKEN, gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD) นอกจากนี้ยังเตือนเมื่อ:
hooks.tokenสั้นเกินไปhooks.path="/"- ไม่ได้ตั้งค่า
hooks.defaultSessionKey hooks.allowedAgentIdsไม่มีข้อจำกัด- เปิดใช้การแทนที่
sessionKeyของคำขอ - เปิดใช้การแทนที่โดยไม่มี
hooks.allowedSessionKeyPrefixes
เรียกใช้ openclaw doctor --fix เพื่อหมุนเวียน hooks.token ที่บันทึกถาวรและถูกนำกลับมาใช้ซ้ำ จากนั้นอัปเดตผู้ส่งฮุกภายนอกให้ใช้โทเค็นใหม่
แซนด์บ็อกซ์/เครื่องมือ
- เตือนเมื่อกำหนดค่าการตั้งค่า Docker ของแซนด์บ็อกซ์ขณะที่ปิดโหมดแซนด์บ็อกซ์
- เตือนเมื่อ
gateway.nodes.denyCommandsใช้รายการที่มีลักษณะคล้ายแพตเทิร์นหรือไม่รู้จักซึ่งไม่มีผล (การจับคู่ใช้เฉพาะชื่อคำสั่ง Node แบบตรงกันทุกประการ ไม่ใช่การกรองข้อความเชลล์) - เตือนเมื่อ
gateway.nodes.allowCommandsเปิดใช้คำสั่ง Node ที่เป็นอันตรายอย่างชัดเจน - เตือนเมื่อโปรไฟล์เครื่องมือของเอเจนต์แทนที่
tools.profile="minimal"ส่วนกลาง - เตือนเมื่อปิดใช้เครื่องมือเขียน/แก้ไข แต่ยังคงใช้
execได้โดยไม่มีขอบเขตระบบไฟล์ของแซนด์บ็อกซ์ที่จำกัดการทำงาน - เตือนเมื่อ DM หรือกลุ่มแบบเปิดเปิดให้เข้าถึงเครื่องมือรันไทม์/ระบบไฟล์โดยไม่มีตัวป้องกันแซนด์บ็อกซ์/เวิร์กสเปซ
- เตือนเมื่อเครื่องมือของ Plugin ที่ติดตั้งไว้อาจเข้าถึงได้ภายใต้นโยบายเครื่องมือแบบผ่อนปรน
เบราว์เซอร์ในแซนด์บ็อกซ์
- เตือนเมื่อเบราว์เซอร์ในแซนด์บ็อกซ์ใช้เครือข่าย Docker
bridgeโดยไม่มีsandbox.browser.cdpSourceRange - รายงานโหมดเครือข่าย 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 ไม่ได้ตรึงเวอร์ชัน ไม่มีข้อมูลเมตาความสมบูรณ์ หรือแตกต่างจากเวอร์ชันแพ็กเกจที่ติดตั้งอยู่ในปัจจุบัน
- เตือนเมื่อรายการอนุญาตของช่องทางอาศัยชื่อ/อีเมล/แท็กที่เปลี่ยนแปลงได้แทน ID ที่เสถียร (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จะเติมค่าเริ่มต้นให้groupAllowFromจากไฟล์allowFromที่จัดเก็บไว้ หากมีรายการดังกล่าวและการกำหนดค่ายังไม่ได้ระบุallowFrom - ตั้งค่า
logging.redactSensitiveจาก"off"เป็น"tools" - ปรับสิทธิ์ของสถานะ/การกำหนดค่าและไฟล์สำคัญที่ละเอียดอ่อนทั่วไปให้เข้มงวดยิ่งขึ้น (
credentials/*.json,auth-profiles.json,openclaw-agent.sqliteและอาร์ติแฟกต์เซสชันรุ่นเก่า) - ปรับสิทธิ์ของไฟล์รวมการกำหนดค่าที่อ้างอิงจาก
openclaw.jsonให้เข้มงวดยิ่งขึ้นด้วย - ใช้
chmodบนโฮสต์ POSIX และการรีเซ็ตicaclsบน Windows
--fix ไม่:
- หมุนเวียนโทเค็น/รหัสผ่าน/คีย์ API
- ปิดใช้เครื่องมือ (
gateway,cron,execเป็นต้น) - เปลี่ยนตัวเลือกการผูก/การยืนยันตัวตน/การเปิดเผยต่อเครือข่ายของ Gateway
- นำ Plugin/Skills ออกหรือเขียนใหม่