Mövzunu Açan
#0
SELinux yapılandırması yöntemleri
SELinux'a Giriş ve Temel Felsefesi
SELinux (Security-Enhanced Linux), Linux çekirdeğine entegre edilmiş zorunlu erişim kontrolü (MAC) güvenlik mekanizmasıdır. Klasik Linux izin sistemi (DAC) kullanıcıların veya grup üyelerinin kendi dosyaları üzerinde tam kontrolüne izin verirken, SELinux bu modele bir güvenlik katmanı ekler. SELinux, bir sürecin veya kullanıcının belirli bir kaynağa (dosya, port, işlem vb.) erişip erişemeyeceğini, yöneticinin tanımladığı politikalar üzerinden kesin kurallarla belirler. Başka bir deyişle, kullanıcılar root yetkisine sahip olsalar bile, SELinux politikaları onların belirli sistem parçalarına erişimini kısıtlayabilir. Bu, sistem güvenliğini artırarak olası güvenlik açıklarını minimize etmeyi amaçlar. Her dosya, işlem ve port, bir "güvenlik bağlamı" ile etiketlenir ve SELinux bu bağlamlar arasındaki etkileşimleri kontrol eder.
SELinux Modları ve Yönetimi
SELinux'un üç ana çalışma modu vardır: zorlama (enforcing), izin verme (permissive) ve devre dışı (disabled). "Zorlama" modu, politikaları aktif olarak uygular ve ihlallerde erişimi engellerken, "izin verme" modu yalnızca ihlalleri kaydeder ancak erişimi engellemez. Bu durum, hata ayıklama süreçleri için son derece faydalıdır. "Devre dışı" modu ise SELinux'u tamamen kapatır. Sistem yöneticileri, bu modları `setenforce` komutuyla anlık olarak veya `/etc/selinux/config` dosyasını düzenleyerek kalıcı olarak değiştirebilirler. Örneğin, `setenforce 0` komutu SELinux'u permissive moda alırken, `setenforce 1` zorlama moduna geri döndürür. Kalıcı bir değişiklik için, yapılandırma dosyasını güncelledikten sonra sistemin yeniden başlatılması veya SELinux'un yeniden yüklenmesi gerekebilir.
Boole Değişkenleri ile SELinux Ayarlamaları
SELinux politikaları, sistemin davranışını esnek bir şekilde ayarlamak için kullanılan Boolean değişkenleri içerir. Bu değişkenler, genellikle belirli bir servisin veya uygulamanın ek özelliklerini etkinleştirmek veya devre dışı bırakmak için tasarlanmıştır. Örneğin, bir web sunucusunun kullanıcı ana dizinlerine erişmesine izin vermek isteyebilirsiniz; bunun için ilgili SELinux Boolean değişkenini `on` konumuna getirmek gerekir. Bu tür ayarları yönetmek için `getsebool` ve `setsebool` komutları kullanılır. `getsebool -a` mevcut tüm Boole değişkenlerini ve durumlarını listelerken, `setsebool -P httpd_enable_home_dirs on` komutu belirli bir değişkeni kalıcı olarak etkinleştirir. Bu, sistem genelinde politika dosyalarını değiştirmeye gerek kalmadan SELinux'u hızlı ve güvenli bir şekilde ayarlamanın etkili bir yoludur.
Dosya ve Dizin Güvenlik Bağlamları
SELinux, dosya ve dizinler üzerinde sıkı erişim kontrolü sağlamak için güvenlik bağlamlarını kullanır. Her dosya ve dizin, kullanıcı, rol, tip ve hassasiyet bilgilerini içeren bir güvenlik bağlamına sahiptir. Yanlış bağlam etiketlemesi, uygulamaların çalışmamasına veya erişim sorunlarına yol açabilir. Bu bağlamları manuel olarak ayarlamak için `chcon` komutu kullanılır; örneğin, `chcon -t httpd_sys_content_t /var/www/html/mysite` bir dizinin bağlamını değiştirir. Ancak, bu değişiklikler sistem yeniden etiketlendiğinde veya `restorecon` komutu çalıştığında kaybolabilir. Kalıcı değişiklikler için `semanage fcontext` komutu tercih edilir. Bu komut, bir dosya veya dizin için varsayılan bağlamı tanımlar ve ardından `restorecon` komutuyla uygulanır. Bu yöntem, SELinux yapılandırması için güçlü ve dayanıklı bir yaklaşım sunar.
Politika Modifikasyonu ve Özelleştirme
Standart SELinux politikaları genellikle çoğu durum için yeterli olsa da, özel uygulama ihtiyaçları veya benzersiz sistem yapılandırmaları için politika modifikasyonu gerekebilir. Yeni bir uygulamanın doğru güvenlik bağlamlarına sahip olmasını sağlamak veya mevcut bir politikanın belirli bir davranışı kabul etmesini sağlamak amacıyla özel kurallar yazılabilir. `audit2allow` aracı, reddedilen SELinux günlük girdilerini (AVC redleri) analiz ederek ve otomatik olarak özel politika kuralları oluşturarak bu süreci kolaylaştırır. Başka bir deyişle, bu araç sayesinde yöneticiler, loglardaki "denied" mesajlarını alıp bunları SELinux'un kabul edeceği politikalara dönüştürebilirler. Oluşturulan bu kurallar daha sonra bir `.te` (type enforcement) dosyasına dönüştürülür ve `make -f` ile `semodule -i` kullanılarak sisteme yüklenir. Bu, detaylı ve derinlemesine bir SELinux yapılandırması imkanı sunar.
Hata Ayıklama ve Sorun Giderme
SELinux ile çalışırken hata ayıklama ve sorun giderme becerileri kritik öneme sahiptir. Erişim reddedildiğinde veya bir uygulama beklendiği gibi çalışmadığında, ilk adım SELinux günlüklerini kontrol etmektir. `auditd` servisi ve `ausearch` komutu, AVC (Access Vector Cache) reddedilen mesajları bulmak için kullanılır. Örneğin, `ausearch -m AVC -ts today` bugünün AVC reddetmelerini gösterir. Bu günlükler, hangi sürecin hangi kaynağa erişmeye çalıştığını ve SELinux'un neden bu erişimi engellediğini açıkça belirtir. Ayrıca, `sealert` aracı, hataları daha anlaşılır bir dilde sunarak ve olası çözümler önererek sorun gidermeyi basitleştirir. Permissive moda geçmek, sorunun SELinux'tan mı yoksa başka bir nedenden mi kaynaklandığını hızlıca belirlemenize yardımcı olabilir. Bu nedenle, kapsamlı günlük analizi, SELinux yapılandırması sorunlarının çözümünde temel adımdır.
En İyi Uygulamalar ve Güvenli Yapılandırma İpuçları
SELinux yapılandırması sırasında en iyi uygulamaları takip etmek, güvenli ve sorunsuz bir sistem ortamı sağlar. Öncelikle, SELinux'u asla tamamen devre dışı bırakmamak gerekir; bunun yerine permissive modunu kullanarak sorunları teşhis etmek daha doğru bir yaklaşımdır. Yeni bir uygulama veya servis kurarken, SELinux günlüklerini dikkatle izleyerek gerekli politika değişikliklerini belirleyin. `chcon` yerine `semanage fcontext` kullanarak dosya bağlamlarını kalıcı hale getirin. Özelleştirilmiş politikaları yalnızca gerektiğinde ve minimum yetki ilkesine uygun olarak oluşturun. Düzenli olarak sistemdeki güvenlik bağlamlarını kontrol edin ve yanlış etiketlenmiş dosyaları `restorecon -Rv` ile düzeltin. Sonuç olarak, proaktif izleme ve dikkatli politika yönetimi, SELinux'un sunduğu güçlü güvenlik faydalarından tam olarak yararlanmanızı sağlar.