Gateway

การดำเนินการกับไฟล์อย่างปลอดภัย

OpenClaw ใช้ @openclaw/fs-safe สำหรับการดำเนินการกับไฟล์ภายในเครื่องที่มีความอ่อนไหวด้านความปลอดภัย ได้แก่ การอ่าน/เขียนที่จำกัดขอบเขตไว้ภายในไดเรกทอรีราก การแทนที่แบบอะตอมมิก การแตกไฟล์เก็บถาวร พื้นที่ทำงานชั่วคราว สถานะ JSON และการจัดการไฟล์ข้อมูลลับ

นี่คือ กลไกป้องกันระดับไลบรารี สำหรับโค้ด OpenClaw ที่เชื่อถือได้ซึ่งรับชื่อพาธที่ไม่น่าเชื่อถือ ไม่ใช่แซนด์บ็อกซ์ สิทธิ์ของระบบไฟล์บนโฮสต์ ผู้ใช้ระบบปฏิบัติการ คอนเทนเนอร์ และนโยบายของเอเจนต์/เครื่องมือ ยังคงเป็นตัวกำหนดขอบเขตความเสียหายที่แท้จริง

ค่าเริ่มต้น: ไม่มีตัวช่วย Python

OpenClaw ตั้งค่าตัวช่วย Python แบบ POSIX ของ fs-safe เป็น ปิด โดยค่าเริ่มต้น:

  • Gateway ไม่ควรสร้างกระบวนการเสริม Python แบบถาวร เว้นแต่ผู้ดูแลระบบจะเลือกเปิดใช้
  • การติดตั้งส่วนใหญ่ไม่จำเป็นต้องใช้การเสริมความแข็งแกร่งเพิ่มเติมสำหรับการแก้ไขไดเรกทอรีแม่
  • การปิดใช้ Python ช่วยให้พฤติกรรมขณะทำงานคาดการณ์ได้ในสภาพแวดล้อมเดสก์ท็อป Docker, CI และแอปที่รวมทุกอย่างไว้ในชุดเดียว

OpenClaw เปลี่ยนเฉพาะ ค่าเริ่มต้น เท่านั้น การตั้งค่าที่ระบุอย่างชัดเจนจะมีผลเหนือกว่าเสมอ:

bash
# พฤติกรรมเริ่มต้นของ 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 ให้ตั้งค่า:

bash
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 แยกกันภายใต้ผู้ใช้ระบบปฏิบัติการหรือโฮสต์ที่แยกกัน หรือใช้แซนด์บ็อกซ์

เนื้อหาที่เกี่ยวข้อง: ความปลอดภัย, การใช้แซนด์บ็อกซ์, การอนุมัติการดำเนินการ, ข้อมูลลับ

Was this useful?
On this page

On this page