Claude Code sunucuda nasıl güvenli çalıştırılır?
Claude Code ile --dangerously-skip-permissions bayrağını kullanırken sisteminizi koruyun. Sandbox, container veya geçici VPS kullanarak hata riskini nasıl sınırlayacağınızı öğrenin.
Claude Code uygulamasını bir sunucuda güvenli şekilde çalıştırmanın anlamı
Claude Code uygulamasını bir sunucuda güvenli şekilde çalıştırmak için izin istemlerini açık tutun, uygulamayı yetkisiz bir kullanıcı hesabıyla çalıştırın ve gözetimsiz işlemler için güvene dayalı bir yapı yerine gerçek sınırlar oluşturun: yerleşik sandbox, bir container veya içinde önemli veri barındırmayan geçici bir VPS kullanın. --dangerously-skip-permissions bayrağı, model ile shell arasındaki onay adımını kaldırır. Bu takas, gözetimsiz işlemler için makul olabilir ancak yalnızca hatalı bir komutun erişebileceği alanı sınırlayan bir sınır içerisinde yapılmalıdır. Bu kılavuz, söz konusu bayrağın gerçekte neleri değiştirdiğini ve bu sınırı artan izolasyon kademeleriyle nasıl oluşturacağınızı açıklar.
Claude Code sisteminizde neler yapabilir
Claude Code, terminalinizde çalışan bir kodlama ajanıdır. Dosyaları okur, dosyaları yazar ve başlatıldığı kullanıcının yetkileriyle shell komutlarını çalıştırır. Aracın tüm değeri buradan gelir: Bir repoyu klonlayabilir, kodu düzenleyebilir, testleri çalıştırabilir, hata çıktılarını okuyabilir ve her komutu sizin yazmanıza gerek kalmadan kodu bir döngü içerisinde düzeltebilir. Eğer henüz bir sunucu üzerinde kurulum yapmadıysanız, tmux ile VPS üzerinde Claude Code çalıştırma rehberi kurulumu ve oturum yönetimini kapsamaktadır. Bu sayfa, aracı kurduktan sonra ona verdiğiniz yetkileri ele almaktadır.
Risk, aynı cümlenin ikinci kez okunmasıyla aynıdır. Kullanıcınızın yetkileriyle shell komutlarını çalıştıran bir süreç, kullanıcınızın yapabileceği her şeyi yapabilir. ~/.ssh/id_ed25519, ~/.aws/credentials ve kullanıcınızın açabildiği her .env dosyasını okuyabilir. curl komutunu çalıştırabilir ve sunucunun erişebildiği herhangi bir ana bilgisayara veri gönderebilir. git push --force komutunu çalıştırabilir. Ajanın kendi başına bir motivasyonu yoktur. Tehlike, bir görevin yanlış gitmesi veya çalışırken okuduğu metinlerin başka biri tarafından yazılmış talimatlar içermesidir: getirdiği bir web sayfası veya düzeltmesi istenen bir issue içindeki yorum gibi. Bu ikinci duruma prompt injection denir ve "model genellikle mantıklıdır" düşüncesinin bir güvenlik planı olmamasının nedeni budur. Talimatlar daha yakın kaynaklardan da gelebilir; çünkü aynı sunucudaki iki Claude Code oturumu birbirine metin gönderebilir ve kardeş bir oturumdan gelen mesaj, alıcı ajanın okuduğu metinden ibarettir. Planlamanızı ortalama bir senaryoya göre değil, kötü giden bir senaryoya göre yapmalısınız.
İzin sistemi basitçe
Manual modunda Claude Code işlem yapmadan önce sorar. Proje içindeki dosyaların okunması sessizce gerçekleşir; ancak bir dosya düzenlendiğinde veya shell komutu çalıştırıldığında, önce yapılacak düzenleme ya da komut tam olarak gösterilir ve onay beklenir. Tek bir işlemi onaylayabilir veya tekrar sormamasını belirtebilirsiniz. İkinci seçenek, dosya düzenlemeleri için oturum sona erene kadar geçerlidir; shell komutu için ise ilgili repository ve komutla ilişkilendirilerek kalıcı biçimde kaydedilir. Bu nedenle bir sunucuda verilen hızlı bir onay oturum sona erdikten sonra da geçerliliğini korur. Kalıcı olarak uygulanması istenen kurallar settings dosyasında allow, ask ve deny listeleri olarak tutulur. Örneğin git status için allow, git push için ask, .env okumaları için deny kullanılabilir. Deny kuralları her zaman önceliklidir. Bu temel davranış da değişmiştir. Bir sınıflandırıcının işlemleri sizin yerinize incelediği Auto modu, 14 August 2026 tarihinde Pro, Max ve Team planlarında yeni oturumlar için varsayılan hale geldi. Ayrıca Claude Code v2.1.283 sürümünden itibaren, bir varsayılan değer sabitlenmediği sürece her plandaki etkileşimli terminal ve VS Code oturumlarında yerleşik başlangıç modu olarak kullanılmaktadır. Bu nedenle, izleyemediğiniz bir sunucuda hangi modu çalıştıracağınıza karar vermeden önce her izin modunun gerçekte nelere izin verdiğini bilmeniz gerekir.
Bu tasarım, terminali bir insanın izlediğini varsayar. Bir laptop üzerinde bu varsayım genellikle doğrudur. Sunucuda ise çoğu zaman amaç, terminali kimsenin izlememesidir. Uzun bir görevi tmux içinde başlatıp uyumaya gidersiniz. Soru sormak için duran bir agent, sabaha kadar ilerleme kaydedemez. Bu bekleme hem zaman hem de para kaybettirir; çünkü boşta kalan bir Claude Code oturumu warm prompt cache özelliğini kaybeder ve sonraki turda bu cache yeniden oluşturulurken ücret ödenir. İnsanların sunucularda skip flag kullanmasının gerçek nedeni budur. Çözdüğü sorun da gerçektir. Bu kılavuzun geri kalanı, tüm koruma mekanizmalarından vazgeçmeden aynı sorunu çözmeye odaklanır.
--dangerously-skip-permissions bayrağının etkileri
claude --dangerously-skip-permissions onay adımını devre dışı bırakır. Düzenlemeler herhangi bir uyarı olmaksızın gerçekleşir. Kabuk komutları onay istenmeden çalıştırılır. Hassas konumları koruyan korumalı yol denetimleri de atlanır. Açıkça belirttiğiniz reddetme kuralları geçerliliğini korur ve bazı uç eylemler hala onay gerektirebilir; ancak çalışma mantığı basittir: model neyi çalıştırmaya karar verirse, o çalışır.
Bir sunucuda bu bayrakla ilgili iki önemli gerçek vardır. Birincisi, Claude Code Linux ve macOS üzerinde root olarak veya sudo ile çalıştırıldığında bu bayrak engellenir; çünkü root yetkisiyle onay mekanizması olmadan çalışmak, makinedeki herhangi bir dosyayı veya servisi değiştirebilir. Aracın zaten kendi ayrıcalıksız hesabına sahip olması gerekir ve bu bayrak bunu zorunlu kılar. İkincisi, bayrak modelin davranışını hiçbir şekilde değiştirmez. Sadece insanı döngüden çıkarır, başka hiçbir şeyi değiştirmez; bu nedenle bir uyarı ile engellenebilecek her hata artık doğrudan yürütülür.
İşin özü şudur: İzinleri atladığınızda, güvenlik sorusu "aracı kötü bir şey yapacak mı" sorusundan "tek bir hatalı eylem ne kadar hasar verebilir" sorusuna dönüşür. Her kararı kontrol etmeye çalışmayı bırakıp etki alanını (blast radius) kontrol etmeye başlarsınız. Çözüm sınırlamadır ve bu da kademeli olarak uygulanır.
Claude Code yerleşik sandbox'u
Basamaklara geçmeden önce bilinmelidir ki Claude Code, çalıştırdığı komutlar için artık işletim sistemi düzeyinde bir sandbox sunar. Bu özellik, kullanıcıların skip flag kullanma nedenlerinin çoğunu ortadan kaldırır. Linux üzerinde dosya sistemi yalıtımı için bubblewrap, ağ trafiğini bir proxy üzerinden yönlendirmek için de socat kullanılır. Sandbox içinde bir komut yalnızca proje dizinine ve oturumun geçici dizinine yazabilir. Ağ erişimi ise yalnızca her alan adını allow list ile denetleyen bir proxy üzerinden sağlanır. Bir komut ilk kez yeni bir alan adına erişmek istediğinde Claude Code onay ister. Auto modunda yeni host'u bunun yerine classifier inceler.
Bir oturum içinde /sandbox komutuyla etkinleştirilir. Ubuntu ve Debian üzerinde önce gerekli iki paket yüklenmelidir:
sudo apt install bubblewrap socatUbuntu 24.04 ve sonraki sürümlerde varsayılan AppArmor policy, bubblewrap'ın ihtiyaç duyduğu user namespace'leri oluşturmasını engeller. Sandbox paneli eksik bir bileşen olduğunda bunu bildirir. Claude Code sandboxing documentation içinde bu sorunu gideren kısa AppArmor profile yer alır.
Sandbox'ta auto-allow modu bulunur. Uygulanan sınır, daha önce prompt'un üstlendiği görevi yaptığı için sandbox içindeki komutlar prompt gösterilmeden çalışır. Sandbox içinde çalışamayan komutlar normal permission flow'a döner. Bu nedenle gerçekten olağan dışı işlemler yine onay ister. Çoğu server workflow için bu yapı skip flag'in doğru karşılığıdır. Böylece hiç sınır olmadan daha az soru sorulması yerine, işletim sistemi tarafından uygulanan bir sınırla çok daha az soru sorulur.
Sınırlarını açıkça bilinmelidir. Varsayılan olarak sandbox içindeki bir komut, bu yollar engellenmediği sürece credential dosyaları dahil dosya sisteminin büyük bölümünü okumaya devam edebilir. sandbox.credentials setting tam olarak bu amaçla kullanılır. Network proxy, domain name değerlerini denetler ancak trafiğin kendisini incelemez. Bu nedenle github.com gibi geniş bir allow değeri, verilerin dışarı çıkarılması için hâlâ alan bırakır. Docker sandbox içinde çalışmaz. Sandbox temel güvenlik seviyesini önemli ölçüde yükseltir. Ancak tam bir isolation boundary değildir. Bu nedenle aşağıdaki basamaklar hâlâ önemini korur.
Kapsülleme basamakları
Artan izolasyon seviyesine göre üç basamak. Sunucuda başka nelerin barındığına bağlı olarak en düşük seviyeyi seçin.
1. Basamak: özel ve yetkisiz bir kullanıcı. Ajan kendi hesabına, kendi ana dizinine, kendi proje dizinine sahip olur ve sudo yetkisi bulunmaz:
sudo adduser --disabled-password --gecos "" agentHesap sınırı, ajanı sizin dosyalarınızdan; yani SSH anahtarlarınızdan ve makinedeki diğer tüm projelerden uzak tutar. Ayrıca, root olarak çalışmayı reddettiği için skip bayrağının kullanılabilir olmasını sağlar. Bu, her servisi yetkisiz bir kullanıcı olarak çalıştırma prensibinin bir ajana uygulanmış halidir. 1. basamağın sınırlayamadığı şeyler: ağ erişimi ve makinede herkes tarafından okunabilir olan dosyalardır.
2. Basamak: bir container. Anthropic, Claude Code'u root olmayan bir kullanıcı olarak çalıştıran ve ajanın hangi ana makinelere erişebileceğini sınırlayan güvenlik duvarı kurallarına sahip bir referans devcontainer yayınlamaktadır; kendi oluşturduğunuz bir container da aynı işi görür. Dosya sistemi, bağladığınız (mount) birimlerle sınırlanır ve dışa giden trafik, container kurallarının izin verdiği ölçüde kısıtlanır. Sunucuda önemsediğiniz başka servisler barındırıyorsanız bu, doğru orta basamaktır. Sınırı, container'ların ana makine çekirdeğini paylaşmasıdır; dikkatsizce yapılan bir mount işlemi sınırı geçersiz kılar; container'a /var/run/docker.sock yetkisi verirseniz tüm ana makineye erişebilir.
3. Basamak: özel bir VPS. En güçlü basamak en basit olanıdır: ajana, önemsediğiniz hiçbir şeyi barındırmayan tamamen ayrı bir makine verin. Küçük bir VPS ayda birkaç dolara mal olur. Makineyi yeni bir VPS için ilk on dakika rehberi ile kurun, temiz durumun anlık görüntüsünü (snapshot) alın ve ajanın çalışmasına izin verin. Orada başka hiçbir şey barınmasın. Kişisel SSH anahtarı olmasın, yalnızca tek bir depoya (repository) tanımlanmış bir deploy anahtarı olsun. Bulut kimlik bilgileri veya üretim verisi olmasın. Bir işlem hatalı gittiğinde veya sadece temiz bir başlangıç istediğinizde, anlık görüntüyü geri yükleyin ya da makineyi dakikalar içinde yok edip yeniden oluşturun. Patlama yarıçapı, ödediğiniz kira kadardır. Bu kurulumda --dangerously-skip-permissions korkutucu olmaktan çıkar, çünkü gerçekleşebilecek en kötü gerçekçi sonuç, yeniden oluşturulan bir sunucu ve iptal edilen tek bir belirteçtir (token) olur.
Basamaklar birbiri üzerine eklenebilir. Yetkisiz bir kullanıcı olarak, atılabilir bir VPS üzerinde çalışan korumalı (sandboxed) bir ajanın maliyeti neredeyse sıfırdır ve olası hata senaryolarını önemsiz hale getirir. Hedef, sıkıcı olmaktır.
Kimlik bilgilerini koruma
Diğer her şeyin temelini oluşturan kural şudur: agent kullanıcısı, başka bir bileşene ait sırları okuyamamalıdır.
API key değerini yalnızca agent kullanıcısına verin. Bu değeri agent kullanıcısının sahip olduğu ve mode 600 olarak ayarlanmış bir dosyaya koyun. Shell başlatıldığında bu dosyayı yükleyin:
install -m 600 /dev/null /home/agent/claude.env
echo 'export ANTHROPIC_API_KEY=your-key-here' >> /home/agent/claude.env
echo 'source ~/claude.env' >> /home/agent/.bashrcArdından diğer yöndeki erişimi kapatın. Eski Debian ve Ubuntu kurulumlarında ve kurulum sırasında oluşturulan hesaplarda home dizinleri sistemdeki tüm kullanıcılar tarafından okunabilir olabilir. Bu nedenle kendi home dizininizin izinlerini sıkılaştırın: chmod 750 /home/youruser. ls -ld /home/* ile kontrol edin ve agent hesabının listeleyebildiği tüm içerikleri düzeltin.
Her token için kapsamı sınırlandırın. Tek bir repository ile sınırlı fine-grained GitHub token veya repository başına kullanılan deploy key, sızdırılan bir kimlik bilgisinin tüm hesabınızı değil yalnızca tek bir projeyi etkilemesini sağlar. Sandbox kullanıyorsanız, kimlik bilgisi ayarlarına ~/.ssh ve ~/.aws değerlerinin okuma işlemleri için bile reddedilmesini sağlayacak kuralları ekleyin. Production kimlik bilgilerini ise tamamen bu sistemin dışında tutun. Sistemde hiç bulunmayan bir sır agent tarafından sızdırılamaz. Bu sırlar self-hosted bir password manager üzerinde tutuluyorsa password manager'ı agent'ın bulunduğu sistemden farklı bir sistemde çalıştırın ve ayrıca inceleyin; çünkü Vaultwarden'ın zayıf noktaları admin token ve backup dosyasıdır, şifrelenmiş vault'un kendisi değil.
Git güvenlik ağıdır
Aracının yaptığı her commit incelenebilir ve geri alınabilir. Aracı bir branch üzerinde çalıştırıp ilerledikçe commit oluşturursanız Git bu iki olanağı ücretsiz sağlar:
git switch -c agent/refactor-authAracının commit oluşturmadığı değişiklikler bu korumaya sahip değildir: git reset --hard, izlenen dosyalardaki commit edilmemiş değişiklikleri siler. Git, repository dışında kalan hiçbir şeyi de kapsamaz. Çalıştırma sonrasında aracının hangi değişiklikleri commit ettiğini git diff main...agent/refactor-auth ile inceleyin. Branch üzerinde commit edilmeden bırakılan değişiklikleri görmek için ardından git status ve git diff HEAD komutlarını kullanın. Uygun değişiklikleri merge edin. Çalıştırma sonuç vermediyse branch'i silin. Üç dosyaya dokunan bir çalıştırmanın çıktısını kahvaltıda okumak, modülün yarısını yeniden yazan bir çalıştırmanın çıktısını okumaktan çok daha kolaydır. Bu, aracı işe yarayan en küçük değişiklikle sınırlayan bir becerinin pratik karşılığıdır. Forge tarafında main branch'i koruyun. Böylece aracın token'ı bu branch'e push edemez ve hiçbir yere force-push yapamaz. Commit geçmişi, siz uyurken ne olduğunu gösteren bir denetim günlüğü olarak da işlev görür. Bu, terminal çıktısının herhangi bir miktarından daha değerlidir.
Ağ, etki alanının bir parçasıdır
Bir ajan curl çalıştırabilir. Bu cümle, tüm çıkış trafiği (egress) problemini özetler: Ajanın okuyabildiği her şey, başka bir yere gönderilebilir; prompt injection saldırısına uğramış bir ajan bunu yapabilir. Yetkisiz bir kullanıcı bu durumu hiçbir şekilde sınırlamaz, çünkü herhangi bir kullanıcı sunucunun erişebildiği her yere ulaşabilir. Sandbox, bunu proxy aracılığıyla alan bazında sınırlar. Bir container, kendi güvenlik duvarı kurallarıyla bunu kısıtlayabilir. Özel bir VPS ise, sızdırılabilecek veriyi en başta sınırlandırarak bu üç yöntem arasındaki en sağlam çözümü sunar.
Çıkış trafiği sorununu yalnızca ufw ile çözmeye çalışmayın. ufw varsayılan olarak tüm giden trafiğe izin verir; apt, npm, git ve Claude API trafiğine izin verirken diğerlerini kısıtlayan kurallar yazmak zahmetlidir ve sessizce bozulabilir. Bunun yerine sınırı sandbox, container veya makine seviyesinde belirleyin; izin verilen alan adları listesi veya izole bir makine aynı işi daha temiz bir şekilde yapar.
Eğer Claude Code çalıştırmak yerine API üzerinde kendi ajansınızı geliştiriyorsanız, aynı mantık geçerlidir. VPS üzerinde Claude ile yapay zeka ajanı oluşturma bu yolu kapsar; söz konusu ajan da aynı şekilde özel bir kullanıcıyı, kapsamı sınırlandırılmış token'ları ve tek kullanımlık bir ortamı hak eder.
Sunucuyu öncelikle sıkılaştırın
Hangi yöntemi seçerseniz seçin, aracı (agent) yüklemeden önce makinenin temel güvenlik gereksinimlerini karşılaması gerekir: yalnızca SSH anahtarlarıyla erişim, root girişi yasağı, varsayılan olarak reddeden (default-deny) bir güvenlik duvarı ve otomatik güvenlik güncellemeleri. Kontrol listenizi burada oluşturun ve sırayla uygulayın:
FAQ
--dangerously-skip-permissions bayrağını sunucuda kullanmak güvenli midir?
Tek başına değildir. Bu bayrak tüm onay istemlerini devre dışı bırakır, bu nedenle model hatalı bir komut ürettiği anda bu komut çalıştırılır. Etki alanı sınırlandırıldığında (en azından yetkisiz bir kullanıcı hesabı kullanıldığında) bu yöntem savunulabilir bir tercihe dönüşür. Gerçekten gözetimsiz işlemler için ise tek bir projeyi ve sınırlı kapsamlı bir token'ı barındıran bir container veya tek kullanımlık bir VPS tercih edilmelidir. Üretim ortamına ait kimlik bilgilerini veya kaybetmeyi göze alamayacağınız verileri barındıran bir makinede bu bayrağı asla kullanmayın.
Claude Code bir sandbox içeriyor mu?
Evet. Claude Code, /sandbox komutu ile açılan, kabuk komutları için yerleşik bir sandbox ile gelir. Linux üzerinde bubblewrap, macOS üzerinde ise Seatbelt kullanır; yazma işlemlerini proje dizini ile sınırlar ve ağ erişimini yalnızca onaylı alan adlarına izin veren bir proxy üzerinden yönlendirir. Otomatik izin modu, sandbox içindeki komutları istem sormadan çalıştırır; böylece işletim sistemi düzeyinde bir sınır korurken, bayrak kullanımındaki gibi kesintileri azaltır. Bu tam bir yalıtım sınırı değildir; bu nedenle gözetimsiz çalıştırmalar için özel bir kullanıcı veya özel bir makine ile birlikte kullanın.
Skip bayrağı neden root olarak çalışmayı reddediyor?
İzin istemleri olmayan bir root kullanıcısı, sistemdeki her dosyayı ve her servisi değiştirebileceği için Claude Code, Linux ve macOS üzerinde root veya sudo yetkileriyle çalıştırıldığında --dangerously-skip-permissions kullanımını engeller. Çözüm, bu denetimi aşmaya çalışmak değildir. Ajan için yetkisiz bir kullanıcı oluşturun ve onu bu kullanıcı altında çalıştırın; bu hesap sınırı, korumanın ilk ve en düşük maliyetli katmanıdır.
Claude Code SSH anahtarlarımı ve .env dosyalarımı okuyabilir mi?
Çalıştığı kullanıcının okuyabildiği her şeyi okuyabilir; hatta sandbox'ın varsayılan politikası, siz reddedene kadar kimlik bilgisi yollarının okunmasına izin verir. Bu nedenle ajanı kendi kullanıcısı altında çalıştırın, kendi ev dizininizi 750 veya daha kısıtlayıcı bir modda tutun, sandbox ayarlarından kimlik bilgisi yollarını engelleyin ve üretim ortamına ait gizli verileri makinede hiç bulundurmayın. Sandbox'ın hiçbir zaman erişemediği bir gizli veri, okunamaz veya sızdırılamaz.
Claude Code'u gözetimsiz çalıştırmanın en güvenli yolu nedir?
Yalnızca ajan çalışmaları için kullanılan, on dakikada güvenliği sıkılaştırılmış, temiz bir snapshot'ı alınmış, Claude Code'u yetkisiz bir kullanıcı altında çalıştıran, API anahtarını 600 modunda bir dosyada tutan, depo bazlı deploy anahtarları kullanan ve tüm çalışmaları birleştirmeden önce gözden geçirdiğiniz dallarda yürüten düşük maliyetli bir VPS kullanmaktır. Bir işlem hatalı giderse, tek bir token'ı iptal edip snapshot'ı geri yüklersiniz; böylece sahip olduğunuz diğer hiçbir şey etkilenmez.