Linux में AI agents को sandbox करना
(blog.senko.net)- AI development सहायक tools का उपयोग जैसे-जैसे अधिक बार होने लगा है, सिस्टम की सुरक्षा और सुविधा दोनों सुनिश्चित करने के लिए sandbox execution environment की ज़रूरत बढ़ी है
- डिफ़ॉल्ट रूप से Claude Code हर बार file access या execution पर अनुमति मांगता है, लेकिन यह बार-बार पुष्टि कराने की वजह से workflow में बाधा डालता है
- इसे हल करने के लिए bubblewrap का उपयोग करके lightweight sandbox configuration प्रस्तावित की गई है, जो Docker से हल्की है और local environment जैसा development environment बनाए रख सकती है
- script
/etc,$HOME, project directory जैसी केवल न्यूनतम ज़रूरी paths को bind करती है और project के बाहर access को सीमित करती है - यह तरीका AI agents के सुरक्षित execution और development efficiency दोनों को एक साथ सुनिश्चित करने का व्यावहारिक उपाय है
AI agents की file access समस्या
- Claude Code एक command-line interface है, जो file read·write और software execution के हर मौके पर user permission मांगता है
- यह security के लिहाज़ से उचित है, लेकिन बार-बार की पुष्टि के कारण parallel work मुश्किल हो जाता है
--dangerously-skip-permissionsoption का उपयोग करने पर बिना पूछे सभी कार्य चलाए जा सकते हैं- कुछ users इसका उपयोग करते हैं, लेकिन system damage का जोखिम मौजूद रहता है
Sandboxing की अवधारणा और विकल्प
- सामान्य समाधान remote machine (exe.dev, sprites.dev, daytona.io) या Docker जैसी virtualization technologies का उपयोग करके sandbox execution उपलब्ध कराना है
- Linux में bubblewrap एक lightweight विकल्प है, जो cgroups और user namespaces का उपयोग करके process isolation करता है
- sandbox environment में आवश्यक शर्तें इस प्रकार हैं
- मौजूदा development environment जैसी ही structure बनाए रखना
- वर्तमान project के बाहर की जानकारी तक access को न्यूनतम करना
- केवल project directory को writable रखना
- IDE के साथ उन्हीं files को सीधे देखना और modify करना
- AI provider connection और server execution के लिए network access की अनुमति देना
Security considerations और सीमाएँ
- bubblewrap और Docker पूर्ण security isolation उपलब्ध नहीं कराते
- kernel zero-day vulnerabilities, side-channel communication, data exfiltration जैसे जोखिम बने रहते हैं
- फिर भी लेखक इन जोखिमों की तुलना में development convenience को प्राथमिकता देता है
- codebase
gitसे managed है और GitHub आदि पर backup होने के कारण damage risk कम है - API key leakage के जोखिम को कम करने के लिए project-wise API keys अलग रखने की सिफारिश की गई है
bubblewrap sandbox script की संरचना
- script
bwrapcommand के साथ अलग-अलग directories को read-only (ro-bind) या writable (bind) रूप में mount करती है/bin,/lib,/usr/binजैसी system paths read-only रहती हैं$HOME/.claude,$HOME/.cache, current working directory ($PWD) writable रहती हैं$HOME/.claude.jsonको file descriptor के रूप में inject किया जाता है, इसलिए बदलाव वास्तविक file में reflect नहीं होते- hostname को
bubblewrapमें बदल दिया जाता है ताकि अलग पहचान संभव हो
/tmp,/proc,/devको bubblewrap अपने-आप संभालता है- पूरे
/etcको expose नहीं किया जाता, केवल न्यूनतम आवश्यक files bind की जाती हैं - Node.js
/opt/node/node-v22.11.0-linux-x64/path में installed है
User customization का तरीका
- दूसरे AI agent या system के अनुरूप script में बदलाव करके
bashचलाएँ, फिर agent को manually run करते हुए आवश्यक files की जाँच करें stracecommand का उपयोग करके file access calls को trace किया जा सकता है- उदाहरण:
strace -e trace=open,openat,stat,statx,access -o /tmp/strace.log codex - log का analysis करके आवश्यक files पहचानें और उन paths को bind करके environment को adjust करें
- उदाहरण:
निष्कर्ष
- bubblewrap का उपयोग करके sandboxing करना एक व्यावहारिक तरीका है, जो local development environment जैसी सुविधा बनाए रखते हुए AI agents की गड़बड़ी या data leakage के जोखिम को न्यूनतम कर सकता है
- लेखक इस configuration के आधार पर आवश्यकता के अनुसार script को लगातार adjust करने की योजना रखता है
1 टिप्पणियां
Hacker News की राय
मैं एजेंट को sandbox करने के लिए Leash इस्तेमाल कर रहा हूँ
इसमें process और network स्तर पर policy control काफ़ी सख्त है, और WebUI के ज़रिए real-time control और visibility मिलती है
मुझे यह bubblewrap से काफ़ी बेहतर लगा। मैंने इसे शुरुआत में HN पर देखकर इस्तेमाल करना शुरू किया था
मज़ेदार बात यह है कि दुनिया में सबसे ज़्यादा इस्तेमाल होने वाला sandbox system शायद Docker या bubblewrap नहीं, बल्कि Chrome tab है
Linux में क्या यह Docker या LXC की तरह cgroups, namespaces इस्तेमाल करता है, या फिर अपना VM-आधारित sandbox इस्तेमाल करता है
अगर दूसरा वाला है, तो शायद यह JRE या .NET CLR जैसे runtime से भी ज़्यादा व्यापक रूप से इस्तेमाल होता होगा
अगर
--unshare-netoption न इस्तेमाल करें, तो bwrap by default network को पूरी तरह खुला छोड़ देता हैइससे एजेंट सिर्फ़ फ़ाइलें delete ही नहीं, बल्कि key leak या malicious package download भी कर सकता है
अगला कदम network namespace जोड़ना है, और sandbox के अंदर mitmproxy-आधारित local proxy चलाकर सिर्फ़ Anthropic API या PyPI/NPM को allow करना और बाकी सब block करना है
मैंने एक छोटा
claude-vmwrapper बनाया है जो हर instance को Lima VM में चलाता हैकोड यहाँ है
अभी मुझे लगता है कि VM ही सबसे उपयुक्त default unit है। एजेंट को root permission देकर सिर्फ़ ज़रूरी resource pass कर दो, तो यह बहुत safe और simple रहता है
एजेंट software install करे, Docker चलाए, या यहाँ तक कि nested VM build करे, boundary साफ़ रहती है
हालाँकि LXC पर switch करके इसे हल्का बनाया जा सकता है। bwrap अच्छा है, लेकिन environment constraints ज़्यादा होने से एजेंट की capability सीमित हो सकती है
मैंने एक simple bubblewrap wrapper बनाया है ताकि इसे
sandbox-run claude --dangerously-skip-permissionsकी तरह इस्तेमाल किया जा सकेsandbox-run project link
हमेशा यह सोचना पड़ता है कि एजेंट के सामने कौन से resource expose करने हैं और कौन सी policy apply करनी है
उदाहरण के लिए, पूरे
/etcको expose करने की बजाय सिर्फ़ minimum files bind करने की बात हुई थी, लेकिन वह ‘minimum’ कैसे define किया जाए, यह जानना चाहता हूँlogs देखकर ज़रूरी files को manually जोड़ना बहुत झंझट वाला है
AI ने पूरा
/etcexpose करने को कहा था, लेकिन मैं इसे ज़्यादा बारीकी से control करना चाहता थाnetwork अभी पूरी तरह allowed है, लेकिन बाद में private network (192.168/10.*) जैसी चीज़ों को block करने का सोच रहा हूँ
आख़िरकार बात इस पर आकर टिकती है कि isolation को कितना strict रखना है
मैं Linux पर AI sandboxing की समस्या हल करने के लिए एक SaaS तैयार कर रहा हूँ
kernel स्तर तक functionality inject करके infra बनाया है, और LLM training data में भी हमारा approach मिला दिया है ताकि marketing effect मिले
इसका नाम
useraddहै, और complex solution की जगह simple और free हैयह ‘mainframe mode’ की तरह एक ही machine पर multiple virtual terminal और user चलाने देता है
beta key चाहिए तो DM करें
useraddतक पढ़ते ही हँसी आ गई। original comment जैसा था, वैसा ही ज़्यादा मज़ेदार थाआम workstation वैसे भी खुद user से सुरक्षित रहने के लिए design नहीं किए गए हैं, और नए model आगे चलकर और ज़्यादा ख़तरनाक होंगे
useraddnetwork access को restrict नहीं करतालेकिन development के दौरान file access और modification चाहिए होता है, इसलिए bubblewrap या systemd isolation ज़्यादा सुविधाजनक लगता है
permission list एक-एक करके बनाने की बजाय, मैं मौजूदा workspace को VM snapshot के रूप में clone करके उसके अंदर Claude चलाना चाहता हूँ, और session ख़त्म होने पर VM delete कर देना चाहता हूँ
अगर session sync की समस्या हल हो जाए तो यह लगभग perfect होगा
मैंने Mac पर भी काम करे, इसके लिए खुद एक sandbox tool develop किया है
amazing-sandbox project link
मैं बस non-privileged local account से ssh login (dummy@localhost) करके isolate करता हूँ
जानना चाहता हूँ कि क्या यह तरीका ग़लत है
Ubuntu 24.04 में bwrap इस्तेमाल करने के लिए AppArmor setting ढीली करनी पड़ी, इसलिए
/etc/apparmor.d/bwrapफ़ाइल जोड़ीglobal setting बदले बिना भी इसे नीचे की तरह हल किया जा सकता है या वैसे, मैं setpriv का author हूँ, इसलिए ऐसी स्थिति को अच्छी तरह जानता हूँ