บทความ › AI

Sandbox ให้ AI เขียนโค้ด: จำกัดไฟล์และเน็ตด้วย bubblewrap กับ Seatbelt

ให้ AI coding agent รันคำสั่งได้เองโดยไม่ต้องกดอนุมัติทุกครั้ง ด้วย sandbox ระดับ OS ตั้งขอบเขตไฟล์และเน็ตยังไง ค่าเริ่มต้นที่ต้องรู้ และส่วนที่ sandbox ไม่ครอบ

กลาง อ่าน 8 นาที 23 ตุลาคม 2569

อ่านจบแล้วจะรู้
  • sandbox ระดับ OS (bubblewrap บน Linux, Seatbelt บน macOS) ให้ AI รันคำสั่งได้เองภายในขอบเขต Anthropic รายงานว่าลดการขออนุมัติได้ 84% ในการใช้งานภายใน
  • ต้องมีทั้งสองชั้น ไฟล์กับเน็ต มีแค่ชั้นเดียวยังรั่ว
  • ค่าเริ่มต้นของ Claude Code อ่านไฟล์ได้เกือบทั้งเครื่องรวม ~/.ssh ต้องปิดการอ่านไฟล์ลับเอง
  • sandbox ครอบแค่คำสั่ง shell เครื่องมือ Read/Edit, MCP server และ hook อยู่นอก sandbox

AI coding agent ที่ต้องขออนุมัติทุกคำสั่ง ทำให้คนกดอนุมัติจนชิน แล้วสุดท้ายกดผ่านโดยไม่อ่าน ซึ่งอันตรายกว่าไม่ถามเลย ทางออกที่ Anthropic ใช้กับ Claude Code คือ sandbox ระดับ OS: ให้ AI รันคำสั่งได้เองภายในขอบเขตไฟล์และเน็ตที่กำหนด ถามคนเฉพาะเมื่อจะออกนอกขอบเขต

ตรวจข้อเท็จจริงกับเอกสาร sandboxing ของ Claude Code, บทความวิศวกรรมของ Anthropic (ตุลาคม 2025) และ README ของ sandbox-runtime ณ ตุลาคม 2026 ชื่อ setting และค่าเริ่มต้นเปลี่ยนตามเวอร์ชัน ตรวจกับเอกสารของเวอร์ชันที่ใช้ก่อนเสมอ

ทำไม sandbox ดีกว่าการขออนุมัติ

การขออนุมัติทุกคำสั่งพึ่งความตั้งใจของคน ซึ่งหมดเร็ว sandbox ย้ายการตัดสินไปให้ OS: ภายในขอบเขตทำได้เลย ออกนอกขอบเขต OS ไม่ยอม ไม่ว่า AI จะถูกหลอกด้วย prompt injection หรือเขียนคำสั่งพลาดเอง

Anthropic รายงานว่าในการใช้งานภายใน sandbox ลดการขออนุมัติลง 84% (บทความไม่ได้อธิบายวิธีวัด)

ตัวอย่างคำนวณ: 84% แปลว่าอะไรในหนึ่งวัน

สมมติ session หนึ่งมีคำขออนุมัติ 100 ครั้ง ครั้งละ 5 วินาที (ตัวเลขสมมติเพื่อคิดตาม)

  1. ก่อนเปิด sandbox: 100 × 5 = 500 วินาที ราว 8 นาทีที่ต้องนั่งเฝ้า
  2. ลด 84%: 100 × (1 − 0.84) = 16 ครั้ง
  3. เวลาที่ใช้: 16 × 5 = 80 วินาที

ที่สำคัญกว่าเวลาคือ 16 ครั้งที่เหลือเป็นเรื่องที่ควรถามจริง เช่นจะต่อ domain ใหม่ หรือจะเขียนนอกโฟลเดอร์งาน คนจึงมีแรงอ่านทุกครั้ง

ทำงานยังไง

ระบบกลไกต้องติดตั้ง
macOSSeatbelt (มากับ OS)ไม่ต้อง
Linux และ WSL2bubblewrap แยก namespace รวมถึง network namespacebubblewrap, socat
Windows แบบ nativeClaude Code รันคำสั่งไม่มี sandboxใช้ WSL2 แทน

สองชั้นที่ทำงานคู่กัน

  • ไฟล์ คำสั่งเขียนได้เฉพาะโฟลเดอร์งาน โฟลเดอร์ temp ของผู้ใช้ และโฟลเดอร์ที่เพิ่มไว้ ไฟล์ config ของ Claude Code เองถูกกันเขียนแม้อยู่ในโฟลเดอร์งาน เพราะถ้าแก้ได้ คำสั่งจะให้สิทธิ์ตัวเองหรือเพิ่ม hook ที่รันนอก sandbox ได้
  • เน็ต คำสั่งไม่มีทางออกเน็ตตรง ทุกการเชื่อมต่อผ่าน proxy บนเครื่องที่อยู่นอก sandbox proxy ตรวจชื่อ host กับรายการ domain ที่อนุญาต ซึ่งเริ่มต้นว่าง

เอกสารเน้นว่าต้องมีทั้งสองชั้น ไม่มีชั้นเน็ต agent ที่ถูกหลอกส่งไฟล์อย่าง SSH key ออกไปได้ ไม่มีชั้นไฟล์ มันแก้ไฟล์ระบบเพื่อเปิดทางเน็ตให้ตัวเองได้

ค่าเริ่มต้นที่ต้องรู้

ค่าเริ่มต้นเปลี่ยนด้วย
เขียนโฟลเดอร์งาน, temp, โฟลเดอร์ที่เพิ่มไว้filesystem.allowWrite, filesystem.denyWrite
อ่านเกือบทั้งเครื่อง รวม ~/.ssh และ ~/.aws/credentialsfilesystem.denyRead, credentials
เน็ตผ่าน proxy, domain ที่อนุญาตเริ่มต้นว่างnetwork.allowedDomains, network.deniedDomains
ตัวแปร envสืบทอดจาก Claude Code รวม secret ที่อยู่ใน envcredentials, CLAUDE_CODE_SUBPROCESS_ENV_SCRUB

เปิด sandbox แล้วไม่ได้แปลว่าไฟล์ลับปลอดภัย ค่าเริ่มต้นยังอ่าน ~/.ssh ได้ ต้องปิดเอง

ตั้งค่า: Ubuntu หรือ WSL2

ติดตั้งของที่ต้องใช้ (Debian/Ubuntu ตามเอกสาร)

sudo apt-get install bubblewrap socat

เปิดใน session ด้วยคำสั่ง /sandbox แผงที่ขึ้นมาบอกด้วยว่าขาดอะไร หรือใส่ใน ~/.claude/settings.json:

{
  "sandbox": {
    "enabled": true,
    "allowUnsandboxedCommands": false,
    "filesystem": {
      "denyRead": ["~/.ssh", "~/.aws", "~/.config/gcloud"]
    },
    "network": {
      "allowedDomains": ["github.com", "*.npmjs.org", "registry.npmjs.org", "pypi.org", "files.pythonhosted.org"]
    }
  }
}
  • allowUnsandboxedCommands: false ปิดทางที่ AI จะขอรันคำสั่งที่ล้มใน sandbox ซ้ำแบบไม่มี sandbox (ปกติคำสั่งที่ล้มขอรันซ้ำนอก sandbox ได้ผ่านพารามิเตอร์ dangerouslyDisableSandbox แล้วผ่านขั้นขออนุมัติตามปกติ)
  • denyRead กันคำสั่ง shell อ่าน key และ credential
  • domain ใส่เท่าที่งานใช้จริง

ทดสอบว่าทำงาน: ให้ AI เป็นคนรัน touch ~/sandbox-probe (คำสั่งที่เราพิมพ์เองหลัง ! มักรันนอก sandbox จึงทดสอบไม่ได้) บน Linux/WSL2 ต้องได้ Read-only file system บน macOS ได้ Operation not permitted ถ้า touch สำเร็จ ให้ลบไฟล์ทิ้งแล้วเปิด /sandbox ดูว่าเปิดอยู่จริงไหม

ใน sandboxคำสั่ง Bash/PowerShellprocess ลูกnpm installนอก sandboxRead/Edit/WebFetchhook, MCP serverคำสั่งที่ยกเว้นไว้
sandbox ครอบเฉพาะคำสั่ง shell ส่วนอื่นใช้กฎ permission

ส่วนที่ sandbox ไม่ครอบ

นี่คือข้อที่คนเข้าใจผิดบ่อยที่สุด sandbox ห่อเฉพาะคำสั่ง shell (Bash, PowerShell, Monitor และ process ลูก) สิ่งเหล่านี้อยู่นอก sandbox:

  • เครื่องมือในตัว Read, Edit, Write, WebFetch, WebSearch ใช้กฎ permission แทน denyRead ไม่หยุดเครื่องมือ Read และ allowedDomains ไม่จำกัด WebFetch ต้องตั้ง deny rule ของ permission แยกอีกชุด
  • process อื่นที่ Claude Code เปิด hook, MCP server ที่รันบนเครื่อง, LSP server, คำสั่ง status line รันด้วยสิทธิ์เต็มของเรา
  • คำสั่งที่พิมพ์เองหลัง ! ใน session ส่วนใหญ่
  • คำสั่งใน excludedCommands และการรันซ้ำนอก sandbox ที่เราอนุมัติ

ถ้าต้องการขอบเขตเดียวครอบทุกอย่าง ให้รัน agent ทั้ง process ใน container, VM หรือใช้ sandbox-runtime (srt) ที่ Anthropic เปิดซอร์สไว้ ซึ่งห่อ process ใดก็ได้ รวมถึง agent ตัวอื่นและ MCP server สถานะ ณ ตุลาคม 2026 ยังเป็น beta research preview

npm install -g @anthropic-ai/sandbox-runtime
srt "curl example.com"        # blocked unless example.com is in ~/.srt-settings.json
srt "cat ~/.ssh/id_rsa"       # Operation not permitted, when ~/.ssh is in denyRead

ข้อจำกัดด้านความปลอดภัย

  • proxy ตัดสินจากชื่อ host ไม่ได้เปิดดู TLS อนุญาต domain กว้าง ๆ อย่าง github.com เปิดทางส่งข้อมูลออกได้ และเอกสารเตือนเรื่อง domain fronting ที่อาจใช้หลบ allowlist
  • Unix socket อนุญาต /var/run/docker.sock เท่ากับให้คุมเครื่อง host ได้ทั้งเครื่อง (บทเรื่อง Docker hardening อธิบายว่าทำไม socket นี้เท่ากับ root)
  • เปิดเขียนกว้างเกิน เขียน .bashrc, .zshrc หรือโฟลเดอร์ใน $PATH ได้ คือเปิดทางให้โค้ดไปรันนอก sandbox ตอนเราเปิด shell ครั้งหน้า
  • enableWeakerNestedSandbox ทำให้ใช้ใน Docker ได้ แต่อ่อนลงมาก ใช้เมื่อมีชั้นแยกอื่นครอบอยู่แล้วเท่านั้น

ข้อผิดพลาดที่เจอบ่อย

  • คิดว่าเปิด sandbox แล้ว key ปลอดภัย ค่าเริ่มต้นยังอ่าน ~/.ssh ได้ ต้องใส่ denyRead หรือ credentials และดีที่สุดคืออย่าเก็บ key ของ production ไว้บนเครื่องที่ AI ทำงาน
  • ใส่ docker * ใน excludedCommands เพราะ docker ใช้ใน sandbox ไม่ได้ เท่ากับให้ AI ใช้ docker ด้วยสิทธิ์เต็ม จำกัดให้แคบที่สุด
  • อนุญาต domain แบบ * เพราะขี้เกียจตอบ prompt ชั้นเน็ตหายไปทั้งชั้น
  • ทดสอบด้วยการพิมพ์คำสั่งเอง คำสั่งหลัง ! มักไม่ผ่าน sandbox ผลทดสอบจึงหลอกตา
  • เปิด sandbox บน Windows native แล้วคิดว่าป้องกันอยู่ ไม่มี sandbox ต้องใช้ WSL2
  • ลืมว่า npm install ก็เป็นคำสั่ง postinstall script จากแพ็กเกจรันใน sandbox ด้วย ซึ่งดี แต่ถ้า excluded ไว้ มันรันด้วยสิทธิ์เต็ม ดูบทเรื่อง supply chain

แหล่งอ้างอิง

คำถามที่พบบ่อย

ใช้บน Windows ได้ไหม

บน Windows แบบ native Claude Code รันคำสั่งโดยไม่มี sandbox ถ้าต้องการ sandbox ให้รัน Claude Code ใน WSL2 ซึ่งใช้ bubblewrap เหมือน Linux

ทำไม ssh หรือ client ฐานข้อมูลต่อไม่ได้ ทั้งที่ใส่ host ใน allowedDomains แล้ว

sandbox ส่งเน็ตผ่าน proxy ด้วยตัวแปร HTTP_PROXY/HTTPS_PROXY เครื่องมือที่ไม่อ่านตัวแปรเหล่านี้ เช่น ssh ธรรมดาและ driver ฐานข้อมูลส่วนใหญ่ จึงต่อไม่ได้ UDP และ ping ก็ออกไม่ได้

เปิด sandbox แล้วปลอดภัยพอให้ปล่อย AI ทำงานคนเดียวไหม

ลดความเสี่ยงได้มาก แต่เอกสารบอกเองว่าไม่ใช่ขอบเขตแยกที่สมบูรณ์ ถ้าต้องการขอบเขตครอบทั้ง process ให้รัน agent ทั้งตัวใน container, VM หรือ sandbox-runtime

คำสั่งและค่าตั้งในบทความทดสอบบนระบบตัวอย่าง ลองบนเครื่องทดสอบก่อนใช้กับระบบจริงเสมอ

อ่านต่อ

#AIขั้นสูง

MCP แบบ Code Mode: ให้ AI เขียนโค้ดเรียก tool แทนเรียกทีละครั้ง

แทนการเรียก MCP tool ทีละครั้งแล้วอ่านผลทุกก้อน ให้ AI เขียนโค้ดเรียก tool เอง ตัวอย่าง 150,000 เหลือ 2,000 token, Code Mode ของ Cloudflare และราคาที่ต้องจ่าย

อ่าน 8 นาที
#AIกลาง

เปิด AI หลาย session พร้อมกัน แล้วส่งงานข้ามกันด้วย ไฟล์ ไม่ใช่แชท

วันเดียวเปิด Claude Code สามหน้าต่าง ทำเว็บ ออกแบบเกม และทำวิดีโอ AI พร้อมกัน ส่งงานข้าม session ด้วย CLAUDE.md, memory และ git พร้อมกับดักเรื่อง worktree ที่เจอจริง

อ่าน 9 นาที
#AIใช้ต่อ

ลองให้ AI ทำเกม Roblox ทั้งเกม: AI เขียนโค้ด คนเป็นตาที่เล่นทดสอบ

บันทึกการทำเกมลาวาขึ้นด้วย Claude Code ทั้งที่ AI เปิด Roblox Studio ไม่ได้ ใช้เวลาเท่าไหร่ อะไรทดแทนการเล่นเองได้ และตรงไหนที่คนต้องเป็นคนตัดสิน

อ่าน 5 นาที