26 poin oleh GN⁺ 2026-01-21 | 1 komentar | Bagikan ke WhatsApp
  • Cara menggunakan flag --dangerously-skip-permissions milik Claude Code dengan aman
  • Setelah meninjau berbagai lingkungan eksekusi terisolasi seperti Docker, VM, dan Firejail, diputuskan bahwa mesin virtual (VM) berbasis Vagrant adalah pilihan yang paling cocok
  • Dengan Vagrant, penulis dapat mempertahankan isolasi VM penuh, konfigurasi yang dapat direproduksi, dan berbagi folder lokal, sambil menghindari masalah Docker-in-Docker
  • Claude Code dikonfigurasi agar dapat memanipulasi sistem dengan bebas menggunakan hak sudo di dalam VM, dan benar-benar dipakai untuk menjalankan web app, menyiapkan DB, mengotomatisasi pengujian, dan lain-lain
  • Pendekatan ini efektif untuk mencegah kerusakan filesystem akibat kesalahan, dan bila perlu VM bisa dihapus lalu dibuat ulang untuk reset yang aman

Latar belakang

  • Saat menggunakan Claude Code, penulis mencoba memakai flag --dangerously-skip-permissions untuk menghilangkan kerepotan memeriksa permintaan izin setiap saat
    • Flag ini akan menjalankan semua tindakan secara otomatis tanpa persetujuan sebelumnya, termasuk instalasi paket, perubahan konfigurasi, penghapusan file, dan lainnya
    • Alur kerja menjadi lebih efisien karena tidak terputus, tetapi ada risiko merusak filesystem
  • Untuk mencegahnya, penulis menyadari perlunya menjalankannya di lingkungan yang terpisah dari akun OS host

Metode yang dipertimbangkan

  • Docker ditinjau terlebih dahulu untuk isolasi, tetapi karena Claude harus membangun image Docker dan menjalankan container, konfigurasi Docker-in-Docker menjadi diperlukan
    • Dalam kondisi ini mode --privileged dibutuhkan, sehingga tujuan sandboxing menjadi tidak berarti
    • Penumpukan jaringan, masalah izin volume mount, dan hal serupa meningkatkan kompleksitas dan ketidakstabilan
  • Alternatif lain yang dipertimbangkan adalah sebagai berikut
    • Menjalankan di bare metal: ada kasus kerusakan serius di Reddit seperti database atau home directory terhapus
    • sandbox-runtime: kontrol akses berbasis ACL, membuat Claude tidak bisa mengakses selain kode, tetapi kebebasan penuh kurang
    • Firejail: memiliki keterbatasan yang mirip dengan Docker
    • Konfigurasi VM manual: kurang dapat direproduksi
    • VM cloud: masalah biaya, latensi, dan kebutuhan mengunggah kode

Pendekatan berbasis Vagrant

  • Dengan Vagrant, penulis memperoleh isolasi VM penuh dan konfigurasi yang dapat direproduksi
    • Melalui shared folder, proyek tetap bisa diakses seperti lokal
    • Tidak ada masalah Docker-in-Docker, dan jika perlu VM dapat dengan mudah dihapus lalu dibuat ulang
  • Saat memakai VirtualBox versi 7.2.4, ditemukan bug CPU terpakai 100%, lalu penyebabnya dikonfirmasi melalui issue di GitHub
  • Konfigurasi Vagrantfile final memiliki karakteristik berikut
    • Menggunakan base image bento/ubuntu-24.04
    • Alokasi 4GB memori dan 2 CPU
    • Menginstal Docker, Node.js, npm, git, dan unzip
    • Menginstal @anthropic-ai/claude-code secara global
    • Menambahkan pengguna vagrant ke grup Docker

Cara penggunaan nyata

  • Di direktori proyek, jalankan vagrant upvagrant sshclaude --dangerously-skip-permissions
  • Saat boot pertama, provisioning memerlukan beberapa menit, dan login Claude hanya perlu dilakukan sekali per proyek
  • Saat selesai bekerja, VM bisa dijeda dengan vagrant suspend
  • Claude diberi hak sudo di dalam VM untuk melakukan tugas seperti berikut
    • Menjalankan API web app dan memeriksanya dengan curl
    • Menginstal browser lalu memeriksa app secara manual dan membuat pengujian E2E
    • Menyiapkan DB PostgreSQL dan menguji migrasi
    • Membangun dan menjalankan image Docker
  • Berkat lingkungan ini, Claude dapat menangani sendiri eksekusi perintah, pemeriksaan output, dan proses iteratif

Kinerja dan keamanan

  • Di lingkungan Linux + VirtualBox, sumber daya sangat memadai dan tidak ada latensi sinkronisasi file
  • Hal yang dapat dilindungi
    • Kerusakan filesystem akibat kesalahan
    • Instalasi paket sembarangan dan perubahan konfigurasi
  • Hal yang tidak dapat dilindungi
    • Penghapusan folder proyek (sinkronisasi dua arah)
    • Serangan yang memanfaatkan kerentanan VM escape
    • Masalah di tingkat jaringan
    • Kebocoran data (VM tetap bisa mengakses internet)
  • Konfigurasi ini ditujukan untuk mencegah kecelakaan, bukan untuk pertahanan terhadap serangan tingkat lanjut
  • Karena proyek berbasis Git, pemulihan tetap mudah dilakukan jika terjadi kerusakan, dan bila perlu isolasi yang lebih ketat bisa dicapai dengan sinkronisasi satu arah via rsync

Kesimpulan

  • Setelah bug CPU VirtualBox teratasi, tercipta lingkungan eksekusi tanpa friksi
  • Claude Code dapat dijalankan dengan bebas di dalam sandbox VM penuh
  • Jika terjadi masalah, cukup hapus lalu buat ulang VM, dan reproducibility terjamin hanya dengan satu Vagrantfile
  • Jika menggunakan flag --dangerously-skip-permissions, sangat disarankan membangun lingkungan isolasi seperti ini

1 komentar

 
GN⁺ 2026-01-21
Komentar Hacker News
  • Saat memakai Claude, pada akhirnya setelah beberapa bulan orang jadi menekan Enter begitu saja karena decision fatigue
    Karena itu, menurut saya jauh lebih aman menjalankannya dalam mode YOLO tetapi dengan lingkungan sandbox yang sudah disiapkan
    Di Ubuntu 22.04, saya membangun sandbox berlapis dengan menggabungkan bubblewrap dan Landlock LSM
    Landlock membatasi akses sistem berkas berbasis whitelist, dan juga mengontrol akses ke port TCP
    bubblewrap memisahkan mount namespace untuk membuat /tmp per proyek dan menyembunyikan secret key
    Dengan dnsmasq, saya mengatur whitelist DNS agar hanya domain yang diperlukan yang bisa di-resolve
    Berkat struktur seperti ini, stres karena harus terus mengawasi agen jadi berkurang

    • Saya juga menjalankan beberapa instance Claude dalam mode YOLO di lingkungan serupa, dan benar-benar melelahkan saat harus membangun plugin Emacs TRAMP langsung di NUC lokal
      Menyetujui satu per satu potongan elisp yang disarankan Claude adalah pengalaman yang sangat melelahkan
      Meski saya hanya berhati-hati agar tidak memasang hal aneh lewat perintah Bash, tetap saja terasa berat
    • Saya memakai Windows jadi belum mencobanya sendiri, tetapi setahu saya di Linux Claude Code punya fitur sandboxing bawaan lewat perintah /sandbox
  • Saya Srini dari Docker
    Banyak developer memakai Docker untuk menyelesaikan masalah ini, dan kami juga sering menerima masukan soal keterbatasan Docker-in-Docker
    Karena itu, kami merilis Docker Sandboxes dalam bentuk pratinjau eksperimental
    Masih tahap awal, tetapi kami sedang mengembangkan versi berikutnya berbasis MicroVM agar bisa menghindari masalah Docker-in-Docker

    • Saya penasaran bagaimana Docker Sandbox menyelesaikan masalah Docker-in-Docker
      Saya ingin tahu apakah Claude bisa menjalankan container lain di dalam Docker Sandbox tanpa hak istimewa
  • Kebanyakan orang tampaknya menghindari menjalankan VM lokal sendiri, tapi saya tidak paham alasannya
    Sebenarnya VM lokal adalah solusi paling sederhana dan menyelesaikan semua masalah
    Jika memakai Docker di Mac, Anda sebenarnya sudah berjalan di atas Linux VM, jadi bedanya dengan lingkungan nyata hanya satu lapis
    Dari IDE pun bisa langsung masuk lewat SSH untuk memeriksa kode
    Saya menyalakan opsi --dangerously-skip-permissions dan menangani semua perubahan lewat PR
    Saya sudah memakainya selama berbulan-bulan bersama workmux, dan sangat efisien karena bisa menangani banyak PR sekaligus
    Alasannya lebih baik daripada VM cloud adalah karena jika banyak container dijalankan bersamaan, konsumsi memorinya besar
    Menjalankan VM cloud berspesifikasi tinggi 24/7 membuat biaya menjadi terlalu mahal

  • AI yang berbahaya bahkan tidak perlu mengeksploitasi celah keluar dari VM; cukup menambahkan kode arbitrer ke Vagrantfile untuk mendapatkan akses ke host
    Bahkan jika hanya mengkhawatirkan kesalahan biasa, masalah tetap muncul bila Claude mengubah commit hook lalu hook itu dijalankan
    Rasanya memang sangat sulit menjaga isolasi sempurna sambil tetap membuat pengembangan nyaman

    • Claude cukup dikurung ke subdirektori tertentu
      Misalnya dengan Docker volume mount agar hanya folder sandbox/ yang bisa diubah dan .git tidak dapat diakses
    • Tapi ini mengandaikan direktori dibagikan dua arah antara VM dan host
      Saya biasanya membuat snapshot, menjalankan agen di VM kecil, lalu membandingkan snapshot setelahnya
      Sinkronisasi otomatis benar-benar tidak saya lakukan karena itu merusak tujuan isolasi
    • Risiko lainnya adalah, kode berbahaya bisa ditambahkan ke repository lalu menginfeksi saat dijalankan di luar VM di kemudian hari
    • “node ec2?” tanya seseorang singkat
  • Saya sedang mencoba pendekatan lain — yaitu mencegat apa yang hendak dijalankan Claude
    Shannot menangkap niat sebelum eksekusi dan mencegat system call dalam sandbox PyPy
    Perintah dan penulisan berkas hanya tercatat di log dan tidak benar-benar dijalankan
    Setelah pengguna meninjau dan menyetujuinya di TUI, barulah dijalankan
    Bedanya dengan VM adalah, VM membiarkan semuanya berjalan bebas di lingkungan yang sepenuhnya terisolasi, sedangkan Shannot menerapkan perubahan di sistem nyata dengan persetujuan manusia
    Ini cocok untuk pekerjaan seperti modifikasi server
    Ada juga integrasi Claude MCP, eksekusi jarak jauh lewat SSH, serta fitur checkpoint/rollback

    • Pendekatan ini memang tidak langsung menyelesaikan masalah, tetapi terasa searah dengan fitur kontrol bawaan Claude Code
      Pada akhirnya semuanya berhenti di permintaan persetujuan pertama, jadi agen tidak bisa bereksplorasi dengan bebas
      Yang saya inginkan adalah agen mencoba sampai tuntas tanpa berhenti di tengah, lalu hasilnya dievaluasi
      Dengan begitu penghematan waktunya jauh lebih besar
    • Kelihatannya filosofinya mirip dengan Leash
      Mirip mode system extension native macOS milik Leash, tetapi belum ada mode persetujuan interaktif yang sepenuhnya setara
      Proyek yang menarik
    • Bagian “perintah dan penulisan berkas hanya tercatat di log dan tidak benar-benar dijalankan” sebenarnya sudah menjadi fungsi default yang disediakan Claude
    • Namanya benar-benar cerdas
  • Saat kelelahan karena persetujuan menumpuk, orang akhirnya ingin memakai --dangerously-skip-permissions
    Karena itu saya menjalankan Claude Code di dalam devcontainer
    Akses berkas dibatasi hanya ke repository, dan jaringan hanya diizinkan lewat whitelist
    Setelah itu saya menggeneralisasikannya dengan docker compose, dan selanjutnya berencana menambah dukungan untuk agen lain seperti Codex atau OpenCode
    Saya juga ingin memaksa routing jaringan lewat proxy di host untuk memperkuat logging dan kontrol
    Saat ini saya menanganinya sementara dengan iptables
    Masih tahap awal, tapi sudah bekerja cukup baik
    Kode: agent-sandbox

    • Saya juga sedang bereksperimen dengan konfigurasi serupa
      Saya memakai mitmproxy sebagai proxy jaringan; belum sempurna, tetapi sudah hampir jadi
    • Suatu malam saya dan teman-teman membuat aplikasi dengan vibe coding, dan kami memberi Claude hak root atas klaster server
      Selama beberapa jam Claude mengonfigurasi sistem sendiri dan menyelesaikan aplikasinya
      Kami tidak menulis satu baris kode pun dan hasilnya sangat mengejutkan bagus
      Saya benar-benar merasakan betapa luar biasanya kecepatan pengembangan AI
  • Solusi saya sederhana

    sandbox-run npx @anthropic-ai/claude-code
    

    Dengan begini, perintah npx dijalankan secara transparan di dalam sandbox Bubblewrap, dan hanya direktori saat ini yang diekspos
    Ini bisa diimplementasikan dengan beberapa baris shell POSIX murni
    sandbox-run

    • Saya suka pendekatan Bubblewrap, tetapi sayangnya khusus Linux
      Kekurangan lainnya, setelah hak akses dilepas, itu tidak bisa dipulihkan lagi
  • Saya cukup menaruhnya di container LXC tanpa hak istimewa dan selesai
    Model ancaman saya bukan serangan rumit, melainkan situasi seperti “tanpa sengaja menghapus home directory”

  • Saya menaruh skrip utilitas di direktori run/ proyek dan menjalankan container berbasis compose
    devcontainer dipetakan ke volume dan direktori host
    Claude cukup baik dalam menangani konfigurasi layanan, pembaruan skrip, dan diagnosis masalah runtime
    Tidak ada integrasi browser, tetapi sepertinya Playwright atau Puppeteer sudah lebih dari cukup

  • Saya penasaran dengan pendapat orang tentang sandboxing bawaan Claude Code
    Tautan dokumentasi resmi
    Claude Code memiliki escape hatch untuk mematikan sandbox bila perlu
    Jika suatu perintah gagal karena batasan sandbox, Claude dapat menganalisis penyebabnya lalu mencoba lagi dengan dangerouslyDisableSandbox
    Fakta bahwa agen bisa mematikan sandbox sendiri terlihat seperti kerentanan, jadi saya ingin tahu apakah ada prosedur persetujuan pengguna dalam kasus seperti ini

    • Sayangnya, kadang ada kasus di mana permintaan konfirmasi pengguna dilewati
      Isu terkait: #14268, #13583, #10089