سندباکسکردن ایجنتهای هوش مصنوعی روی Upsun
خلاصهٔ کاملتر
نویسنده میگه ایجنتهای هوش مصنوعی به این دلیل خطرناکن که همزمان سهتا چیز دارن: دسترسی به دادهٔ حساس، پردازش ورودی نامطمئن، و امکان ارتباط با بیرون. کاری که سندباکس میکنه اینه که محدود کنه شِلِ ایجنت به چی میتونه دسترسی داشته باشه. سه نگرانی اصلی هم اینان: سکرتها (متغیرهای محیطی و فایلهای اعتباری)، شبکه (اتصالهای خروجی که میتونن داده رو نشت بدن) و فایلسیستم (مسیرهای حساس مثل .ssh و .aws).
یه نکتهٔ مهم که نویسنده روش تأکید میکنه اینه که مدل زبانی خودش دستوری اجرا نمیکنه؛ فقط متن تولید میکنه و این کدِ قطعیِ هارنس (مثل خودِ Claude Code یا Codex) ـه که تصمیم میگیره دستور واقعاً اجرا بشه یا نه. پس سندباکس همون لایهٔ کد رو میپیچه و برای فهمیدنش لازم نیست هوش مصنوعی بلد باشی؛ فقط باید بدونی وقتی هارنس یه دستور شل اجرا میکنه، اون شل به چی دسترسی داره.
به گفتهٔ نویسنده، کانتینرهای Upsun از پایه یهسری محافظت دارن: کانتینر بدون روت، جداسازی با namespace، فیلتر syscall با seccomp، فایروال ورودی و فایلسیستم اپلیکیشن فقطخواندنی. ولی اینها کانتینرها رو از هم جدا میکنن؛ برای سندباکسکردن ایجنت داخل خودِ کانتینر باید لایههای بیشتری اضافه کنی.
مقاله سندباکس رو قدمبهقدم میسازه. اولین قدم اینه که با env -i فقط چندتا متغیر لازم رو رد کنی و بقیه رو پاک کنی:
env -i \
PATH="$PATH" \
HOME="/tmp/agent-workspace" \
TERM="$TERM" \
bash agent-task.sh
ولی نویسنده یه شکاف مهم رو نشون میده: چون همهٔ پروسهها با یه کاربر اجرا میشن، پروسهٔ سندباکسشده میتونه از طریق /proc متغیرهای محیطی و حتی حافظهٔ بقیهٔ پروسهها رو بخونه و همون سکرتهایی رو که پاک کرده بودی دوباره دربیاره. پس فقط پاککردن متغیر کافی نیست.
قدم بعدی استفاده از unshare --user --net ـه: --user آیدی کاربر رو به nobody نگاشت میکنه و جلوی خوندن /proc بقیه رو میگیره، و --net یه namespace شبکهٔ خالی میسازه که TCP و UDP و DNS رو میبنده. آخرش هم bubblewrap کنترل فایلسیستم رو اضافه میکنه: ریشه فقطخواندنی، یه /tmp نوشتنیِ موقت، و یه فیلتر seccomp برای سفتکاریِ بیشتر که چیزهایی مثل ptrace و io_uring رو هم ببنده.
در پایان نویسنده میگه Claude Code و Codex هر دو دقیقاً با همین ابزارهای لینوکس شل رو سندباکس میکنن و از bubblewrap استفاده میکنن. Claude Code از طریق پکیج @anthropic-ai/sandbox-runtime کار میکنه که توی محیطهای کانتینریِ بدونامتیاز مثل Upsun یه حالت enableWeakerNestedSandbox داره، و یه پراکسی HTTPS که خروجی رو بر اساس لیست دامنههای مجاز فیلتر میکنه. یه هشدار عملی هم میده: srt خودش متغیرهای محیطیِ خودِ پروسه رو پاک نمیکنه، پس باز هم باید با env -i بپیچیش.
نکات کلیدی:
- خطر اصلی ایجنتها از ترکیب دسترسی به دادهٔ حساس، ورودی نامطمئن و ارتباط با بیرون میاد
- سندباکس لایهٔ کدِ هارنس رو محدود میکنه، نه خودِ مدل زبانی رو
- فقط env -i کافی نیست چون از طریق /proc میشه دور زدش
- unshare --user --net سکرتها و شبکه رو میبنده و bubblewrap فایلسیستم رو
- Claude Code و Codex با همین ابزارها بهصورت داخلی شل رو سندباکس میکنن




