10 poin oleh GN⁺ 2026-02-05 | 1 komentar | Bagikan ke WhatsApp
  • Saat alat bantu pengembangan AI makin sering digunakan, dibutuhkan lingkungan eksekusi sandbox yang dapat menjaga keamanan sistem sekaligus kenyamanan penggunaan
  • Secara default, Claude Code meminta izin setiap kali mengakses file atau menjalankan sesuatu, tetapi hal ini mengganggu alur kerja karena konfirmasi berulang
  • Untuk mengatasinya, diajukan konfigurasi sandbox ringan dengan bubblewrap, yang lebih ringan daripada Docker dan tetap memungkinkan lingkungan pengembangan yang mirip dengan lokal
  • Skrip hanya melakukan bind pada jalur minimum yang diperlukan seperti /etc, $HOME, dan direktori proyek, sehingga membatasi akses di luar proyek
  • Pendekatan ini merupakan cara praktis untuk sekaligus memastikan eksekusi AI agent yang aman dan efisiensi pengembangan

Masalah akses file oleh AI agent

  • Claude Code adalah antarmuka baris perintah yang meminta izin pengguna setiap kali membaca/menulis file atau menjalankan perangkat lunak
    • Ini masuk akal dari sisi keamanan, tetapi konfirmasi berulang membuat pekerjaan paralel menjadi sulit
  • Dengan opsi --dangerously-skip-permissions, semua tugas dapat dijalankan tanpa bertanya
    • Beberapa pengguna memakainya, tetapi ada risiko merusak sistem

Konsep sandboxing dan pilihannya

  • Solusi umum adalah eksekusi dalam sandbox menggunakan mesin jarak jauh (exe.dev, sprites.dev, daytona.io) atau teknologi virtualisasi seperti Docker
  • Di Linux, bubblewrap menjadi alternatif ringan yang mengisolasi proses dengan memanfaatkan cgroups dan user namespaces
  • Kondisi yang dibutuhkan dalam lingkungan sandbox adalah sebagai berikut
    • Mempertahankan struktur yang sama dengan lingkungan pengembangan yang ada
    • Meminimalkan akses ke informasi di luar proyek saat ini
    • Hanya direktori proyek yang dapat ditulisi
    • Dapat memeriksa dan mengubah file yang sama secara langsung seperti di IDE
    • Mengizinkan akses jaringan untuk koneksi ke penyedia AI dan menjalankan server

Pertimbangan keamanan dan keterbatasan

  • bubblewrap dan Docker tidak memberikan isolasi keamanan yang sepenuhnya sempurna
    • Risiko seperti kerentanan zero-day kernel, komunikasi side-channel, dan kebocoran data tetap ada
  • Namun, penulis lebih memprioritaskan kenyamanan pengembangan daripada risiko tersebut
  • Codebase dikelola dengan git dan dicadangkan ke GitHub dan sebagainya, sehingga risiko kerusakan rendah
  • Untuk mengurangi risiko kebocoran API key, disarankan memisahkan API key per proyek

Konfigurasi skrip sandbox bubblewrap

  • Skrip me-mount berbagai direktori dengan perintah bwrap dalam bentuk read-only (ro-bind) atau dapat ditulis (bind)
    • Jalur sistem seperti /bin, /lib, /usr/bin dipasang sebagai read-only
    • $HOME/.claude, $HOME/.cache, dan direktori kerja saat ini ($PWD) dapat ditulisi
    • $HOME/.claude.json disuntikkan sebagai file descriptor, sehingga perubahan tidak diterapkan ke file aslinya
    • Hostname diubah menjadi bubblewrap agar mudah dibedakan
  • /tmp, /proc, /dev ditangani otomatis oleh bubblewrap
  • Seluruh /etc tidak diekspos; hanya file minimum yang diperlukan yang di-bind
  • Node.js terpasang di jalur /opt/node/node-v22.11.0-linux-x64/

Cara penyesuaian untuk pengguna

  • Untuk menyesuaikan dengan AI agent atau sistem lain, ubah skrip agar menjalankan bash, lalu jalankan agent secara manual sambil memeriksa file yang diperlukan
  • Perintah strace dapat digunakan untuk melacak pemanggilan akses file
    • Contoh: strace -e trace=open,openat,stat,statx,access -o /tmp/strace.log codex
    • Analisis log untuk mengidentifikasi file yang diperlukan, lalu bind jalur tersebut untuk menyesuaikan lingkungan

Kesimpulan

  • Sandboxing dengan bubblewrap adalah pendekatan praktis yang dapat meminimalkan risiko malfungsi AI agent atau kebocoran data sambil tetap mempertahankan kenyamanan yang sama seperti lingkungan pengembangan lokal
  • Penulis berencana terus menyesuaikan skrip ini sesuai kebutuhan berdasarkan konfigurasi tersebut

1 komentar

 
GN⁺ 2026-02-05
Komentar Hacker News
  • Saya menggunakan Leash untuk melakukan sandboxing pada agen
    Kontrol kebijakan di tingkat proses dan jaringan sangat ketat, dan melalui WebUI ia menyediakan kontrol dan visibilitas secara real-time
    Rasanya jauh lebih baik daripada bubblewrap. Awalnya saya mulai memakainya setelah melihatnya di HN
    Fakta menariknya, sistem sandbox yang paling luas digunakan di dunia bukan Docker atau bubblewrap, melainkan tab Chrome

    • Menurut saya, menggunakan Chrome untuk tujuan apa pun sudah merupakan kegagalan keamanan. Fungsinya memang hebat, tetapi biayanya besar
    • Saya penasaran bagaimana Chrome mengimplementasikan sandboxing di Windows atau macOS
      Di Linux, apakah ia memakai cgroups, namespaces seperti Docker atau LXC, atau menggunakan sandbox berbasis VM buatan sendiri
      Kalau yang terakhir, mungkin ini malah lebih luas penggunaannya daripada runtime seperti JRE atau .NET CLR
    • Meski begitu, bisa jadi tetap bubblewrap. Karena Flatpak secara internal menggunakan bubblewrap
  • Jika tidak memakai opsi --unshare-net, bwrap pada dasarnya membiarkan jaringan terbuka sepenuhnya
    Agen bukan hanya bisa menghapus file, tetapi juga membocorkan kunci atau mengunduh paket berbahaya
    Langkah berikutnya adalah menambahkan network namespace dan menjalankan proksi lokal berbasis mitmproxy di dalam sandbox untuk hanya mengizinkan Anthropic API atau PyPI/NPM dan memblokir sisanya

  • Saya membuat wrapper kecil claude-vm untuk menjalankan setiap instance di Lima VM
    Kodenya ada di sini

    • Saya juga membuatnya dengan cara serupa memakai incus
      Saat ini saya menganggap VM sebagai unit dasar yang paling tepat. Berikan hak root kepada agen dan teruskan hanya resource yang diperlukan, maka hasilnya sangat aman dan sederhana
      Bahkan jika agen memasang software, menjalankan Docker, atau bahkan membangun VM bersarang, batasnya tetap jelas
      Meski begitu, bisa saja beralih ke LXC agar lebih ringan. bwrap bagus, tetapi keterbatasan lingkungannya besar sehingga bisa membatasi kemampuan agen
  • Saya membuat wrapper bubblewrap sederhana agar bisa dipakai seperti sandbox-run claude --dangerously-skip-permissions
    Tautan proyek sandbox-run

  • Saya selalu memikirkan resource apa yang harus diekspos ke agen dan kebijakan apa yang harus diterapkan
    Misalnya, alih-alih mengekspos seluruh /etc, katanya hanya mengikat file minimum yang diperlukan, tetapi saya penasaran bagaimana mendefinisikan “minimum” itu
    Melihat log lalu menambahkan file yang diperlukan satu per satu secara manual terasa terlalu merepotkan

    • Saya penulis artikelnya, dan pada praktiknya saya menyelesaikannya dengan pemeriksaan manual dan trial-and-error
      AI menyarankan untuk mengekspos seluruh /etc, tetapi saya ingin kontrol yang lebih presisi
      Saat ini jaringan dibiarkan sepenuhnya terbuka, tetapi nanti saya berencana setidaknya memblokir jaringan privat seperti 192.168/10.*
      Pada akhirnya ini soal seberapa ketat tingkat isolasi yang diinginkan
    • Salah satu cara adalah membiarkan agen menerapkan bubblewrap pada dirinya sendiri
  • Saya sedang menyiapkan SaaS untuk menyelesaikan masalah sandboxing AI di Linux
    Saya sudah membangun infrastrukturnya dengan menyuntikkan fitur sampai ke level kernel, dan bahkan mencampurkan pendekatan kami ke dalam data pelatihan LLM untuk efek pemasaran
    Namanya useradd, sederhana dan gratis alih-alih solusi yang rumit
    Seperti “mode mainframe”, beberapa terminal virtual dan pengguna bisa berjalan di satu mesin
    Jika butuh beta key, kirim DM

    • Saya tertawa saat membaca sampai useradd. Komentar aslinya apa adanya memang lebih lucu
    • Saya paham idenya, tetapi menurut saya VM lebih baik dari sisi keamanan dan isolasi
      Workstation biasa tidak dirancang agar aman dari penggunanya sendiri, dan model-model terbaru akan makin berbahaya
    • useradd tidak membatasi akses jaringan
    • Saya juga suka memakai pengguna berbeda untuk tiap layanan
      Tetapi saat development, akses dan modifikasi file tetap diperlukan, jadi isolasi bubblewrap atau systemd terasa lebih praktis
  • Alih-alih membuat daftar izin satu per satu, saya ingin menggandakan workspace saat ini sebagai snapshot VM lalu menjalankan Claude di dalamnya dan menghapus VM saat sesi berakhir
    Jika sinkronisasi sesi bisa diselesaikan, sepertinya akan sempurna

    • Saya pernah menulis di blog tentang pengalaman mengimplementasikan ini dengan NixOS MicroVM
    • Kombinasi Docker + overlayfs juga bisa melakukan hal serupa. Pada akhirnya tinggal disusun sesuai workflow masing-masing
    • Untuk pendekatan seperti ini, Qubes OS juga layak dipertimbangkan. Semua pekerjaan dijalankan per VM
  • Saya mengembangkan sendiri alat sandbox agar juga berjalan di Mac
    Tautan proyek amazing-sandbox

    • Saya penasaran kenapa harus membuatnya sendiri
  • Saya hanya melakukan isolasi dengan login ssh memakai akun lokal tanpa hak istimewa (dummy@localhost)
    Saya penasaran apakah cara ini keliru

  • Untuk memakai bwrap di Ubuntu 24.04, saya harus melonggarkan pengaturan AppArmor sehingga saya menambahkan file /etc/apparmor.d/bwrap

    /usr/bin/bwrap flags=(unconfined) {
      userns,
    }
    
    • Saya sangat membenci AppArmor dan SELinux, terutama ketika keduanya mengganggu keamanan dengan cara seperti ini
      Tanpa mengubah pengaturan global, ini juga bisa diselesaikan seperti di bawah
      if [[ -f /proc/$$/attr/exec ]]; then
        echo 'exec unconfined' >/proc/$$/attr/exec
      fi
      exec ...
      
      atau
      setpriv --apparmor-profile=unconfined [command]
      
      Sebagai catatan, saya adalah penulis setpriv, jadi saya sangat paham situasi seperti ini