Skip to main content

การกำหนดค่า Sandbox สำหรับ Bash Tool

เรียนรู้วิธีที่ sandboxed Bash tool ของ Claude Code ให้การแยกระบบไฟล์และเครือข่ายเพื่อการทำงานแบบ agent ที่ปลอดภัยและเป็นอิสระมากขึ้น

Bash sandbox ช่วยให้ Claude รันคำสั่ง shell ส่วนใหญ่ได้โดยไม่ต้องหยุดขอสิทธิ์ แทนที่จะอนุมัติทีละคำสั่ง คุณกำหนดว่าไฟล์และโดเมนเครือข่ายใดที่คำสั่งสามารถเข้าถึงได้ และระบบปฏิบัติการบังคับใช้ขอบเขตนั้นสำหรับคำสั่ง Bash ทุกคำสั่งและ child process ของมัน

หน้านี้ครอบคลุม:

หากต้องการเปรียบเทียบวิธีการแยกอื่น ๆ เช่น dev containers, custom containers และ virtual machines โปรดดู Sandbox environments สำหรับการลดการแจ้งเตือนสิทธิ์สำหรับ tool อื่น ๆ นอกจาก Bash โปรดดู permission modes

เริ่มต้นใช้งาน​

sandbox ถูกสร้างไว้ใน Claude Code และทำงานบน macOS, Linux และ WSL2 Windows แบบ native ไม่รองรับ บน Windows ให้รัน Claude Code ภายใน WSL2 distribution

บน macOS ไม่ต้องติดตั้งอะไรเพิ่มเติม: sandboxing ใช้ Seatbelt framework ที่มีอยู่แล้ว บน Linux และ WSL2 sandbox ต้องใช้สองแพ็คเกจ ครอบคลุมใน Set up Linux and WSL2 แม้ว่ายังไม่ได้ติดตั้ง คุณก็สามารถเริ่มด้วย /sandbox ได้ เพราะแผงจะแสดงว่ามีอะไรขาดอยู่หรือไม่

ขั้นตอนการตั้งค่า​

ขั้นที่ 1: รัน /sandbox

เริ่ม session Claude Code และรันคำสั่ง /sandbox:

/sandbox

ซึ่งจะเปิดแผง sandbox พร้อม 3 แท็บ:

  • Mode: เลือกวิธีอนุมัติคำสั่งใน sandbox
  • Overrides: เลือกว่าคำสั่งที่ล้มเหลวใน sandbox จะถูก fallback ไปรันแบบ unsandboxed หรือไม่
  • Config: ดูการตั้งค่า sandbox ที่ resolve แล้ว

ขั้นที่ 2: เลือก mode

บนแท็บ Mode เลือก auto-allow หรือ regular permissions

ขั้นที่ 3: รันคำสั่ง Bash

ขอให้ Claude รันคำสั่ง เช่น build หรือ test suite

ตั้งค่า Linux และ WSL2​

บน Linux และ WSL2 sandbox ต้องใช้สองแพ็คเกจ:

  • bubblewrap: เครื่องมือ sandboxing แบบ unprivileged ที่บังคับใช้การแยกระบบไฟล์
  • socat: relay สำหรับส่งต่อ traffic เครือข่ายผ่าน sandbox proxy

ติดตั้งด้วย package manager ของ distribution:

# Ubuntu/Debian
sudo apt-get install bubblewrap socat

# Fedora
sudo dnf install bubblewrap socat

โหมด Sandbox​

Claude Code มีสองโหมด sandbox:

Auto-allow mode: คำสั่ง Bash จะพยายามรันใน sandbox และได้รับการอนุมัติอัตโนมัติโดยไม่ต้องขอสิทธิ์

Regular permissions mode: คำสั่ง Bash ทุกคำสั่งผ่านกระบวนการสิทธิ์ปกติ แม้ว่าจะอยู่ใน sandbox

กำหนดค่า Sandboxing​

ปรับแต่งพฤติกรรม sandbox ผ่านไฟล์ settings.json ของคุณ

โดยค่าเริ่มต้น คำสั่งใน sandbox เขียนได้เฉพาะ working directory ปัจจุบันและ session temp directory หากต้องการให้คำสั่งย่อยเช่น kubectl, terraform หรือ npm เขียนนอก directory เหล่านั้น ใช้ sandbox.filesystem.allowWrite:

{
"sandbox": {
"enabled": true,
"filesystem": {
"allowWrite": ["~/.kube", "/tmp/build"]
}
}
}

ตาราง Path Prefix​

Prefixความหมายตัวอย่าง
/absolute path จาก root/tmp/build ยังคงเป็น /tmp/build
~/relative ต่อ home directory~/.kube กลายเป็น $HOME/.kube
./ หรือไม่มี prefixrelative ต่อ project root สำหรับ project settings./output ใน .claude/settings.json resolve เป็น <project-root>/output

วิธีการทำงานของ Sandboxing​

การแยกระบบไฟล์​

Sandboxed Bash tool จำกัดการเข้าถึงระบบไฟล์:

  • พฤติกรรมการเขียนเริ่มต้น: อ่านและเขียน working directory ปัจจุบันและ subdirectory รวมถึง session temp directory
  • พฤติกรรมการอ่านเริ่มต้น: อ่านได้ทั้งเครื่อง ยกเว้น directory บางแห่งที่ถูก deny
  • การเข้าถึงที่ถูกบล็อก: ไม่สามารถแก้ไขไฟล์นอก working directory และ session temp directory

คำเตือน: โดยค่าเริ่มต้นยังอนุญาตให้อ่านไฟล์ credential เช่น ~/.aws/credentials และ ~/.ssh/ เพิ่มไฟล์เหล่านี้ใน denyRead เพื่อบล็อก

การแยกเครือข่าย​

การเข้าถึงเครือข่ายควบคุมผ่าน proxy server ที่รันนอก sandbox:

  • ข้อจำกัดโดเมน: ไม่มีโดเมนที่อนุญาตไว้ล่วงหน้า ครั้งแรกที่คำสั่งต้องการโดเมนใหม่ Claude Code จะขอการอนุมัติ
  • Managed lockdown: หาก allowManagedDomainsOnly ถูกตั้งค่าใน managed settings โดเมนที่ไม่ได้รับอนุญาตจะถูกบล็อกอัตโนมัติ

วิธีที่ Sandboxing เกี่ยวข้องกับ Permissions และ Permission Modes​

กฎ Permission​

กฎ permission และ sandboxing ควบคุมสิ่งที่แตกต่างกัน:

  • กฎ permission ควบคุมว่า tool ใดที่ Claude Code สามารถใช้ได้
  • Sandboxing ให้การบังคับใช้ระดับ OS ที่จำกัดสิ่งที่คำสั่ง Bash สามารถเข้าถึงได้

ตารางการตั้งค่าและกฎ​

การตั้งค่าหรือกฎสิ่งที่ทำ
sandbox.filesystem.allowWriteให้สิทธิ์ subprocess เขียน path นอก working directory
sandbox.filesystem.denyWrite และ sandbox.filesystem.denyReadบล็อก subprocess จาก path เฉพาะ
sandbox.filesystem.allowReadอนุญาตอ่าน path เฉพาะภายในพื้นที่ที่ถูก deny

กำหนดค่า Sandbox สำหรับองค์กร​

บังคับใช้ Sandboxing ด้วย Managed Settings​

การตั้งค่า managed settings ต่อไปนี้เปิดใช้ sandbox ปฏิเสธที่จะเริ่ม Claude Code หากไม่สามารถ initialize sandbox และป้องกันการ retry คำสั่งนอก sandbox:

{
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"allowUnsandboxedCommands": false
}
}

Custom Proxy Configuration​

สำหรับองค์กรที่ต้องการความปลอดภัยเครือข่ายขั้นสูง:

{
"sandbox": {
"network": {
"httpProxyPort": 8080,
"socksProxyPort": 8081
}
}
}

การแก้ไขปัญหา​

  • คำสั่งล้มเหลวพร้อม host-not-allowed error: CLI tools หลายตัวต้องเข้าถึง host เฉพาะ ให้สิทธิ์เมื่อมีการแจ้งเตือน
  • jest ค้างหรือล้มเหลว: watchman เข้ากันไม่ได้กับ sandbox รัน jest --no-watchman แทน
  • docker commands ล้มเหลว: docker เข้ากันไม่ได้กับ sandbox เพิ่ม docker * ใน excludedCommands

ข้อจำกัด​

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

  • Network filtering: proxy ในตัวไม่ terminate หรือ inspect TLS traffic
  • Privilege escalation via Unix sockets: การตั้งค่า allowUnixSockets อาจให้สิทธิ์เข้าถึง system services ที่มีพลัง
  • Filesystem permission escalation: การให้สิทธิ์เขียนกว้างเกินไปอาจเปิดช่องโหว่

ขอบเขต​

Sandbox แยก Bash subprocesses เท่านั้น:

  • Built-in file tools: Read, Edit และ Write ใช้ระบบสิทธิ์โดยตรง ไม่ผ่าน sandbox
  • Computer use: รันบน desktop จริงของคุณ
  • Subagents: รันในกระบวนการเดียวกับ parent session และใช้การตั้งค่า sandbox เดียวกัน

ดูเพิ่มเติม​

  • Sandbox environments: เปรียบเทียบ sandbox ในตัวกับ dev containers, containers และ VMs
  • Security: คุณสมบัติความปลอดภัยและ best practices
  • Permissions: การกำหนดค่าสิทธิ์
  • Settings: เอกสารอ้างอิงการกำหนดค่าแบบสมบูรณ์