Security-Enhanced Linux (SELinux), Linux çekirdeğine entegre edilmiş, zorunlu erişim denetimi (MAC) sağlayan gelişmiş bir güvenlik mimarisidir. 2026 yılında siber tehditlerin arttığı dijital dünyada, sunucularınızı sıfır güven (Zero Trust) prensibiyle korumanın en etkili yoludur.
Bu rehberde; SELinux'un çalışma mantığını, yapılandırma yöntemlerini, bağlam (context) yönetimini ve sorun giderme tekniklerini derinlemesine öğreneceksiniz.
root@server:~# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 33
_
Zorunlu Erişim Denetimi ile kullanıcı hatalarını izole edin.
Her dosya ve işlem için sıkı etiketleme ve tip denetimi.
Audit logları ve audit2allow ile sorunları hızlıca çözün.
Apache, Nginx ve MySQL için tam korumalı alanlar.
Linux işletim sistemlerinde geleneksel güvenlik modeli DAC (Discretionary Access Control) yani İsteğe Bağlı Erişim Denetimi'dir. Bu modelde, bir dosyanın sahibi o dosya üzerinde kimin ne yapabileceğine (okuma, yazma, çalıştırma) karar verir. Ancak, root kullanıcısı veya yetkisi yükseltilmiş bir süreç, sistemdeki her şeye erişebilir. Bu durum, modern saldırılarda büyük bir güvenlik açığı oluşturur.
SELinux (Security-Enhanced Linux), bu açığı kapatmak için MAC (Mandatory Access Control) yani Zorunlu Erişim Denetimi modelini kullanır. NSA tarafından geliştirilen bu mimari, "Her şeye izin ver, yasaklananları engelle" mantığının tersine, "Her şeyi yasakla, sadece açıkça izin verilenlere yetki ver" prensibiyle çalışır.
Özellikle Paylaşımlı Hosting ve Reseller Hosting ortamlarında, bir kullanıcının diğerine erişmesini engellemek için SELinux (veya CloudLinux CageFS gibi türevleri) hayati önem taşır.
SELinux üç farklı modda çalışabilir. Sunucunuzu yönetirken hangi modda olduğunuzu bilmek kritiktir.
Varsayılan ve önerilen moddur. Güvenlik politikaları aktif olarak uygulanır ve ihlaller engellenir. Loglama yapılır.
Politikalar uygulanmaz, erişim engellenmez ancak ihlaller audit.log dosyasına kaydedilir. Hata ayıklama (debug) için kullanılır.
SELinux tamamen kapalıdır. Hiçbir denetim veya loglama yapılmaz. Önerilmez. Tekrar açmak için sunucu yeniden başlatılmalıdır.
Mevcut durumu kontrol etmek için:
sestatus
# Veya sadece modu görmek için:
getenforce
Geçici olarak mod değiştirmek (Reboot sonrası sıfırlanır):
# Permissive moda geçiş
setenforce 0
# Enforcing moda geçiş
setenforce 1
Kalıcı olarak mod değiştirmek için /etc/selinux/config dosyasını düzenlemelisiniz:
nano /etc/selinux/config
# SELINUX=enforcing satırını düzenleyin
SELinux, her süreci, dosyayı, dizini ve portu bir "etiket" (label) ile işaretler. Bu etikete SELinux Context denir. Bir süreç (Process), sadece etiketi uyumlu olan nesnelere erişebilir.
Etiket yapısı şöyledir: user:role:type:level
_u ile biter._r ile biter._t ile biter. (Örn: httpd_t, admin_home_t).Dosyaların etiketlerini görmek için -Z parametresini kullanırız:
ls -Z /var/www/html
# Çıktı: system_u:object_r:httpd_sys_content_t:s0 index.html
Özellikle WordPress veya diğer CMS sistemlerini kurarken, Apache/Nginx'in dosyalara yazma izni (örneğin resim yükleme) gerekebilir. Dosya izinleri (chmod 755) doğru olsa bile, SELinux etiketi yanlışsa erişim reddedilir.
chcon komutu dosya etiketini değiştirir ancak dosya sistemi yeniden etiketlendiğinde (relabel) bu değişiklik kaybolur.
# Apache'nin okuyabilmesi için:
chcon -t httpd_sys_content_t /var/www/html/index.php
# Apache'nin yazabilmesi için (Upload klasörleri):
chcon -t httpd_sys_rw_content_t /var/www/html/wp-content/uploads
Değişikliklerin kalıcı olması için semanage fcontext kullanılır. Bu, politika veritabanına kural ekler.
# Kuralı veritabanına ekle:
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/uploads(/.*)?"
# Kuralı dosya sistemine uygula:
restorecon -Rv /var/www/html/uploads
| Etiket Tipi (Type) | Açıklama | Kullanım Alanı |
|---|---|---|
httpd_sys_content_t |
Sadece okuma izni (Read-only) | Statik dosyalar, .php dosyaları |
httpd_sys_rw_content_t |
Okuma ve Yazma izni (Read/Write) | Cache, Upload, Log klasörleri |
httpd_log_t |
Log dosyaları | Apache/Nginx log dizinleri |
SELinux Booleans, güvenlik politikasını yeniden derlemeden belirli özellikleri açıp kapatmanıza yarayan anahtarlardır. Örneğin, Apache'nin veritabanına bağlanmasına veya mail göndermesine izin vermek için boolean ayarlarını değiştirmelisiniz.
# Tüm booleanları listele
getsebool -a | grep httpd
# Apache'nin ağ üzerinden veritabanına bağlanmasına izin ver (WordPress için kritik)
setsebool -P httpd_can_network_connect_db 1
# Apache'nin sendmail kullanmasına izin ver
setsebool -P httpd_can_sendmail 1
* -P parametresi değişikliğin kalıcı (Permanent) olmasını sağlar.
Bir erişim reddedildiğinde, bu durum /var/log/audit/audit.log dosyasına kaydedilir. Bu logları analiz etmek ve otomatik izin kuralı oluşturmak için audit2allow aracı harikadır.
# Son engellenen hataları insan okunabilir formatta gör:
ausearch -m avc -ts recent
# Hatalardan otomatik olarak bir izin modülü oluştur:
grep httpd /var/log/audit/audit.log | audit2allow -M my_httpd_policy
# Oluşturulan modülü yükle:
semodule -i my_httpd_policy.pp
SELinux ve sunucu güvenliği hakkında merak edilenler.
AlmaLinux, Rocky Linux ve RHEL gibi kurumsal dağıtımlar, "Secure by Default" (Varsayılan olarak Güvenli) felsefesini benimser. SELinux, sistemi root yetkisi ele geçirilmiş servislerden bile koruyabilen tek yerleşik mekanizmadır.
Hayır, SELinux'un performans üzerindeki etkisi modern işlemcilerde ihmal edilebilir düzeydedir (%1-2 civarı). Kapatmak performans kazandırmaz ancak çok ciddi bir güvenlik katmanını yok eder.
Evet, sağladığımız Türkiye Lokasyon VDS hizmetlerinde güvenlik standartları gereği SELinux desteklenir. Müşterilerimiz dilerse yönetimi kendileri yapabilir veya destek ekibimizden yardım alabilir.
Linux izinleri (DAC) ve SELinux izinleri (MAC) ayrı ayrı kontrol edilir. Klasöre 777 verseniz bile, SELinux etiketi (örneğin httpd_sys_content_t ise) web sunucusunun yazmasını engeller. Etiketi httpd_sys_rw_content_t olarak değiştirmelisiniz.
Eka Sunucu'nun yönetilen sunucu hizmetleri ile SELinux yapılandırması, Firewall ayarları ve Imunify360 koruması uzmanlarımız tarafından yapılır. Siz işinize odaklanın, güvenliği bize bırakın.
Güvenlik yapılandırması karmaşık mı geldi? Uzman ekibimiz sizin için burada.
Destek Talebi Oluştur