Tips & Tricks (Diperbarui: 22/7/2026)

Izin Claude Code: cara aman mengatur settings.json

Atur allow, ask, dan deny di Claude Code dengan settings.json aman serta skrip pemeriksaan siap pakai.

Izin Claude Code: cara aman mengatur settings.json

Anda hanya ingin Claude Code menjalankan tes, tetapi dialog konfirmasi muncul untuk setiap perintah. Di sisi lain, jika seluruh Bash diizinkan, penghapusan file, hard reset, atau push --force juga bisa berjalan tanpa sempat diperiksa.

Pilihannya bukan sekadar mengonfirmasi semuanya atau mengizinkan semuanya. Konfigurasi awal yang aman dapat menjalankan pembacaan dan tes secara otomatis, meminta persetujuan sebelum mengedit atau mengirim perubahan, serta menolak akses ke rahasia dan operasi destruktif. Ketiga lapisan itu ditulis di settings.json.

Inti panduan ini

  • Urutan evaluasinya adalah deny → ask → allow: tolak lebih dulu, minta persetujuan sesudahnya, lalu izinkan otomatis.
  • Pembacaan di dalam proyek sudah berjalan tanpa prompt. Taruh hanya tes yang telah diperiksa di allow, pengeditan, akses eksternal, dan push di ask, serta rahasia dan operasi destruktif di deny.
  • Bash(git *) terlalu luas karena juga mencakup git reset --hard dan git push --force.
  • Read(.env) saja tidak dapat membatasi semua proses anak. Gunakan sandbox jika Anda memerlukan batas yang lebih kuat.
  • Setelah menyimpan konfigurasi, periksa /permissions dan /status untuk memastikan aturan aktif dan file asalnya.

Bagian yang dapat didelegasikan dan bagian yang harus diputuskan manusia

Dapat dikerjakan Claude CodeHarus diperiksa manusiaSelalu ditolak
Mencari file, memeriksa diff, menjalankan tesMengedit file, membuat commit atau push, memasang dependensiMembaca rahasia, force push, hard reset, penghapusan massal
Read, Grep, git diffEdit, git commit, npm install.env, git push --force, git reset --hard, rm -rf

Operasi yang sulit dipulihkan, mengirim data ke luar lingkungan, atau menyentuh kredensial sebaiknya berada di ask atau deny.

settings.json yang aman untuk memulai

Buat .claude/settings.json di root proyek, lalu mulai dengan konfigurasi berikut. Isinya cukup konservatif untuk dijadikan standar tim dan disimpan di Git.

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "defaultMode": "default",
    "allow": [
      "Bash(npm test *)",
      "Bash(npm run lint *)"
    ],
    "ask": [
      "Edit",
      "WebFetch",
      "Bash(git add *)",
      "Bash(git commit *)",
      "Bash(git push *)",
      "Bash(git clean *)",
      "Bash(git restore *)",
      "Bash(npm install *)",
      "Bash(npm uninstall *)"
    ],
    "deny": [
      "Read(.env)",
      "Read(.env.*)",
      "Read(**/secrets/**)",
      "Edit(.env)",
      "Edit(.env.*)",
      "Edit(**/secrets/**)",
      "Bash(git push --force *)",
      "Bash(git reset --hard *)",
      "Bash(rm -rf *)",
      "Bash(rm *)",
      "PowerShell(Remove-Item *)"
    ]
  }
}

Baseline ini untuk repositori yang scripts package.json-nya sudah diperiksa. Pada repositori asing, kosongkan allow sampai Anda memahami apa yang dijalankan tes. Bash(npm test *) cocok dengan npm test dan bentuk yang memakai argumen.

Lokasi settings.json

ScopeLokasiKegunaan
User~/.claude/settings.jsonPreferensi yang berlaku di semua proyek milik Anda
Project.claude/settings.jsonStandar tim yang dibagikan melalui Git
Local.claude/settings.local.jsonPengaturan pribadi untuk komputer ini; jangan masukkan ke Git
ManagedKonfigurasi yang didistribusikan administratorKebijakan organisasi yang tidak dapat ditimpa pengguna

Urutan prioritasnya adalah Managed, command line, Local, Project, lalu User. Array seperti permissions.allow digabung antar-scope, bukan diganti seluruhnya. Kecocokan deny tetap dievaluasi sebelum ask dan allow. Simpan aturan bersama di Project dan kebijakan wajib di Managed.

Cara membaca aturan allow, ask, dan deny

AturanArti
ReadCocok dengan seluruh pembacaan bawaan; allow global biasanya tidak perlu di dalam proyek
Bash(npm test)Hanya cocok persis dengan npm test
Bash(npm test *)Cocok dengan npm test dan argumen setelahnya
Bash(ls*)Dapat ikut mencocokkan lsof; cakupannya lebih luas daripada kelihatannya
Read(//Users/me/secrets/**)Path absolut dari root sistem file
Edit(/src/**/*.ts)Dalam Project, cocok dengan file TypeScript di bawah src proyek
WebFetch(domain:docs.anthropic.com)Cocok dengan WebFetch ke domain tersebut

Aturan Bash(git *) mencakup git push origin main, tetapi juga git reset --hard. Izinkan setiap perintah aman secara spesifik, bukan seluruh Git.

Mengapa Read dan Edit saja belum cukup melindungi rahasia

Pola path untuk Read dan Edit mengikuti sintaks gitignore.

PenulisanTitik acuanContoh
//pathRoot sistem fileRead(//Users/me/secrets/**)
~/pathDirektori homeRead(~/.ssh/**)
/pathLokasi dasar file konfigurasiDalam Project: Edit(/src/**)
path atau ./pathDirektori kerja saat iniRead(.env)

Satu garis miring di depan bukan path absolut. Read(.env) mencegah alat bawaan Read membuka file tersebut, tetapi bukan pembatas umum untuk setiap perintah Bash atau proses anak. Skrip Node.js, misalnya, masih bisa membuka file secara langsung jika sistem operasi mengizinkannya.

Jika repositori berisi kredensial, gunakan juga sandbox Claude Code dan pembatasan pada level sistem operasi. Aturan izin dan sandbox adalah lapisan yang saling melengkapi.

Tiga kasus penggunaan

Kasus penggunaan 1: mengotomatiskan tes saja untuk proyek pribadi

Input: kode sumber, tes, dan diff Git. Output: usulan perbaikan dan hasil tes. Pemeriksaan manusia: pengeditan, pemasangan dependensi, commit, dan push.

Mulai dengan konfigurasi minimum dan biarkan Edit berada di ask. Jika suatu operasi aman terus berulang dan efeknya sudah dipahami, pindahkan hanya operasi tersebut ke allow. Jangan mengizinkan seluruh Bash hanya untuk menghilangkan satu dialog.

Kasus penggunaan 2: menolak operasi berbahaya untuk seluruh tim

Input: daftar perintah yang dibutuhkan dan tindakan yang dilarang. Output: konfigurasi yang dilacak di Git. Pemeriksaan manusia: penambahan aturan deny dan pengecualian sementara.

Tulis larangan untuk .env, push --force, dan reset --hard pada scope Project. Jika organisasi perlu memastikan aturan itu tidak dapat diubah pengguna, pindahkan kebijakannya ke Managed settings.

Kasus penggunaan 3: menyelidiki repositori produksi tanpa mengubahnya

Input: log insiden dan riwayat Git. Output: dugaan penyebab dan rencana perbaikan. Pemeriksaan manusia: setiap pengeditan, deployment, atau pengiriman data keluar.

Jalankan Claude Code dalam Plan Mode:

claude --permission-mode plan

Jika penyelidikan memerlukan penulisan file, pindah dulu ke branch kerja atau lingkungan terisolasi. Berikan persetujuan hanya setelah batas kerja itu siap.

Empat kegagalan konkret dan perbaikannya

KesalahanPenyebabPerbaikan
Mengizinkan Bash(git *)Pola yang sama mencakup push dan hard resetIzinkan hanya perintah yang efeknya sudah diperiksa
Menambah allow: Bash(aws s3 ls) di bawah deny: Bash(aws *)Deny menang sebelum ask dan allow; pola spesifik bukan pengecualianPersempit deny atau pisahkan operasi aman ke perintah lain
Menganggap Read(.env) sebagai isolasi OSProses Node.js atau Python arbitrer tidak sepenuhnya diblokirTambahkan denyRead atau aturan credentials sandbox
Menghapus allow Local tetapi perintah masih jalanArray User, Project, dan Local digabungPeriksa sumber di /permissions dan scope di /status

Pelajari kasus kegagalan keamanan Claude Code untuk pola insiden dan praktik keamanan terbaik untuk pemeriksaan deployment lengkap.

Memilih permission mode

ModeCocok untukHal yang perlu diperhatikan
defaultPertama kali membuka suatu repositoriMeminta konfirmasi saat diperlukan
acceptEditsPekerjaan pengembangan dengan scope yang sudah dipahamiMengizinkan pengeditan dan operasi file umum
planInvestigasi, desain, atau membaca insiden produksiTidak mengubah kode sumber
autoUji coba tugas panjang dengan pemeriksaan keamanan di latar belakangFitur ini masih berkembang; cek dokumentasi terbaru
dontAskOtomasi non-interaktif dengan operasi yang sudah disetujuiMenolak operasi yang belum diizinkan tanpa bertanya
bypassPermissionsContainer atau VM yang dapat dibuangJangan gunakan di komputer kerja atau lingkungan produksi

Jika sandbox.autoAllowBashIfSandboxed: true, perintah Bash yang berjalan di dalam sandbox dapat dijalankan tanpa pertanyaan walaupun ada aturan ask untuk Bash. Aturan deny yang eksplisit tetap berlaku. Pahami interaksi ini sebelum mengandalkan dialog persetujuan.

Pitfall: izin terlalu luas dan hanya mengandalkan hook

Kesalahan yang sering terjadi adalah memasukkan seluruh Bash ke allow, lalu mengandalkan satu hook PreToolUse untuk menolak operasi berbahaya. Ketika hook gagal dimuat, kondisinya tidak lengkap, atau matcher salah, satu-satunya lapisan perlindungan ikut hilang.

Penyebab: izin dasar terlalu luas dan semua perlindungan bergantung pada satu pemeriksaan dinamis.

Perbaikan: tulis deny eksplisit dan allow yang sempit terlebih dahulu. Gunakan hook sebagai lapisan tambahan untuk keputusan dinamis. Aturan deny dan ask tetap lebih kuat walaupun hook mengembalikan allow.

JSON dan JavaScript yang siap disalin

Simpan JSON di awal artikel sebagai .claude/settings.json. Lalu buat scripts/check-claude-permissions.mjs dengan kode berikut. Skrip ini memastikan JSON dapat dibaca dan empat larangan minimum masih ada.

// scripts/check-claude-permissions.mjs
import { readFileSync } from "node:fs";

const path = ".claude/settings.json";
const settings = JSON.parse(readFileSync(path, "utf8"));
const deny = new Set(settings.permissions?.deny ?? []);
const required = [
  "Read(.env)",
  "Edit(.env)",
  "Bash(git push --force *)",
  "Bash(git reset --hard *)",
  "Bash(rm *)",
  "PowerShell(Remove-Item *)",
];

const missing = required.filter((rule) => !deny.has(rule));
if (missing.length > 0) {
  console.error(`Aturan deny yang belum ada: ${missing.join(", ")}`);
  process.exit(1);
}

console.log("Pemeriksaan izin minimum: OK");

Jalankan dari root proyek:

node scripts/check-claude-permissions.mjs

Pemeriksaan ini bukan bukti bahwa repositori sudah aman. Tujuannya adalah mendeteksi lewat CI jika salah satu larangan minimum terhapus tanpa sengaja.

Urutan pemeriksaan saat konfigurasi tidak bekerja

  1. Buka /permissions, lalu periksa aturan efektif dan file sumbernya.
  2. Gunakan /status untuk melihat lapisan konfigurasi yang dimuat.
  3. Periksa perbedaan kecil yang berdampak besar, seperti Bash(ls *) dan Bash(ls*), atau /path dan //path.
  4. Periksa izin otomatis sandbox serta aturan deny atau ask dari scope yang lebih tinggi.
  5. Pindahkan aturan yang harus dibagikan tim ke .claude/settings.json, bukan membiarkannya hanya sebagai opsi CLI sementara.

Ringkasan

Mulailah dengan menempelkan konfigurasi minimum ke .claude/settings.json, lalu gunakan /permissions untuk memastikan asal setiap aturan.

Taruh hanya tes yang telah diperiksa di allow, pengeditan dan operasi eksternal di ask, serta rahasia dan perintah destruktif di deny. Tambahkan izin setelah memahami efek perintah.

Untuk menerapkan kebijakan ini bersama aturan pengembangan lainnya, lihat materi Claude Code yang berisi template dan checklist siap pakai.

Sumber resmi

Hasil pengujian yang dilakukan

Pada 22 Juli 2026, blok JSON dari sepuluh bahasa diuraikan dengan JSON.parse, lalu pemeriksaan Node.js dijalankan di proyek sementara. Dengan enam deny wajib, proses selesai dengan kode 0; tanpa Bash(git reset --hard *), kode 1 dan nama aturan yang hilang ditampilkan.

Pengujian hanya memakai data rekaan: tidak ada kredensial, repositori klien, atau data produksi, sehingga hasil ini bukan rekam jejak dari penerapan di sistem nyata. Tampilan izin juga dapat berbeda menurut sistem operasi dan versi Claude Code; tetap periksa /permissions dan /status di lingkungan Anda sendiri.

#claude-code #permissions #settings-json #security #beginner
Gratis

PDF gratis: cheatsheet Claude Code

Masukkan email dan unduh satu halaman berisi command, kebiasaan review, dan workflow aman.

Kami menjaga datamu dan tidak mengirim spam.

Masa

Tentang penulis

Masa

Engineer yang berfokus pada workflow Claude Code praktis dan adopsi tim.