การกำหนดค่า Sandbox สำหรับ Bash Tool
เรียนรู้วิธีที่ sandboxed Bash tool ของ Claude Code ให้การแยกระบบไฟล์และเครือข่ายเพื่อการทำงานแบบ agent ที่ปลอดภัยและเป็นอิสระมากขึ้น
Bash sandbox ช่วยให้ Claude รันคำสั่ง shell ส่วนใหญ่ได้โดยไม่ต้องหยุดขอสิทธิ์ แทนที่จะอนุมัติทีละคำสั่ง คุณกำหนดว่าไฟล์และโดเมนเครือข่ายใดที่คำสั่งสามารถเข้าถึงได้ และระบบปฏิบัติการบังคับใช้ขอบเขตนั้นสำหรับคำสั่ง Bash ทุกคำสั่งและ child process ของมัน
หน้านี้ครอบคลุม:
- เปิดใช้งาน sandbox และเลือกวิธีอนุมัติคำสั่งใน sandbox
- กำหนดค่า ว่า path และโดเมนเครือข่ายใดที่คำสั่งสามารถเข้าถึงได้
- รวม sandboxing กับกฎสิทธิ์และโหมดสิทธิ์
- บังคับใช้ sandboxing ทั่วทั้งองค์กร ด้วย managed settings
หากต้องการเปรียบเทียบวิธีการแยกอื่น ๆ เช่น 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 |
./ หรือไม่มี prefix | relative ต่อ 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แทนdockercommands ล้มเหลว: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: เอกสารอ้างอิงการกำหนดค่าแบบสมบูรณ์