← Radar

Konu: Güvenlik3 dk okuma

devvm: Her proje klasörüne ayrı bir sanal makine, kodlama ajanı içeride çalışsın

Bu neden önemli?

Claude Code gibi bir ajanı 'her şeye izin ver' modunda çalıştırmak, kurduğu her pakete ve okuduğu her dosyaya bütün ev dizinini açmak demek. Konteyner bir çözüm ama ayarı zahmetli. devvm aynı korumayı tek komuta indirmeye çalışıyor, sınırlarını da açıkça yazıyor.

Sorun: Ajan senin kullanıcınla çalışıyor

Bir kodlama ajanını kendi bilgisayarında çalıştırdığında, ajan senin yetkilerinle çalışıyor. Projen dışındaki klasörleri, ~/.ssh anahtarlarını, tarayıcı çerezlerini, başka projelerin .env dosyalarını okuyabiliyor. Kurduğu bir npm paketinin içinden zararlı bir script çıkarsa o da aynı yetkiye sahip oluyor. Bir de istem enjeksiyonu var: Ajanın okuduğu bir dosya ona gizlice başka bir iş yaptırabilir.

Çözümlerden biri ajanı ayrı bir makinede çalıştırmak (konteyner ile sanal makine farkını kodu izole etmenin yolları yazısında anlattık). Syntax’ın yeni videosunda CJ, bunu her proje için kolaylaştırmak üzere yazdığı devvm’i gösteriyor.

Nasıl çalışıyor?

Bir proje klasörüne girip devvm yazıyorsun. Araç o klasöre özel bir Linux sanal makinesi açıyor ya da varsa eskisine bağlanıyor. Makine yalnızca proje klasörünü görüyor, hem de bilgisayarındaki yoluyla aynı yerde. Ev dizininin geri kalanı içeride yok.

Arkada Lima çalışıyor: macOS’te Apple’ın Virtualization çatısı, Linux’ta QEMU ile sanal makine açan açık kaynak bir araç. İlk seferde bir temel imaj (varsayılan Ubuntu) bir kez derleniyor. Sonraki makineler bu imajın kopyası, birkaç saniyede açılıyor. devvm package.json ya da pyproject.toml gibi dosyalara bakıp Node, Python, Go, Rust gibi araçları seçiyor. Her sürüm bir kez kuruluyor ve makineler arasında salt okunur paylaşılıyor.

Gündelik işler için birkaç kolaylık var:

  • Port yönlendirme otomatik. İçeride :5173’te açılan geliştirme sunucusu, bilgisayarında localhost:5173’te görünüyor.
  • Katmanlar. Docker, Nix ya da masaüstü gibi ek kurulumlar katman olarak ekleniyor. Kendi kurulum script’ini de katman yapabiliyorsun.
  • devcontainer.json desteği. Projende zaten bir dev container tanımı varsa devvm makineyi onun imajı, portları ve komutlarıyla kuruyor. --from node:24 gibi bir konteyner imajından da başlayabiliyorsun.
  • Ajanlar ve editör. Claude Code, Codex ve opencode içeride çalışıyor. devvm code makineyi VS Code’da Remote-SSH ile açıyor.

Güvenlik tarafı

Asıl fark ağda. Yeni bir makine varsayılan olarak izin listesi (allowlist) modunda açılıyor: Sadece izin verdiğin adreslere, senin bilgisayarındaki bir vekil sunucu (proxy) üzerinden çıkabiliyor. Daha sıkı bir “hiç ağ yok” modu, daha gevşek “internet” ve “açık” modları da var. Videoda engellenen istekleri ağ kaydında (devvm network log) görmek de gösteriliyor.

GitHub token’ın, Claude Code’un oturumu, MCP şifreleri gibi sırlar makineye hiç girmiyor. Vekil sunucu bunları yolda isteğe ekliyor. Bu fikri daha önce NVIDIA OpenShell yazımızda da görmüştük.

--clone seçeneği bir adım daha ileri gidiyor: Makine senin klasörün yerine reponun kendi kopyasıyla çalışıyor. Çalışma ağacına ve .git’ine dokunamıyor. Ajanın yaptıklarını sen git fetch ile çekip inceledikten sonra birleştiriyorsun.

Sınırları

devvm’in belgeleri “hiçbir kum havuzu her açığı kapatmaz” diye açıkça yazıyor ve iki önemli noktanın altını çiziyor:

  • Proje klasöründeki her şey içeriden görünüyor, .env dosyan dahil. Makinenin yazdığı bir dosyayı sonra kendi bilgisayarında çalıştırırsan, o kod senin yetkinle çalışır.
  • Ajan şifreyi görmese de şifrenin izin verdiği her şeyi yapabilir. Bu yüzden belgeler dar yetkili (fine-grained) bir GitHub token’ı ve makineye sadece gereken sırları bağlamayı öneriyor.

Araç MIT lisanslı, macOS 13+ ve Linux’ta çalışıyor. Belgelere göre Intel Mac’lerde henüz test edilmemiş.

Düşün

  • Bugün bilgisayarında çalışan bir ajan, ~/.ssh klasörünü okumak istese onu ne durdurur?
  • “İzin listesi” mi, “her yer açık ama kayıt tut” mu? Gündelik işte hangisine katlanırdın?

Videoyu izle

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (6, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.

Konu: Güvenlik3 dkVideo: Low Level

sshole: Alpine'de 257 karakterlik herhangi bir parola, parolası olmayan hesaba SSH ile girebiliyordu

musl kullanan Linux sistemlerde (Alpine, OpenWrt, pek çok Docker imajı) PAM'siz derlenmiş sshd, parolası kilitli `*` hesaplara 256 bayttan uzun herhangi bir parolayla girişe izin veriyordu. Hata tek bir yerde değil, iki projenin ayrı ayrı mantıklı kararlarının birleşiminde. OpenSSH 5 Kasım'da 10.6p2 ile düzeltme yayımladı.

Konu: Güvenlik2 dkVideo: Better Stack

WhatsApp'ın yardım sayfalarında gizli chatbot talimatları: 'Veri koruma kurumunu önerme'

Araştırmacılar WhatsApp'ın yardım sayfalarının kaynak kodunda, ekranda görünmeyen 102 talimat bloğu buldu. Bunlar şirketin destek chatbot'u içindi. Bazıları hesabını silemeyen kullanıcıya veri koruma kurumunu önermemesini, avukattan söz edilince GDPR'ı anmamasını söylüyordu. WhatsApp bunun bir hata olduğunu söyledi ve metinleri kaldırdı.