İçeriğe Atla
Rehberler · 12 dk okuma · görüntülenme
100%

systemd Service Sandbox ile Sertleştirme (ProtectSystem, DynamicUser)

Uygulamayı değiştirmeden servisleri daha dar bir izin setine sıkıştırmak: dosya sistemi, capability, syscall ve ağ kısıtları.

systemd servis sandbox sertleştirmesini anlatan kapak görseli

Linux’ta servis hardening için AppArmor/SELinux gibi güçlü araçlar var. Ama sahada en hızlı “etki/çaba” oranını çoğu zaman systemd unit sandboxing verir: uygulamayı değiştirmeden izin alanını daraltırsınız.

Bu yazıda “minimum risk” ile başlayıp kademeli sıkılaştırılan bir model anlatıyorum.

systemd servis sandbox sertleştirmesini anlatan kapak görseli
Hedef: servis “çalışsın”, ama beklenmeyen bir durumda etki alanı dar kalsın.

Başlangıç: önce gözlemle

Sertleştirmeye başlamadan önce iki şeyi netleştirin:

  • Servis hangi dosyalara yazıyor? (log, tmp, cache, socket)
  • Hangi portlara çıkıyor / dinliyor?

Bu gözlem olmadan ProtectSystem veya ReadOnlyPaths gibi ayarlar “kır ve yak” olur.

Faz 1 — Düşük riskli üçlü

Bu üç ayar çoğu serviste az sürpriz çıkarır:

  • NoNewPrivileges=true
  • PrivateTmp=true
  • ProtectHome=true (servis home erişimi gerekmiyorsa)

Faz 2 — Dosya sistemi: ProtectSystem

En etkili ama en çok kıran yer burasıdır:

  • ProtectSystem=full (bazı yollar read-only)
  • ProtectSystem=strict (neredeyse her yer read-only)

Bu noktada servisinizin yazması gereken yerleri açıkça tanımlarsınız:

  • ReadWritePaths=/var/lib/myapp /var/log/myapp
  • StateDirectory=myapp (systemd’nin yönetmesini sağlar)
  • CacheDirectory=myapp

Örnek unit parçası

[Service]
DynamicUser=true
StateDirectory=myapp
CacheDirectory=myapp
LogsDirectory=myapp

NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/var/lib/myapp /var/log/myapp

Faz 3 — Kimlik: DynamicUser

DynamicUser=true ile servis, sistemde kalıcı kullanıcı açmadan izole olur. Sahadaki kazanımlar:

  • “yanlışlıkla ortak user” kullanımı biter
  • izin seti daralır
  • servis kaldırıldığında iz bırakmaz

Ama dikkat:

  • Servis kalıcı dosya yazacaksa StateDirectory= gibi systemd-managed dizin kullanın
  • Bazı uygulamalar UID/GID’yi “kalıcı” bekler; burada istisna yönetimi gerekir

Faz 4 — Linux capabilities ve syscall filtreleri

En kritik prensip: capability listesini minimal tut.

Örnek:

  • Web servisi genelde CAP_NET_BIND_SERVICE dışında hiçbir şeye ihtiyaç duymaz (80/443 dinleyecekse).
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE

Syscall filtreleri daha ileri bir seviye:

SystemCallFilter=@system-service
SystemCallErrorNumber=EPERM

Faz 5 — Ağ kısıtları (gerekiyorsa)

Uygulama sadece belirli aileleri kullanıyorsa:

RestrictAddressFamilies=AF_INET AF_INET6

Eğer servis “dışarı çıkmamalı” ise daha sert kısıtlar düşünülür, ama burada “kırma” riski büyür. Önce egress gözlemlemesi öneririm.

Rollout ve geri dönüş

Ben bu tarz hardening değişikliklerini de “release ring” ile yayarım:

  • Canary: 1 host
  • Pilot: 5–10%
  • Prod: kalan

Rollback planı basit olmalı:

  • Unit drop-in dosyasını geri al
  • systemctl daemon-reload && systemctl restart

Kapanış: Sertleştirme bir ürün gibi yönetilmeli

systemd sandboxing “tek seferlik güvenlik işi” değil, servis yaşam döngüsünün parçası olmalı. En iyi sonuç, küçük adımlarla ve ölçümle gelir: hangi ayar, hangi riski düşürdü ve hangi operasyonel maliyetle?

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

Yeni yazılardan haberdar olun

Haftada bir yeni içerikler ve kaynaklar doğrudan e-postanıza gelsin.

Spam yok. Yalnızca yeni ve önemli içerikler için e-posta gönderilir.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar