Gateway
การดำเนินการกับไฟล์อย่างปลอดภัย
OpenClaw ใช้ @openclaw/fs-safe สำหรับการดำเนินการกับไฟล์ภายในเครื่องที่มีความอ่อนไหวด้านความปลอดภัย ได้แก่ การอ่าน/เขียนที่จำกัดขอบเขตไว้ภายในไดเรกทอรีราก การแทนที่แบบอะตอมมิก การแตกไฟล์เก็บถาวร พื้นที่ทำงานชั่วคราว สถานะ JSON และการจัดการไฟล์ข้อมูลลับ
นี่คือ กลไกป้องกันระดับไลบรารี สำหรับโค้ด OpenClaw ที่เชื่อถือได้ซึ่งรับชื่อพาธที่ไม่น่าเชื่อถือ ไม่ใช่แซนด์บ็อกซ์ สิทธิ์ของระบบไฟล์บนโฮสต์ ผู้ใช้ระบบปฏิบัติการ คอนเทนเนอร์ และนโยบายของเอเจนต์/เครื่องมือ ยังคงเป็นตัวกำหนดขอบเขตความเสียหายที่แท้จริง
ค่าเริ่มต้น: ไม่มีตัวช่วย Python
OpenClaw ตั้งค่าตัวช่วย Python แบบ POSIX ของ fs-safe เป็น ปิด โดยค่าเริ่มต้น:
- Gateway ไม่ควรสร้างกระบวนการเสริม Python แบบถาวร เว้นแต่ผู้ดูแลระบบจะเลือกเปิดใช้
- การติดตั้งส่วนใหญ่ไม่จำเป็นต้องใช้การเสริมความแข็งแกร่งเพิ่มเติมสำหรับการแก้ไขไดเรกทอรีแม่
- การปิดใช้ Python ช่วยให้พฤติกรรมขณะทำงานคาดการณ์ได้ในสภาพแวดล้อมเดสก์ท็อป Docker, CI และแอปที่รวมทุกอย่างไว้ในชุดเดียว
OpenClaw เปลี่ยนเฉพาะ ค่าเริ่มต้น เท่านั้น การตั้งค่าที่ระบุอย่างชัดเจนจะมีผลเหนือกว่าเสมอ:
# พฤติกรรมเริ่มต้นของ OpenClaw: ใช้กลไกสำรองของ fs-safe เฉพาะ NodeOPENCLAW_FS_SAFE_PYTHON_MODE=off # เลือกใช้ตัวช่วยเมื่อพร้อมใช้งาน และใช้กลไกสำรองหากไม่พร้อมใช้งานOPENCLAW_FS_SAFE_PYTHON_MODE=auto # ปฏิเสธการทำงานอย่างปลอดภัยหากไม่สามารถเริ่มตัวช่วยได้OPENCLAW_FS_SAFE_PYTHON_MODE=require # พาธของอินเทอร์พรีเตอร์ที่ระบุอย่างชัดเจนซึ่งเป็นตัวเลือกOPENCLAW_FS_SAFE_PYTHON=/usr/bin/python3ชื่อตัวแปรสภาพแวดล้อมทั่วไปของ fs-safe ก็ใช้งานได้เช่นกัน ได้แก่ FS_SAFE_PYTHON_MODE และ FS_SAFE_PYTHON
ใช้ require (ไม่ใช่ auto) เมื่อตัวช่วยเป็นส่วนหนึ่งของมาตรการรักษาความปลอดภัยของคุณ เพราะ auto จะเปลี่ยนไปใช้พฤติกรรมเฉพาะ Node โดยไม่มีการแจ้งเตือน หากไม่สามารถเริ่มตัวช่วยได้
สิ่งที่ยังคงได้รับการปกป้องเมื่อไม่มี Python
เมื่อปิดตัวช่วย OpenClaw ยังคงได้รับกลไกป้องกันเฉพาะ Node ของ fs-safe:
- ปฏิเสธการหลุดออกจากพาธสัมพัทธ์ (
..) พาธสัมบูรณ์ และตัวคั่นพาธในตำแหน่งที่อนุญาตเฉพาะชื่อเดี่ยว - ดำเนินการผ่านแฮนเดิลรากที่เชื่อถือได้ แทนการตรวจสอบเฉพาะกิจด้วย
path.resolve(...).startsWith(...) - ปฏิเสธรูปแบบลิงก์สัญลักษณ์และฮาร์ดลิงก์ใน API ที่กำหนดให้ใช้นโยบายดังกล่าว
- เปิดไฟล์พร้อมตรวจสอบอัตลักษณ์ของไฟล์ในกรณีที่ API ส่งคืนหรือรับเนื้อหาไฟล์
- เขียนไฟล์สถานะ/การกำหนดค่าผ่านไฟล์ชั่วคราวข้างเคียงแบบอะตอมมิก แล้วเปลี่ยนชื่อ
- บังคับใช้ขีดจำกัดจำนวนไบต์สำหรับการอ่านและการแตกไฟล์เก็บถาวร
- ใช้โหมดไฟล์แบบส่วนตัวกับข้อมูลลับและไฟล์สถานะในกรณีที่ API กำหนด
สิ่งนี้ครอบคลุมแบบจำลองภัยคุกคามตามปกติของ OpenClaw ซึ่งคือโค้ด Gateway ที่เชื่อถือได้จัดการอินพุตพาธที่ไม่น่าเชื่อถือจากโมเดล/Plugin/ช่องทาง ภายในขอบเขตของผู้ดูแลระบบที่เชื่อถือได้รายเดียว
สิ่งที่ Python เพิ่มเข้ามา
บน POSIX ตัวช่วยที่เป็นตัวเลือกจะคงกระบวนการ Python ถาวรไว้หนึ่งกระบวนการ และใช้การดำเนินการกับระบบไฟล์แบบสัมพัทธ์กับตัวระบุไฟล์สำหรับการแก้ไขไดเรกทอรีแม่ ได้แก่ การเปลี่ยนชื่อ การลบ การสร้างไดเรกทอรี การตรวจสอบสถานะ/แสดงรายการ และพาธการเขียนบางประเภท
วิธีนี้ช่วยลดช่วงเวลาที่อาจเกิดสภาวะแข่งขันระหว่างกระบวนการที่ใช้ UID เดียวกัน ซึ่งอีกกระบวนการหนึ่งอาจสลับไดเรกทอรีแม่ระหว่างการตรวจสอบและการแก้ไข ถือเป็นการป้องกันเชิงลึกบนโฮสต์ที่กระบวนการภายในเครื่องที่ไม่น่าเชื่อถือสามารถแก้ไขไดเรกทอรีเดียวกับที่ OpenClaw ใช้งานได้
หากการปรับใช้งานของคุณมีความเสี่ยงดังกล่าวและรับประกันว่ามี Python ให้ตั้งค่า:
OPENCLAW_FS_SAFE_PYTHON_MODE=requireแนวทางสำหรับ Plugin และแกนหลัก
- การเข้าถึงไฟล์จากฝั่ง Plugin ควรผ่านตัวช่วย
openclaw/plugin-sdk/*ไม่ใช่fsโดยตรง เมื่อพาธมาจากข้อความ เอาต์พุตของโมเดล การกำหนดค่า หรืออินพุตของ Plugin - โค้ดแกนหลักควรใช้ตัวห่อหุ้ม fs-safe ภายใต้
src/infra/*เพื่อให้นโยบายกระบวนการของ OpenClaw มีผลอย่างสม่ำเสมอ - การแตกไฟล์เก็บถาวรควรใช้ตัวช่วยสำหรับไฟล์เก็บถาวรของ fs-safe โดยกำหนดขีดจำกัดขนาด จำนวนรายการ ลิงก์ และปลายทางอย่างชัดเจน
- ข้อมูลลับควรใช้ตัวช่วยข้อมูลลับของ OpenClaw หรือตัวช่วยข้อมูลลับ/สถานะส่วนตัวของ fs-safe อย่าสร้างการตรวจสอบโหมดขึ้นเองรอบ
fs.writeFile - สำหรับการแยกผู้ใช้ภายในเครื่องที่เป็นภัยคุกคาม อย่าพึ่งพา fs-safe เพียงอย่างเดียว ให้เรียกใช้ Gateway แยกกันภายใต้ผู้ใช้ระบบปฏิบัติการหรือโฮสต์ที่แยกกัน หรือใช้แซนด์บ็อกซ์
เนื้อหาที่เกี่ยวข้อง: ความปลอดภัย, การใช้แซนด์บ็อกซ์, การอนุมัติการดำเนินการ, ข้อมูลลับ