
Zorunlu Erişim Kontrolü: SELinux ve AppArmor Ne Yapar?
Web sunucunuz kendi kullanıcısıyla çalışıyor, dosya izinleri doğru. Yine de bir açıktan yararlanan saldırgan, o kullanıcının erişebildiği her şeye ulaşabilir. Bir katman daha olsaydı ulaşamazdı.
Bu yazı, klasik izinlerin üstüne eklenen zorunlu erişim kontrolünü ele alıyor.
Klasik İzinlerin Sınırı
| Model | Kararı kim verir |
|---|---|
| Klasik izinler | Dosya sahibi |
| Zorunlu erişim kontrolü | Sistem politikası |
Bu fark belirleyicidir: klasik modelde bir sürecin yapabilecekleri onu çalıştıran kullanıcının yetkisiyle sınırlıdır — zorunlu erişim kontrolünde ise sürecin kendisine ayrıca bir sınır çizilir ve kullanıcı yetkili olsa bile o sınır aşılamaz.
Yani web sunucusu kullanıcısı bir dosyayı okuyabiliyor olsa bile, politika izin vermiyorsa okuyamaz.
Bu ikinci katman, bir açıktan yararlanmanın etkisini dramatik biçimde daraltır.
Nasıl Çalışır?
- Her sürece bir bağlam atanır.
- Her dosyaya bir etiket verilir.
- Politika hangi bağlamın hangi etikete erişeceğini tanımlar.
- Tanımlanmamış erişim reddedilir.
Dördüncü madde modelin gücünü verir: varsayılan davranış reddetmektir — açıkça izin verilmemiş her erişim engellenir ve saldırganın beklenmedik bir yola sapması baştan imkânsızlaşır.
Klasik izinlerde ise varsayılan genellikle izin vermektir.
Üçüncü madde ise politikanın kapsamını gösterir. Dosya erişimi dışında ağ bağlantısı, port dinleme ve süreç oluşturma da kapsanabilir.
Gerçek Bir Senaryo
Etkiyi somutlaştırmak için tipik bir saldırı akışı:
- Bir eklenti açığından dosya yüklenir.
- Yüklenen betik çalıştırılmak istenir.
- Betik sistem dosyalarını okumaya çalışır.
- Dışarıya bağlantı açmaya çalışır.
Zorunlu erişim kontrolü bu zinciri birden fazla noktada kırar: politika web sunucusuna yükleme klasöründen kod çalıştırma izni vermiyorsa ikinci adım başarısız olur — dosya diskte durur ama hiçbir şey yapamaz.
Dördüncü adım da ayrıca engellenebilir. Web sunucusunun dışarıya bağlantı açması normalde gerekmez.
Bu iki kısıt, en yaygın saldırı sonuçlarını etkisiz kılar.
Çalışma Modları
| Mod | Davranış |
|---|---|
| Zorlayıcı | Engeller ve kaydeder |
| İzin verici | Engellemez, yalnızca kaydeder |
| Devre dışı | Hiç çalışmaz |
İkinci satır geçiş için tasarlanmıştır ve doğru kullanım yoludur: izin verici modda sistem hiçbir şeyi engellemez ama neyi engelleyeceğini kaydeder — bu kayıtları inceleyerek politikayı üretimi bozmadan hazırlayabilirsiniz.
Doğrudan zorlayıcı moda geçmek, beklenmedik servis arızalarına yol açar.
Üçüncü satır ise çoğu kurulumda ilk yapılan işlemdir ve yanlış bir alışkanlıktır.
Bir sorun çıktığında bu katmanı kapatmak sorunu çözer ama korumayı da tamamen ortadan kaldırır.
Neden Kapatılıyor?
- Hata mesajları anlaşılmaz.
- Sorunun kaynağı gizlenir.
- Politika yazmak emek ister.
- Belgeler bunu öneriyor olabilir.
İkinci madde en büyük engeldir: politika bir erişimi engellediğinde uygulama genelde "izin reddedildi" der ve klasik izinlerde sorun aramaya başlarsınız — dosya izinleri doğrudur ama bir başka katman engelliyordur.
Bu, saatlerce yanlış yerde arama yapmaya yol açar.
Çözüm, izin reddi kayıtlarını doğrudan incelemektir; oradaki mesajlar hangi kuralın engellediğini açıkça söyler.
Dördüncü madde ise sık karşılaşılan bir tavsiyedir ama güvenlik açısından yanlıştır.
Engelleme Teşhisi
- Denetim kayıtlarına bakın.
- Reddedilen erişimi bulun.
- Hangi bağlam ve etiket olduğunu görün.
- Gerekli izni tanımlayın.
Birinci madde teşhisin tamamıdır: bir uygulama beklenmedik biçimde "izin reddedildi" veriyorsa, denetim kayıtlarında o anda bir engelleme kaydı olup olmadığına bakmak sorunun kaynağını saniyeler içinde belirler.
Kayıt varsa sorun politikadadır; yoksa klasik izinlerdedir.
Bu tek kontrol, iki tamamen farklı arama yolunu ayırır.
Dördüncü madde ise politikayı genişletir ama mümkün olduğunca dar tutulmalıdır.
Sık Karşılaşılan Durumlar
| Durum | Neden |
|---|---|
| Standart dışı dizinde site | Etiket yanlış |
| Standart dışı port dinleme | Port tanımlı değil |
| Web sunucusundan dış bağlantı | Varsayılan kapalı |
| Yedekten geri yüklenen dosyalar | Etiketler kaybolmuş |
Dördüncü satır çok yaşanan ve şaşırtan bir durumdur: bir yedekten geri yüklenen dosyalar etiket bilgisini taşımayabilir ve site aniden erişilemez olur — dosyalar yerinde ve izinleri doğrudur ama etiketleri yanlıştır.
Çözüm, ilgili dizinin etiketlerini yeniden uygulamaktır ve bu tek komutluk bir işlemdir.
Birinci satır ise siteyi alışılmadık bir konuma kuranlarda görülür ve aynı çözümle giderilir.
Üçüncü satır ise dış API kullanan uygulamalarda karşımıza çıkar ve açıkça izin verilmesi gerekir.
Nereden Başlamalı?
- Kapatmayın, izin verici moda alın.
- Kayıtları bir süre toplayın.
- Gerekli izinleri tanımlayın.
- Zorlayıcı moda geçin.
Birinci madde en önemli tavsiyedir: bir sorunla karşılaştığınızda bu katmanı tamamen kapatmak yerine izin verici moda almak, hem sorunu çözer hem hangi erişimlerin gerektiğini öğrenmenizi sağlar.
Kapatmak ise bu bilgiyi de yok eder.
İkinci madde ise uygulamanın tüm işlevlerinin çalıştırılmasını gerektirir; nadir kullanılan bir özellik ancak o zaman kayıt üretir.
Bu nedenle toplama süresi yeterince uzun olmalıdır.
Sunucunuzda bu katmanı yapılandırmak için kök erişim gerekir; VDS sunucu barındırma ile tam yetkili erişiminiz olduğu için politikayı ihtiyacınıza göre şekillendirebilirsiniz.
Sonuç
Zorunlu erişim kontrolü klasik izinlerin üstüne ikinci bir sınır çizer: web sunucusu kullanıcısı bir dosyayı okuyabiliyor olsa bile, politika izin vermiyorsa okuyamaz. Bu, bir açıktan yararlanmanın etkisini dramatik daraltır — yüklenen zararlı bir betik diskte durur ama çalıştırılamaz. Sorun çıktığında kapatmayın: izin verici moda alın; hem sorun çözülür hem hangi erişimlerin gerektiğini öğrenirsiniz.
Sıkça Sorulan Sorular (SSS)
Klasik izinlerden farkı ne?
Kararı kimin verdiği. Klasik modelde bir sürecin yapabilecekleri onu çalıştıran kullanıcının yetkisiyle sınırlıdır; zorunlu erişim kontrolünde ise sürecin kendisine ayrıca bir sınır çizilir ve kullanıcı yetkili olsa bile o sınır aşılamaz. Ayrıca varsayılan davranış reddetmektir.
"İzin reddedildi" hatası alıyorum ama izinler doğru?
Denetim kayıtlarına bakın. O anda bir engelleme kaydı varsa sorun politikadadır, yoksa klasik izinlerdedir — bu tek kontrol iki tamamen farklı arama yolunu ayırır. Kayıtlardaki mesajlar hangi kuralın engellediğini açıkça söyler.
Yedekten geri yükledim, site açılmıyor?
Geri yüklenen dosyalar etiket bilgisini taşımamış olabilir. Dosyalar yerinde ve izinleri doğrudur ama etiketleri yanlıştır. Çözüm, ilgili dizinin etiketlerini yeniden uygulamaktır ve bu tek komutluk bir işlemdir.
Sorun çıkınca kapatabilir miyim?
Kapatmak yerine izin verici moda alın. O modda sistem hiçbir şeyi engellemez ama neyi engelleyeceğini kaydeder — bu kayıtlarla politikayı üretimi bozmadan hazırlayabilirsiniz. Tamamen kapatmak sorunu çözer ama korumayı ve o bilgiyi de yok eder.