---
read_when:
    - การเปลี่ยนการเข้าถึงไฟล์ การแตกไฟล์เก็บถาวร พื้นที่จัดเก็บของพื้นที่ทำงาน หรือตัวช่วยระบบไฟล์ของ Plugin
summary: OpenClaw จัดการการเข้าถึงไฟล์ภายในเครื่องอย่างปลอดภัยอย่างไร และเหตุใดตัวช่วย Python fs-safe แบบเลือกใช้ได้จึงปิดไว้เป็นค่าเริ่มต้น
title: การดำเนินการกับไฟล์อย่างปลอดภัย
x-i18n:
    generated_at: "2026-05-06T09:16:02Z"
    model: gpt-5.5
    provider: openai
    source_hash: 19d5b31ec2f2c7ab1033bdb55a701c60468dfac58142f726ecbc9ac933f68e30
    source_path: gateway/security/secure-file-operations.md
    workflow: 16
---

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

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

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

OpenClaw ตั้งค่าเริ่มต้นให้ตัวช่วย POSIX Python ของ fs-safe เป็น **ปิด**

เหตุผล:

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

OpenClaw เปลี่ยนเฉพาะค่าเริ่มต้นเท่านั้น หากคุณตั้งโหมดไว้อย่างชัดเจน fs-safe จะเคารพค่านั้น:

```bash
# Default OpenClaw behavior: Node-only fs-safe fallbacks.
OPENCLAW_FS_SAFE_PYTHON_MODE=off

# Opt into the helper when available, falling back if unavailable.
OPENCLAW_FS_SAFE_PYTHON_MODE=auto

# Fail closed if the helper cannot start.
OPENCLAW_FS_SAFE_PYTHON_MODE=require

# Optional explicit interpreter.
OPENCLAW_FS_SAFE_PYTHON=/usr/bin/python3
```

ชื่อ fs-safe ทั่วไปก็ใช้งานได้เช่นกัน: `FS_SAFE_PYTHON_MODE` และ `FS_SAFE_PYTHON`

## สิ่งที่ยังได้รับการป้องกันเมื่อไม่มี Python

เมื่อตัวช่วยปิดอยู่ OpenClaw ยังคงใช้พาธ Node ของ fs-safe สำหรับ:

- ปฏิเสธการหลุดออกจากพาธสัมพัทธ์ เช่น `..`, พาธสัมบูรณ์ และตัวคั่นพาธในจุดที่อนุญาตเฉพาะชื่อ;
- แก้ไขการดำเนินการผ่านแฮนเดิลรากที่เชื่อถือได้ แทนการตรวจสอบแบบเฉพาะกิจด้วย `path.resolve(...).startsWith(...)`;
- ปฏิเสธรูปแบบ symlink และ hardlink บน API ที่กำหนดนโยบายนี้;
- เปิดไฟล์พร้อมการตรวจสอบอัตลักษณ์ในจุดที่ API ส่งคืนหรือรับเนื้อหาไฟล์;
- เขียนแบบอะตอมมิกผ่านไฟล์ชั่วคราวข้างเคียงสำหรับไฟล์สถานะ/คอนฟิก;
- จำกัดจำนวนไบต์สำหรับการอ่านและการแตกไฟล์เก็บถาวร;
- ใช้โหมดส่วนตัวสำหรับไฟล์ลับและไฟล์สถานะในจุดที่ API กำหนด

การป้องกันเหล่านี้ครอบคลุมโมเดลภัยคุกคามปกติของ OpenClaw: โค้ด Gateway ที่เชื่อถือได้จัดการอินพุตพาธจากโมเดล/Plugin/ช่องทางที่ไม่น่าเชื่อถือ ภายในขอบเขตผู้ปฏิบัติงานเดียวที่เชื่อถือได้

## สิ่งที่ Python เพิ่มเข้ามา

บน POSIX ตัวช่วยเสริมของ fs-safe จะคงกระบวนการ Python แบบถาวรไว้หนึ่งกระบวนการ และใช้การดำเนินการกับระบบไฟล์แบบอ้างอิงสัมพันธ์กับ fd สำหรับการกลายพันธุ์ของไดเรกทอรีแม่ เช่น rename, remove, mkdir, stat/list และพาธการเขียนบางส่วน

สิ่งนี้ลดช่วงเวลา race แบบ same-UID ที่กระบวนการอื่นสามารถสลับไดเรกทอรีแม่ระหว่างการตรวจสอบและการกลายพันธุ์ได้ เป็นการป้องกันเชิงลึกสำหรับโฮสต์ที่กระบวนการภายในเครื่องที่ไม่น่าเชื่อถือสามารถแก้ไขไดเรกทอรีเดียวกับที่ OpenClaw กำลังดำเนินการอยู่

หากการปรับใช้ของคุณมีความเสี่ยงนี้และรับประกันว่ามี Python อยู่ ให้ใช้:

```bash
OPENCLAW_FS_SAFE_PYTHON_MODE=require
```

ใช้ `require` แทน `auto` เมื่อตัวช่วยเป็นส่วนหนึ่งของจุดยืนด้านความปลอดภัยของคุณ; `auto` จะถอยกลับไปใช้พฤติกรรมเฉพาะ Node โดยเจตนาหากตัวช่วยไม่พร้อมใช้งาน

## คำแนะนำสำหรับ Plugin และแกนหลัก

- การเข้าถึงไฟล์ที่หันหน้าให้ Plugin ควรผ่านตัวช่วย `openclaw/plugin-sdk/*` ไม่ใช่ `fs` โดยตรง เมื่อพาธมาจากข้อความ, เอาต์พุตของโมเดล, คอนฟิก หรืออินพุตของ Plugin
- โค้ดแกนหลักควรใช้ wrapper fs-safe ภายในเครื่องภายใต้ `src/infra/*` เพื่อให้นโยบายกระบวนการของ OpenClaw ถูกนำไปใช้อย่างสม่ำเสมอ
- การแตกไฟล์เก็บถาวรควรใช้ตัวช่วยไฟล์เก็บถาวรของ fs-safe พร้อมขีดจำกัดด้านขนาด, จำนวนรายการ, ลิงก์ และปลายทางที่ระบุอย่างชัดเจน
- ความลับควรใช้ตัวช่วยความลับของ OpenClaw หรือตัวช่วยความลับ/สถานะส่วนตัวของ fs-safe; อย่าเขียนการตรวจสอบโหมดรอบ `fs.writeFile` เอง
- หากคุณต้องการการแยกผู้ใช้ภายในเครื่องที่เป็นศัตรู อย่าพึ่งพา fs-safe เพียงอย่างเดียว ให้รัน Gateway แยกกันภายใต้ผู้ใช้/โฮสต์ OS แยกกัน หรือใช้แซนด์บ็อกซ์

ที่เกี่ยวข้อง: [ความปลอดภัย](/th/gateway/security), [แซนด์บ็อกซ์](/th/gateway/sandboxing), [การอนุมัติ Exec](/th/tools/exec-approvals), [ความลับ](/th/gateway/secrets).
