- เครื่องมือขนาดเบาสำหรับ รัน AI agent แบบแยกสภาพแวดล้อม บน Linux โดยให้ขอบเขตการรันที่ปลอดภัยด้วยคำสั่งเดียวโดยไม่ต้องตั้งค่าคอนเทนเนอร์ที่ซับซ้อน
- มีกรณีที่เครื่องมือ AI เข้าถึงไฟล์ระบบจริงแล้ว ลบหรือทำให้ข้อมูลเสียหาย เกิดขึ้นต่อเนื่อง ทำให้ความจำเป็นของสภาพแวดล้อมการรันที่ปลอดภัยยิ่งชัดเจนขึ้น
- ปกป้องโฮมไดเรกทอรีด้วย copy-on-write overlay และแยก
/tmp·/var/tmp ออกต่างหากเพื่อป้องกันการเปลี่ยนแปลงไฟล์ต้นฉบับ
- มี โหมดการแยก 3 แบบคือ Casual, Strict และ Bare ให้เลือกตามระดับความปลอดภัยและขอบเขตการเข้าถึง
- เป็น โครงการโอเพนซอร์ส ที่พัฒนาโดยทีมวิจัย Stanford เพื่อเป็นเครื่องมือป้องกันเชิงปฏิบัติสำหรับการใช้งาน AI tools ได้อย่างปลอดภัยยิ่งขึ้น
jai เครื่องมือขนาดเบาสำหรับการแยก AI agent
- jai เป็นเครื่องมือที่ออกแบบมาเพื่อให้สามารถ แยกการทำงาน (containment) ของ AI agent บน Linux ได้อย่างง่ายดาย
- ให้ขอบเขตการรันที่ปลอดภัยด้วยคำสั่งเดียว โดยไม่ต้องตั้งค่าคอนเทนเนอร์หรือ VM ที่ซับซ้อน
- นำไปใช้กับเวิร์กโฟลว์เดิมได้ทันที เช่น งานช่วยเขียนโค้ดหรือการรันสคริปต์
-
กรณีปัญหาที่เกิดขึ้นจริง
- ผู้ใช้หลายรายรายงานความเสียหายจาก ไฟล์สูญหายและไดเรกทอรีถูกลบ ระหว่างใช้งานเครื่องมือ AI
- Nick Davidov รายงานว่ารูปครอบครัวตลอด 15 ปีถูกลบด้วยคำสั่งในเทอร์มินัล
- Claude Code ของ Anthropic ลบโฮมไดเรกทอรีจนทำให้โปรเจกต์พัฒนาสูญหาย
- มีรายงานว่า Cursor ล้าง work tree จน “ทุกอย่างหายไปหมด”
- ผู้ใช้ Reddit รายหนึ่งกล่าวว่า Antigravity ลบไดรฟ์ D ทั้งหมด
- ผู้ใช้ Cursor อีกรายรายงานว่าไฟล์ 100GB ถูกลบ
- กรณีเหล่านี้แสดงให้เห็นถึง ช่องโหว่ด้านความปลอดภัย เมื่ออนุญาตให้เครื่องมือ AI เข้าถึงบัญชีผู้ใช้จริง
-
ความสามารถหลักของ jai
- ตั้งค่า ขอบเขตระหว่างบัญชีที่ใช้รันกับโฮมไดเรกทอรี ให้อัตโนมัติ
- ไดเรกทอรีทำงานยังคงมีสิทธิ์อ่าน/เขียนเต็มรูปแบบ
- โฮมไดเรกทอรีได้รับการปกป้องด้วย copy-on-write overlay ทำให้ไฟล์ต้นฉบับไม่ถูกแก้ไข
/tmp และ /var/tmp ถูกแยกเป็นพื้นที่อิสระ ส่วนไฟล์อื่นถูกจำกัดให้อ่านได้อย่างเดียว
- สามารถรันแบบแยกได้เพียงเติม
jai ไว้หน้าคำสั่ง
- ตัวอย่าง:
jai codex, jai claude หรือรันเชลล์ด้วย jai เฉยๆ
- ใช้งานได้ทันทีโดยไม่ต้องมี Dockerfile หรือขั้นตอนสร้างอิมเมจ
- ไม่จำเป็นต้องตั้งค่าแฟลก
bwrap ที่ซับซ้อนหรือเขียนสคริปต์เพิ่มเติม
-
การเลือกโหมดการแยก
- มี 3 โหมดคือ Casual / Strict / Bare
- Casual: ปกป้องโฮมไดเรกทอรีด้วย copy-on-write และอ่านไฟล์ส่วนใหญ่ได้
- Strict: รันด้วยผู้ใช้
jai แยกต่างหาก พร้อมโฮมไดเรกทอรีว่าง เพื่อการแยกที่เข้มงวดกว่า
- Bare: โฮมไดเรกทอรีว่าง แต่ยังคง UID ของผู้ใช้เดิมไว้
- แต่ละโหมดแตกต่างกันในด้าน ความลับของข้อมูล (confidentiality), ความถูกต้องสมบูรณ์ (integrity) และ การรองรับ NFS
- โหมด Strict ให้การแยกที่แข็งแรงที่สุด แต่ไม่รองรับ NFS home
-
เปรียบเทียบกับเครื่องมือทางเลือก
- Docker
- เหมาะกับการทำสภาพแวดล้อมแบบ image-based ให้ทำซ้ำได้ แต่หนักเกินไปสำหรับ sandbox ชั่วคราวของเครื่องมือบนโฮสต์
- ไม่มีความสามารถด้านโฮมไดเรกทอรีแบบ overlay
- bubblewrap
- เป็น namespace sandbox ที่ทรงพลัง แต่ผู้ใช้ต้องกำหนดโครงสร้างไฟล์ระบบเอง
- jai ช่วยตัดความซับซ้อนนี้ออก
- chroot
- ไม่ใช่มาตรการแยกเพื่อความปลอดภัย และไม่มีฟีเจอร์อย่าง mount, PID namespace หรือการแยกสิทธิ์ จึงไม่แนะนำให้ใช้ทำ sandbox แม้บน Linux
-
ข้อจำกัดด้านความปลอดภัย
- jai ไม่ได้รับประกันความปลอดภัยแบบสมบูรณ์
- ในฐานะ “casual sandbox” มันช่วยลดขอบเขตความเสียหาย แต่ไม่ได้ป้องกันการโจมตีทั้งหมด
- โหมด Casual ปกป้องความลับของข้อมูลได้ไม่มาก และโหมด Strict ก็ยังแตกต่างจากการแยกระดับคอนเทนเนอร์หรือ VM
- ในสภาพแวดล้อมหลายผู้เช่าหรือสถานการณ์ความเสี่ยงสูง แนะนำให้ใช้คอนเทนเนอร์หรือเครื่องเสมือน
-
เบื้องหลังโครงการ
- พัฒนาร่วมกันโดยกลุ่มวิจัย Stanford Secure Computer Systems (SCS) และ Future of Digital Currency Initiative (FDCI)
- ให้ใช้งานในรูปแบบ ซอฟต์แวร์โอเพนซอร์สฟรี และช่วยให้ผู้ใช้สามารถ ใช้งาน AI ได้อย่างปลอดภัยยิ่งขึ้น
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
แค่เพิ่มการตั้งค่าต่อไปนี้ใน
.claude/settings.jsonถ้าต้องการอนุญาตการเข้าถึงไดเรกทอรีภายนอก ก็แก้ตรง
allowReadได้ฟีเจอร์นี้เป็น ตัวเลือก sandbox ใหม่ ที่เพิ่งเพิ่มเข้ามาเมื่อ 10 วันที่แล้ว
rm -rf *โชคดีที่มันไม่ได้เกิดขึ้นพร้อมกัน แต่แค่นึกภาพก็ขนลุกแล้ว
ไอเดียเรื่อง sandbox นั้นดี แต่จะได้ผลต้อง ถูกบังคับใช้ในระดับ low-level
ตัว claude เองก็เป็นโปรแกรมขนาดใหญ่ที่ AI สร้างขึ้นมา ดังนั้นการเพิ่มชั้นความปลอดภัยที่มนุษย์เขียนเองไม่ถึง 3000 บรรทัด อาจเป็นแนวป้องกันที่มีความหมายได้
เพราะงั้นคนจึงอาจชอบ ซอฟต์แวร์ sandbox แยกต่างหาก มากกว่า
/เป็นคอนฟิกที่อนุญาตให้เข้าถึงอุปกรณ์
/dev/nvidia*โดยยอมรับความเสี่ยงเรื่องข้อมูลรั่วไหล เป็น การตั้งค่าเชิงเสียดสีถ้ารัน claude ด้วยผู้ใช้ที่มีสิทธิ์จำกัด การแยกก็จะถูกสืบทอดไปยัง subprocess โดยอัตโนมัติ
มี issue ที่เกี่ยวข้อง เปิดไว้แล้ว
bubblewrap กับ seatbelt ทำงานได้ดีเมื่อใช้งานเดี่ยว ๆ แต่พอรันผ่าน claude-code กลับดูเหมือนถูกปิดใช้งาน
น่าแปลกใจที่ผู้คนติดตั้ง AI agent ลงบนคอมส่วนตัวกันได้ง่ายขนาดนี้
เราปกป้องความปลอดภัยของระบบกันมาหลายสิบปี แต่จู่ ๆ ก็เหมือนมอบสิทธิ์ทั้งหมดให้ซอฟต์แวร์ที่คาดเดาไม่ได้
ความสะดวกในระยะสั้นถูกให้ความสำคัญมากกว่าความปลอดภัยระยะยาว
บน remote development VM ของฉันมีแต่ข้อมูลที่ Claude เห็นได้ก็ไม่เป็นไร
แต่ไม่นานทั้งอุตสาหกรรมก็เริ่มตระหนักถึง ความเสี่ยงด้านความปลอดภัย และรับมือกับมัน
แค่ใช้ การแยกสิทธิ์แบบ Unix ธรรมดาก็เพียงพอแล้ว
มีบัญชีผู้ใช้สองบัญชี แล้วจัดกลุ่มเฉพาะโฟลเดอร์ที่จะแชร์กับ AI ก็พอ
ดู บทความบล็อกที่เกี่ยวข้อง
หน้าเว็บเขียนไว้ว่า “หยุดเชื่อแบบมืดบอด” แต่ขั้นตอนติดตั้งเป็นการ build เองแทน
curl | bashmakepkg -iจะปลอดภัยกว่ามากPKGFILE สั้นแค่ราว 30 บรรทัด และฟังก์ชัน build ก็มีเพียง 7 บรรทัด
ตรงกันข้าม สคริปต์อย่าง rustup(910 บรรทัด), claude(158 บรรทัด), opencode(460 บรรทัด) ซับซ้อนกว่ามาก
curl | tar | makepkgเป็นบรรทัดเดียว แบบนั้นก็เป็น วิธีที่ไม่น่าเชื่อถือโปรเจกต์นี้ออกแบบมาดี และดู ปลอดภัยกว่าและสะดวกกว่าเล็กน้อย เมื่อเทียบกับวิธีของฉัน
ฉันสร้างบัญชีผู้ใช้แยกไว้เพื่อกัก agent ออกมา
แต่บางทีก็มีปัญหาเรื่องสิทธิ์จนต้องใช้สคริปต์ช่วยแก้
สุดท้ายแล้ววิธีที่ชัวร์ที่สุดคือ ให้โน้ตบุ๊กอีกเครื่องไปเลย
ไม่มีอะไรปลอดภัยเท่าอุปกรณ์ที่แยกกันทางกายภาพ
agent มีความสามารถระดับการทดสอบเจาะระบบด้านความปลอดภัย ดังนั้นแค่แยกผู้ใช้อย่างเดียวก็ยังน่ากังวล
ถ้าใช้ container agent จะสับสนเวลาไปสร้าง container เอง
เว็บดูเหมือน “vibe-coded” เลยทำให้รู้สึกว่าคุณภาพต่ำ แต่ตัวเครื่องมือจริง ๆ เป็นสิ่งที่ ศาสตราจารย์ Stanford ลงมือทำเอง
ดู ลิงก์ FAQ
ฉันแก้เนื้อหาเอกสารให้ถูกต้องแล้ว จึงเชื่อถือได้
ส่วนเว็บไซต์ปล่อยให้ AI ทำไว้แบบนั้น จึงค่อนข้างย้อนแย้งอยู่เหมือนกัน
และเป็นผู้นำกลุ่ม Stanford Secure Computer Systems
สิ่งที่น่ากังวลคือ ถ้า agent มีสิทธิ์เขียนใน project directory ก็อาจทำ persistent exploit ได้
มันอาจรันนอก sandbox ผ่านไฟล์อย่าง
.pyc,.venv,.git/hooksใน บทสนทนา ChatGPT ก็ยืนยันช่องโหว่แบบนี้เช่นกัน
เพราะงั้นวิธีที่ปลอดภัยที่สุดคือ การส่งไฟล์แบบอิง git patch
ควรให้ไฟล์ที่แก้ใน sandbox ถูกส่งออกไปภายนอกได้เฉพาะรายการที่ commit ใน git แล้วเท่านั้น
.git/เป็น read-onlyแม้จะทำ CWD เป็น overlay ได้ด้วย
jai -Dแต่การรวมการเปลี่ยนแปลงกลับเข้ามาทำได้ยุ่งยากagent จะทำงานใน git worktree branch แยกต่างหาก และจะ merge หลัง review เท่านั้น
แบบนี้จะรักษา กระบวนการความปลอดภัยแบบ review-based เอาไว้ได้
อีกทางเลือกง่าย ๆ คือรัน agent ผ่าน ssh บน บัญชีผู้ใช้แยกต่างหาก
แล้ว bind mount project directory เพื่อควบคุมการเข้าถึง
เข้ากันได้ดีกับฟีเจอร์ ssh remote ของ VSCode
มันง่ายกว่าระบบความปลอดภัยซับซ้อนมาก และเป็น วิธีแยกที่มีประสิทธิภาพ
ในความเป็นจริงมีปัญหาที่ละเอียดอ่อนกว่า
rm -rfอีกมากเคยมีครั้งหนึ่ง claude-code สร้างโฟลเดอร์
/public/blog/เพื่อจะบันทึก SVG จน Apache routing พังไม่ใช่ปัญหาเรื่องการลบหรือสิทธิ์ แต่เป็น พฤติกรรมที่ไม่ได้ตั้งใจ ที่ทำให้บล็อกขึ้น 404
jai อาจกันความผิดพลาดใหญ่ ๆ แบบนี้ได้ แต่ปัญหาละเอียดแบบนี้ก็ยังยากอยู่ดี
เป็นโปรเจกต์ที่ยอดเยี่ยม แต่ ชื่อเรื่องน่าเสียดาย
ฉันชอบโครงสร้างที่ให้เข้าถึง current directory ได้ทั้งหมด, ที่อื่นเป็น read-only, และ home directory เป็นแบบ copy-on-write
แนวทางแบบนี้ควรเป็น โมเดลความปลอดภัยพื้นฐานของ AI agent