Linux Sunucularda SELinux Nedir? Yönetimi ve Sorun Giderme Rehberi
Linux Sunucularda SELinux Nedir? Yönetimi ve Sorun Giderme Rehberi
Son Güncelleme: Mayıs 2026
SELinux (Security-Enhanced Linux), Linux sunucularda süreçleri, dosyaları ve servisleri daha sıkı kurallarla kontrol eden gelişmiş bir zorunlu erişim denetimi (mandatory access control) mekanizmasıdır. Özellikle hosting, VPS, VDS, web sunucuları ve çok kullanıcılı sistemlerde güvenlik seviyesini artırmak için kritik rol oynar. Bu rehberde SELinux’un ne olduğunu, nasıl çalıştığını, modlarını, temel yönetim komutlarını ve gerçek hayatta sık görülen sorunların nasıl çözüleceğini detaylı şekilde ele alacağız.
İçindekiler
- SELinux Nedir?
- SELinux Nasıl Çalışır?
- SELinux Modları
- SELinux Neden Önemlidir?
- SELinux Temel Komutları
- Dosya Bağlamı ve Context Mantığı
- Web Sunucularında SELinux Kullanımı
- Yaygın Sorunlar ve Çözümler
- En İyi Uygulamalar
- Corelux Altyapılarında SELinux Yaklaşımı
- Sıkça Sorulan Sorular
- Sonuç
SELinux Nedir?
SELinux, Linux çekirdeği (kernel) seviyesinde çalışan bir güvenlik çerçevesidir. Temel amacı, bir süreç root yetkisine sahip olsa bile hangi kaynaklara erişebileceğini politikalar üzerinden sınırlamaktır. Geleneksel Linux izin modeli yalnızca kullanıcı, grup ve diğerleri mantığıyla çalışırken, SELinux bunun üzerine daha katı ve detaylı bir denetim katmanı ekler.
Klasik dosya izinlerinde bir servis yanlış yapılandırıldığında veya bir saldırgan servis üzerinden yetki elde ettiğinde, sistem içinde beklenenden daha geniş erişimler mümkün olabilir. SELinux ise “hangi süreç, hangi dosyaya, hangi port üzerinden, hangi işlemle erişebilir?” sorusunu ayrı bir güvenlik politikası olarak ele alır.
Bu nedenle özellikle Linux Hosting, sanal sunucu, kurumsal uygulama sunucuları, veritabanı sistemleri ve internet erişimine açık servislerde SELinux ciddi bir güvenlik katmanı sağlar.
SELinux Nasıl Çalışır?
SELinux’un çalışma mantığı, nesnelerin ve süreçlerin güvenlik bağlamlarıyla (security context) etiketlenmesine dayanır. Her dosya, dizin, port, süreç veya servis belirli bir context ile tanımlanır. Ardından yüklü politika, bir sürecin belirli bir context’e sahip kaynağa erişip erişemeyeceğine karar verir.
Temel çalışma bileşenleri
- Policy (Politika): Erişim kurallarının tanımlandığı yapıdır.
- Context (Bağlam): Dosya, süreç veya portun güvenlik kimliğidir.
- Type Enforcement: En yaygın kullanılan denetim modelidir; süreç ve nesne tiplerine göre izin verir veya engeller.
- AVC: Erişim reddi kayıtlarının tutulduğu mekanizmadır. Sorun giderme sırasında çok önemlidir.
Örneğin bir web sunucusu süreci çoğu sistemde belirli içerik dizinlerini okuyabilir; ancak rastgele bir kullanıcı klasörüne veya yetkisiz bir veritabanı dosyasına erişemez. Dosya izinleri doğru görünse bile, SELinux politikası buna izin vermiyorsa erişim reddedilir.
SELinux Modları
SELinux genel olarak üç farklı modda çalışır. Bu modlar sistemin güvenlik politikasını nasıl uygulayacağını belirler.
| Mod | Açıklama | Kullanım Amacı |
|---|---|---|
| Enforcing | Kuralları aktif olarak uygular ve ihlalleri engeller. | Canlı sistemlerde önerilen moddur. |
| Permissive | İhlalleri engellemez, sadece log kaydı üretir. | Test ve sorun analizi için kullanılır. |
| Disabled | SELinux tamamen kapalıdır. | Güvenlik açısından genellikle önerilmez. |
Geçici mod değiştirme
Aktif çalışma modunu geçici olarak değiştirmek için aşağıdaki komutlar kullanılabilir:
getenforce
setenforce 0
setenforce 1
Burada setenforce 0 sistemi Permissive moda, setenforce 1 ise tekrar Enforcing moda alır. Bu değişiklik kalıcı değildir ve yeniden başlatma sonrası eski yapılandırma geçerli olur.
Kalıcı mod değiştirme
Kalıcı ayar için genellikle /etc/selinux/config dosyası düzenlenir:
SELINUX=enforcing
SELINUXTYPE=targeted
Canlı sistemlerde değişiklik öncesinde bakım planı yapılması, servis testlerinin tamamlanması ve log incelemesi önerilir.
SELinux Neden Önemlidir?
Birçok sistem yöneticisi ilk etapta SELinux’u karmaşık bulduğu için devre dışı bırakma eğilimindedir. Ancak doğru yönetildiğinde, SELinux özellikle internete açık sunucularda saldırı yüzeyini ciddi şekilde azaltır.
- Servis izolasyonu: Bir servis ele geçirilse bile saldırganın sistemde yatay hareket etmesini zorlaştırır.
- Yanlış yapılandırma etkisini azaltma: Hatalı dosya izinleri tek başına tam erişim anlamına gelmez.
- Uyumluluk ve denetim: Kurumsal güvenlik standartlarında güçlü bir ek kontrol katmanıdır.
- Çok kiracılı yapı güvenliği: Hosting ve paylaşımlı servis senaryolarında ek ayrıştırma sağlar.
- Log tabanlı analiz: Reddedilen erişim kayıtları sayesinde sorunların kaynağı daha net anlaşılır.
Özellikle web sunucusu, ters vekil sunucu (reverse proxy), veritabanı, dosya paylaşımı ve uygulama servislerinin bir arada çalıştığı ortamlarda SELinux büyük fark yaratır.
SELinux Temel Komutları
SELinux yönetiminde kullanılan bazı temel komutlar vardır. Bu komutlar hem günlük yönetimde hem de sorun giderme süreçlerinde oldukça işlevseldir.
Durum kontrolü
getenforce
sestatus
getenforce aktif modu kısa şekilde gösterir. sestatus ise daha detaylı çıktı verir.
Dosya context görüntüleme
ls -Z
ps auxZ
ls -Z dosya ve dizin context bilgilerini, ps auxZ ise çalışan süreçlerin güvenlik bağlamlarını gösterir.
Context düzeltme
restorecon -Rv /var/www/html
Yanlış etiketlenmiş dosya ve dizinleri varsayılan politikaya göre düzeltmek için sık kullanılır.
Kalıcı dosya context tanımlama
semanage fcontext -a -t httpd_sys_content_t "/webapp(/.*)?"
restorecon -Rv /webapp
Bu örnek, /webapp dizinini web sunucusunun okuyabileceği şekilde tanımlar.
Port yönetimi
semanage port -l | grep http
semanage port -a -t http_port_t -p tcp 8080
Eğer web servisini standart dışı bir portta çalıştırıyorsanız, SELinux tarafında bu portun uygun tipe atanması gerekebilir.
Dosya Bağlamı ve Context Mantığı
SELinux öğrenirken en kritik konulardan biri context kavramıdır. Bir dosyanın Linux izinleri doğru olsa bile, yanlış context nedeniyle servis bu dosyaya erişemeyebilir.
Örnek bir context çıktısı şu şekilde olabilir:
system_u:object_r:httpd_sys_content_t:s0
Bu yapı sadeleştirilmiş biçimde aşağıdaki unsurları temsil eder:
- User: SELinux kullanıcısıdır.
- Role: Rol bilgisidir.
- Type: En kritik kısımdır; erişim kuralları çoğunlukla buna göre belirlenir.
- Level: Güvenlik seviyesi bilgisidir.
Neden context bozulur?
- Dosya taşıma: Yanlış yöntemle kopyalanan veya taşınan dosyalar eski etiketlerini koruyabilir ya da etiketsiz kalabilir.
- Yedekten geri yükleme: Backup sonrası context eşleşmeleri bozulabilir.
- Özel dizin kullanımı: Standart dışı web kökü veya uygulama dizini tanımlandığında manuel eşleme gerekir.
- Panel veya script müdahaleleri: Otomasyon araçları her zaman doğru SELinux etiketi oluşturmayabilir.
Bu yüzden yeni bir uygulama devreye alınırken yalnızca dosya izinlerini değil, SELinux bağlamlarını da kontrol etmek gerekir.
Web Sunucularında SELinux Kullanımı
SELinux en çok Apache, Nginx, PHP-FPM ve benzeri servislerde görünür hale gelir. Çünkü web uygulamaları dosya okuma, yazma, cache oluşturma, log tutma, dış bağlantı açma ve bazen veritabanı erişimi gibi çok sayıda işlem yapar.
Yaygın senaryolar
- Web kökünü değiştirme: Site dosyaları
/var/www/htmlyerine özel bir dizindeyse uygun context atanmalıdır. - Yazılabilir dizin ihtiyacı: Upload, cache veya session klasörleri için yalnızca gerekli dizinlere yazma izni verilmelidir.
- Özel port kullanımı: Uygulama 8080, 8443 gibi portlarda çalışıyorsa port tipi tanımlanmalıdır.
- Dış ağ bağlantısı: Bazı uygulamalar API çağrısı yapar; SELinux boolean ayarları devreye girebilir.
Web içerik dizini örneği
semanage fcontext -a -t httpd_sys_content_t "/srv/site(/.*)?"
restorecon -Rv /srv/site
Eğer uygulamanın belirli klasörlere yazması gerekiyorsa daha uygun tipler seçilmelidir. Örneğin geçici veya yazılabilir alanlar için farklı context’ler gerekir. Burada “her yere yazma yetkisi” vermek yerine yalnızca gerekli dizinleri hedeflemek güvenli yaklaşımdır.
HTTP servisi için ağ erişimi
Bazı uygulamalar harici API servislerine bağlanmak isteyebilir. Bu durumda ilgili SELinux boolean değeri kontrol edilebilir:
getsebool -a | grep httpd
setsebool -P httpd_can_network_connect on
Bu ayar özellikle ödeme sistemleri, lisans doğrulama servisleri, webhook tüketen uygulamalar veya harici REST API kullanan yazılımlar için önemlidir.
Daha yüksek kaynak esnekliği ve özel yapılandırma gerektiren projelerde Sanal Sunucu çözümleri ya da uygulama yoğun senaryolarda Uygulama Sunucuları tercih edilerek SELinux ile birlikte daha kontrollü bir mimari kurulabilir.
Yaygın Sorunlar ve Çözümler
SELinux etkin sistemlerde en sık karşılaşılan durum, servisin çalışıyor görünmesine rağmen dosya erişimi veya ağ erişimi hatası vermesidir. Bu tip senaryolarda servis loglarına ek olarak SELinux kayıtları da incelenmelidir.
1. Web sitesi 403 hatası veriyor
Dosya izinleri doğru olsa bile dizin context’i web sunucusu için uygun olmayabilir. İlk kontrol:
ls -Z /var/www
restorecon -Rv /var/www
Özel dizin kullanılıyorsa semanage fcontext ile kalıcı eşleme yapılmalıdır.
2. Uygulama dosya yükleyemiyor
Upload klasörü salt okunur context ile etiketlenmiş olabilir. Yalnızca yazma ihtiyacı olan klasörleri uygun şekilde etiketlemek gerekir. Geniş kapsamlı gevşetmeler yerine minimal izin yaklaşımı uygulanmalıdır.
3. Servis özel portta açılmıyor
Uygulama örneğin 8081 portuna bind etmeye çalışırken SELinux engel olabilir:
semanage port -a -t http_port_t -p tcp 8081
Eğer port zaten tanımlıysa -m parametresiyle değiştirme yapılabilir.
4. API bağlantıları başarısız oluyor
PHP uygulaması veya web servisi dış ağa çıkamıyorsa aşağıdaki boolean kontrolü yapılabilir:
getsebool httpd_can_network_connect
setsebool -P httpd_can_network_connect on
5. Hangi kuralın engellediği anlaşılmıyor
Audit log kayıtları incelenmelidir. Çoğu dağıtımda ilgili kayıtlar /var/log/audit/audit.log altında bulunur. Analiz için şu komutlar kullanılabilir:
ausearch -m avc -ts recent
journalctl -t setroubleshoot
Bu kayıtlar, hangi sürecin hangi kaynağa neden erişemediğini anlamada büyük kolaylık sağlar.
6. Geçici çözüm yerine kalıcı çözüm üretmek
Birçok yönetici problemi hızlı çözmek için SELinux’u kapatır. Ancak doğru yöntem, reddedilen erişimi analiz edip ya context düzeltmek ya da uygun politika/boolean ayarı yapmaktır. Disabled mod çoğu zaman teknik borç oluşturur ve ileride daha büyük güvenlik riskleri doğurur.
En İyi Uygulamalar
SELinux kullanırken sürdürülebilir ve güvenli bir yönetim için bazı temel prensiplere dikkat edilmelidir.
- SELinux’u kapatmayın: Önce log analizi yapın, sonra doğru kural veya context düzeltmesini uygulayın.
- Permissive modu teşhis için kullanın: Kalıcı çalışma modu olarak değil, hata analizi için kısa süreli kullanın.
- Standart dizin yapısını tercih edin: Mümkün olduğunda dağıtımın varsayılan servis yollarını kullanın.
- Kalıcı eşleme yapın: Sadece
chconile geçici etiket vermek yerinesemanage fcontextkullanın. - Minimal yetki verin: Tüm web köküne yazma izni tanımlamak yerine yalnızca gerekli klasörleri yetkilendirin.
- Değişiklikleri belgeleyin: Hangi port, hangi context ve hangi boolean neden açıldı kayıt altına alın.
- Otomasyonla uyumlu olun: Ansible, shell script veya deployment süreçlerine SELinux adımlarını dahil edin.
Pratik örnek senaryo
Bir e-ticaret uygulamasını /srv/magaza altında yayınladığınızı düşünelim. Uygulama ürün görsellerini /srv/magaza/storage içinde tutuyor ve harici ödeme API’sine bağlanıyor. Bu durumda yapılacaklar kabaca şunlardır:
- İçerik dizinini tanımlayın: Web sunucusunun okuyacağı ana klasöre uygun context verin.
- Yazılabilir alanı ayırın: Yalnızca
storageve benzeri klasörlere yazma yetkisi tanımlayın. - Dış ağ erişimini değerlendirin: Gerekliyse ilgili boolean değerini kontrollü şekilde açın.
- Log takibi yapın: İlk yayın sonrası audit log üzerinden reddedilen erişimleri inceleyin.
Bu yaklaşım hem güvenlik hem de sürdürülebilir operasyon açısından çok daha sağlıklıdır.
Corelux Altyapılarında SELinux Yaklaşımı
SELinux özellikle internet erişimine açık Linux sistemlerde, tek başına firewall veya antivirüs mantığıyla değerlendirilemeyecek kadar önemli bir katmandır. Hosting, VPS, VDS ve kiralık sunucu projelerinde güvenlik mimarisi planlanırken uygulama ihtiyaçları ile güvenlik politikalarının birlikte düşünülmesi gerekir.
Kaynak izolasyonu, özel servis portları, uygulama bağımlılıkları ve yönetim esnekliği gerektiren projelerde Kiralık Sunucu veya Türkiye VDS Sunucu çözümleri üzerinde SELinux politikalarını daha kontrollü şekilde uygulayabilirsiniz. Daha klasik web projeleri için ise Linux Hosting paketleri değerlendirilebilir.
Buna ek olarak sertifika, veri koruma ve operasyon sürekliliği tarafında SSL Sertifikası ve Yedekleme Hizmeti gibi tamamlayıcı çözümlerle daha güçlü bir altyapı kurulabilir. Güvenli bir sunucu mimarisinde tek bir bileşen değil, katmanlı savunma anlayışı önemlidir.
Sıkça Sorulan Sorular
SELinux kapatılmalı mı?
Genel olarak hayır. Sorun yaşandığında SELinux’u tamamen kapatmak yerine, log analizi yaparak doğru context, port veya boolean ayarını uygulamak daha güvenli ve profesyonel yaklaşımdır.
SELinux ile firewall aynı şey midir?
Hayır. Firewall (güvenlik duvarı) ağ trafiğini kontrol ederken, SELinux süreçlerin sistem kaynaklarına erişimini politika bazlı denetler. İkisi farklı katmanlarda çalışır ve birbirini tamamlar.
Permissive mod güvenli midir?
Permissive mod, kural ihlallerini engellemez; yalnızca kayıt altına alır. Bu nedenle kalıcı çalışma modu olarak değil, test ve sorun giderme amacıyla kısa süreli kullanılmalıdır.
chcon ile yapılan değişiklikler yeterli olur mu?
chcon geçici çözüm sağlayabilir; ancak kalıcı ve doğru yöntem çoğu durumda semanage fcontext ile eşleme yapıp ardından restorecon çalıştırmaktır. Aksi halde relabel veya yeniden yükleme sonrası değişiklikler kaybolabilir.
SELinux performansı düşürür mü?
Modern sistemlerde SELinux’un performans etkisi çoğu iş yükünde ihmal edilebilir seviyededir. Sağladığı güvenlik kazanımı, küçük operasyonel maliyetin çok üzerindedir.
Hangi sunucu projelerinde SELinux özellikle önemlidir?
İnternete açık web sunucuları, API servisleri, çok kullanıcılı hosting ortamları, uygulama sunucuları, veritabanı bağlantılı projeler ve regülasyon gerektiren kurumsal sistemlerde SELinux çok daha kritik hale gelir.
Sonuç
SELinux, Linux sunucularda ek bir karmaşıklık değil; doğru kullanıldığında güçlü bir güvenlik yatırımıdır. Dosya izinlerinin ötesine geçerek süreç, servis, port ve kaynak erişimini politika tabanlı biçimde denetler. Özellikle web sunucuları, API servisleri, özel uygulama dizinleri ve çok katmanlı altyapılarda ciddi koruma sağlar.
Eğer projeniz için güvenli, ölçeklenebilir ve profesyonel bir altyapı planlıyorsanız; ihtiyaçlarınıza göre Sanal Sunucu, Bulut Sunucu veya Hosting çözümlerini değerlendirerek güvenlik politikalarınızı daha sağlam bir zeminde kurgulayabilirsiniz. Doğru yapılandırılmış bir sunucu ortamında SELinux, sürdürülebilir güvenliğin temel parçalarından biridir.
Yazar
Boran BAR