- 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 up → vagrant ssh → claude --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
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
/tmpper proyek dan menyembunyikan secret keyDengan 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
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
/sandboxSaya 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 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-permissionsdan menangani semua perubahan lewat PRSaya 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
Misalnya dengan Docker volume mount agar hanya folder
sandbox/yang bisa diubah dan.gittidak dapat diaksesSaya biasanya membuat snapshot, menjalankan agen di VM kecil, lalu membandingkan snapshot setelahnya
Sinkronisasi otomatis benar-benar tidak saya lakukan karena itu merusak tujuan isolasi
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
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
Mirip mode system extension native macOS milik Leash, tetapi belum ada mode persetujuan interaktif yang sepenuhnya setara
Proyek yang menarik
Saat kelelahan karena persetujuan menumpuk, orang akhirnya ingin memakai
--dangerously-skip-permissionsKarena 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 memakai mitmproxy sebagai proxy jaringan; belum sempurna, tetapi sudah hampir jadi
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
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
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 composedevcontainer 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
dangerouslyDisableSandboxFakta bahwa agen bisa mematikan sandbox sendiri terlihat seperti kerentanan, jadi saya ingin tahu apakah ada prosedur persetujuan pengguna dalam kasus seperti ini
Isu terkait: #14268, #13583, #10089