Ücretsiz ders · CKAD Hazırlık Programı · Modül 5: Ortam, yapılandırma ve güvenlik
Güvenlik Bağlamlarıyla Yetki Düşürmek
Varsayılan kapsayıcılar tam yetki setiyle root koşar; her kaçışı makine uzlaşmasına çevirir. Güvenlik bağlamları uygulamaya gereken tam kadarını bırakıp gerisini soyar.
12 dk okuma
Kazanımlar
- Kapsayıcıları açık kimlikli root dışı kullanıcılarla koşturmak
- Kapsayıcı başına yetenek düşürmek ve yetki yükseltmeyi yasaklamak
- Uygulamanın ihtiyaç duyduğu yerde pod düzeyi fsGroup artı sysctl kurmak
- Reddedilen çağrıyı eksik bağlam alanına kadar izlemek
Neden önemli
Kapsayıcı kaçış şiddeti kapsayıcı yetkisine eşittir; en dar yetki kümedeki en ucuz güvenlik denetimidir. CKAD alanları doğrudan ölçer; çünkü salt YAMLdir, hemen uygulanır etkileri vardır: runAsUser, yetenekler, readOnlyRootFilesystem, allowPrivilegeEscalation. Sınavlar aynı nedenle sever, saldırganlar aynı nedenle nefret eder.
Kavramlar
Pod düzeyi bağlam paylaşılan varsayılanları kurar: tüm kapsayıcılara runAsUser artı runAsGroup, bağlı birimler grup yazılabilir gelsin diye fsGroup ve seçili sysctller. Kapsayıcı düzeyi bağlam kapsayıcı başına geçersiz kılar, keskin aletleri taşır: yetenek düşürme (ALL, sonra uygulamanın kanıtladığı NET_BIND_SERVICE veya neyse geri eklenir), allowPrivilegeEscalation false (roota giden setuid yollarını kapatır), readOnlyRootFilesystem true (uygulamanın gerçekten yazdığı karalama yollarına emptyDir bağlamalarıyla) ve runAsNonRoot true (yalnız uid 0 koşan imajları reddeder).
Retler temiz okunur: yazmalardaki izin hataları dosya sistemi veya kullanıcı yanlış demektir, yetenek hataları denetim veya dmesg içinde eksik yeteneği adlandırır, başlangıçta runAsNonRoot ile CrashLoop imajın root istediğini söyler; düzeltilir veya değiştirilir.
Uygulamalı örnek
Nginx biçimli uygulama, ihtiyaçlarına soyunmuş:
securityContext:
runAsUser: 10001
runAsGroup: 30001
fsGroup: 30001
containers:
- name: web
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: true
capabilities:
drop: [ALL]
add: [NET_BIND_SERVICE]
volumeMounts:
- { name: tmp, mountPath: /tmp }
- { name: cache, mountPath: /var/cache/nginx }
volumes:
- { name: tmp, emptyDir: {} }
- { name: cache, emptyDir: {} }kubectl exec uid 10001 kimliğini kanıtlar; bağlamalar dışı yazma tasarım gereği başarısız olur; 80. port bağlama tutulan tek yetenekle çalışır. Her izin ihtiyaca izlenir, alışkanlığa hiçbir şey yok.
Sınav notları
readOnlyRootFilesystem açılışta yazan uygulamaları kırar: bayrağı düşürmek yerine tam karalama bağlamaları ekle. ALL yetenek düşürmek özellikleri sessiz öldürür (düşük port bağlama, ham soket, chown): hatadan tek tek geri ekle. Ve fsGroupsuz runAsUser birim yazmalarını roota ait bırakır: uygulama bağlamalara yazıyorsa eşleştir.
Mini kontrol
4 soruluk öz kontrol. Yanıtların cihazında kalır, saklanmaz ve gönderilmez. Yalnızca geçen skor (ör. 4 soruda 3) kaydedilir ve yalnızca ders ilerlemesinin kilidini açmak için: bir dersin tamamlanmış sayılması için en az 3 doğru gerekir. Hiçbir sertifika değerlendirmesine sayılmaz.
Ders geri bildirimi
Henüz yayında geri bildirim yok.
Geri bildirim yazmak için giriş yap ve dersi tamamla.
Kaynaklar
Alıştırma
Kurgusal root koşan uygulama bildirimini pod artı kapsayıcı bağlamlarıyla sertleştir (root dışı kullanıcı, düşürülmüş yetkiler ve gerekçeli tek geri ekleme, karalama bağlamalı salt okunur kök, yükseltme yok). Kimliğin exec kanıtını ve anlamlı tasarlanmış bir ret çıktısını göster.
Geçme kriterleri
Bağlamlar iki düzeyde eksiksiz, her izin gerekçeli; exec root dışılığı kanıtlar; ret çıktısı doğru alan düzeyi okumayla alıntılı.