- 25 Kasım 2025
- 996
- 34
SELinux Nedir ve Neden Önemlidir?
SELinux (Security-Enhanced Linux), Linux çekirdeğine entegre edilmiş bir güvenlik modülüdür. Geleneksel Unix izin sistemlerinin (Discretionary Access Control - DAC) aksine, SELinux Zorunlu Erişim Kontrolü (Mandatory Access Control - MAC) sağlar. Bu, her sürecin ve dosyanın önceden tanımlanmış güvenlik politikalarına göre erişim izinlerinin belirlendiği anlamına gelir. Sonuç olarak, kötü niyetli bir süreç, ayrıcalıklı olsa bile, SELinux politikalarıyla kısıtlandığı için sistemin hassas bölgelerine erişemez. Bu durum, özellikle sıfır gün saldırılarına ve ayrıcalık yükseltme girişimlerine karşı güçlü bir savunma hattı oluşturur. Başka bir deyişle, SELinux, bir güvenlik ihlali durumunda sistem üzerindeki potansiyel zararı minimize etmede kritik bir rol oynar.
SELinux Modları: Enforcing, Permissive, Disabled
SELinux'un üç temel çalışma modu bulunur ve her bir mod farklı bir güvenlik seviyesi sunar. "Enforcing" modu, sistemin güvenlik politikalarını aktif olarak uygular, yani yetkisiz eylemleri hem engeller hem de kaydeder. Çoğu üretim ortamı için önerilen mod budur. "Permissive" modunda ise SELinux politikaları hala denetlenir, ancak yetkisiz eylemler engellenmez; yalnızca bir güvenlik ihlali durumunda uyarı kaydı tutulur. Bu mod, özellikle SELinux yapılandırması sırasında sorun giderme ve yeni politikaları test etme süreçlerinde oldukça faydalıdır. Son olarak, "Disabled" modu, SELinux'u tamamen kapatır ve hiçbir güvenlik kısıtlaması uygulanmaz. Bu mod genellikle güvenlik açısından tavsiye edilmez. Modlar arasında geçiş yapmak için `setenforce` komutunu anlık olarak kullanabilir veya `/etc/selinux/config` dosyasını kalıcı olarak düzenleyebilirsiniz.
SELinux Politikaları ve Türleri
SELinux'un işleyişinin temelini oluşturan politikalar, sistem üzerindeki tüm kaynaklara erişim kurallarını tanımlayan kapsamlı bir kural setidir. Her bir işlem veya dosya için hangi eylemlerin iznine sahip olduğunu belirlerler. En yaygın kullanılan ve varsayılan politika "targeted" politikasıdır. Bu politika, çoğu sunucu servisi ve önemli sistem bileşeni için MAC sağlamayı hedeflerken, bazı kullanıcı süreçlerini geleneksel DAC'a bırakır. Bununla birlikte, daha yüksek güvenlik gereksinimleri olan ortamlar için "MLS" (Multi-Level Security) veya "MCS" (Multi-Category Security) gibi daha karmaşık politikalar da mevcuttur. Her politika, sistemdeki tüm kaynaklara uygulanan güvenlik bağlamlarını ve izin setlerini içerir. Bu nedenle, doğru politikayı seçmek ve uygulamak, sisteminizin güvenlik duruşunu doğrudan etkiler.
Dosya ve Dizin Güvenlik Bağlamları
SELinux altında, her dosya, dizin ve süreç bir güvenlik bağlamına sahiptir. Bu bağlam, SELinux'un kararlarını vermesi için kullanılan temel bilgidir. Bir güvenlik bağlamı genellikle dört bölümden oluşur: kullanıcı, rol, tip ve isteğe bağlı olarak seviye. Bunlar arasında "tip" kısmı en önemlisidir ve bir dosyanın veya sürecin SELinux politikaları tarafından nasıl ele alınacağını belirler. Örneğin, bir web sunucusu dizinindeki dosyalar genellikle `httpd_sys_content_t` tipiyle etiketlenirken, bir sistem log dosyası `var_log_t` tipiyle işaretlenir. `ls -Z` komutu ile dosya ve dizinlerin mevcut bağlamlarını görüntüleyebilirsiniz. Yanlış bir güvenlik bağlamı, doğru dosya izinleri olsa bile "Erişim Reddedildi" hatalarına yol açabilir. `restorecon` komutuyla varsayılan bağlamları geri yükleyebilir veya `chcon` ile manuel olarak değiştirebilirsiniz; ancak `semanage fcontext` ile kalıcı kurallar tanımlamak daha iyidir.
SELinux Boole Ayarları ile Esneklik
SELinux boole'ları, SELinux politikalarını değiştirmeden veya yeni kurallar yazmaya gerek kalmadan belirli sistem davranışlarına ince ayar yapmamızı sağlayan basit açma/kapama anahtarlarıdır. Birçok SELinux politikası, belirli senaryoları kapsayan önceden tanımlanmış boole'lar içerir. Örneğin, `httpd_can_network_connect` boole'u, Apache web sunucusunun ağ üzerinden dış kaynaklara bağlanıp bağlanamayacağını kontrol eder. Bu boole'lar, sistem yöneticilerine, uygulamaların ihtiyaçlarına göre güvenlik politikalarını esnek bir şekilde ayarlama imkanı tanır. `getsebool -a` komutu ile tüm boole'ların mevcut durumunu görebilirsiniz. `setsebool` komutunu kullanarak boole'ları etkinleştirebilir veya devre dışı bırakabilirsiniz. Değişikliklerin sistem yeniden başlatıldığında da kalıcı olması için `setsebool -P` seçeneğini kullanmayı unutmamak önemlidir.
Özel SELinux Kuralları Oluşturma
Varsayılan SELinux politikaları ve boole ayarları çoğu durumu kapsasa da, bazen özel uygulamalar veya benzersiz sistem yapılandırmaları için özel kurallar tanımlamak gerekebilir. Bu durum, genellikle bir uygulamanın varsayılan politikalarla çakışan bir eylem gerçekleştirmeye çalıştığında ortaya çıkan "denial" (reddedilme) hatalarıyla kendini gösterir. Özel kurallar oluşturmak için genellikle `audit2allow` aracı kullanılır. Öncelikle, reddedilen eylemleri `audit.log` dosyasından `ausearch` ile tespit ederiz. Daha sonra `audit2allow` kullanarak bu reddedilmeleri içeren bir `.te` (type enforcement) dosyası oluştururuz. Bu `.te` dosyası derlenerek bir `.pp` (policy package) dosyasına dönüştürülür ve son olarak `semodule -i` komutuyla sisteme yüklenir. Bu süreç, SELinux'u kendi özel ihtiyaçlarınıza göre uyarlamanın en güçlü yoludur, ancak dikkatli testler ve güvenlik analizi gerektirir.
SELinux Sorun Giderme ve Günlükleme
SELinux yapılandırmasında karşılaşılan sorunları gidermek, genellikle günlük dosyalarını dikkatlice incelemekle başlar. SELinux'un engellediği veya izin verdiği tüm eylemler, sistemin denetim günlüklerine kaydedilir. Bu günlükler genellikle `/var/log/audit/audit.log` dosyasında (auditd servisi çalışıyorsa) veya `/var/log/messages` (journalctl veya syslog kullanılıyorsa) içinde bulunur. Reddedilen eylemleri (denials) hızlıca bulmak için `ausearch -m AVC -ts today` gibi komutlar kullanılabilir. `sealert -a /var/log/audit/audit.log` aracı ise, sorunlara yönelik daha anlaşılır açıklamalar ve potansiyel çözümler sunarak sorun giderme sürecini kolaylaştırır. Permissive moda geçiş yapmak, sorunun SELinux'tan mı kaynaklandığını anlamak için hızlı bir test yöntemidir. Bu günlükleri doğru okuyarak ve araçları etkili kullanarak, SELinux ile ilgili hemen hemen her yapılandırma problemini çözebilirsiniz.
