Linux sistemlerinde güvenlik her zaman en önemli konulardan biri olmuştur. Geleneksel dosya izinleri uzun yıllar boyunca temel güvenlik mekanizması olarak kullanılmıştır. Ancak modern güvenlik tehditleri karşısında bu basit izin sistemi yetersiz kalmaktadır. İşte tam bu noktada SELinux devreye giriyor.
SELinux (Security Enhanced Linux), NSA (National Security Agency) tarafından geliştirilen ve Red Hat tarafından desteklenen güçlü bir Zorunlu Erişim Kontrolü (Mandatory Access Control – MAC) sistemidir. Bu makale, SELinux’un derinlemesine incelenmesini ve sistem yöneticilerinin bilmesi gereken tüm önemli noktaları ele alacaktır.
SELinux’un Tarihçesi ve Önemi
Geleneksel Linux Güvenliğinin Sınırlamaları
Geleneksel Linux güvenlik modeli,任意 Erişim Kontrolü (Discretionary Access Control – DAC) üzerine kuruludur. Bu modelde:
- Dosyalar ve dizinler için okuma, yazma ve çalıştırma izinleri
- Kullanıcı ve grup bazlı erişim kontrolü
- Özel izinler (SUID, SGID, Sticky bit)
bulunur. Ancak bu model, modern güvenlik ihtiyaçlarını karşılamakta yetersiz kalmaktadır.
SELinux’un Geliştirilme Nedenleri
Aşağıdaki senaryo, neden daha güçlü bir güvenlik sistemine ihtiyaç duyulduğunu açıkça göstermektedir:
Bir web sunucusunda çalışan hatalı bir script nedeniyle, saldırgan httpd kullanıcısı olarak sisteme erişim sağladı.
Bu erişimi kullanarak /var/tmp dizininde binlerce zararlı PHP scripti oluşturdu ve bir DDoS saldırısı başlattı.
Geleneksel güvenlik ayarları açısından herhangi bir sorun yoktu - httpd kullanıcısının /var/tmp'ye dosya yazma
izni olması normaldi.
Bu tür senaryolar, süreç bazlı ve daha granüler bir güvenlik sistemine olan ihtiyacı ortaya koymaktadır.
SELinux Çalışma Prensipleri
SELinux, politika bazlı bir güvenlik mekanizması sunar. Tüm güvenlik kuralları politikalar üzerinden yürütülür ve kaynaklar, etiketler (context) yardımıyla tanımlanır.
Temel Kavramlar
- Politika (Policy):
- SELinux’un temel yapı taşı
- Hangi kaynağın hangi hedefe nasıl erişebileceğini tanımlar
- Sistem çapında kurallar bütünü
- Bağlam (Context):
- Her nesnenin (dosya, süreç, port) güvenlik etiketi
- Üç bileşenden oluşur: Kullanıcı, Rol ve Tip
- Politika kuralları bu etiketlere göre uygulanır
- Kaynak Etki Alanı (Source Domain):
- Erişim talep eden nesne (genellikle bir süreç)
- Örnek: httpd_t, sshd_t
- Hedef Etki Alanı (Target Domain):
- Erişilmek istenen nesne
- Örnek: http_port_t, var_log_t
Çalışma Modları
1. Enforcing Modu
- SELinux politikaları tam olarak uygulanır
- İzinsiz erişimler engellenir
- Güvenlik ihlalleri kayıt altına alınır
- Varsayılan ve önerilen mod
bashCopy# Enforcing moduna geçiş
setenforce 1
2. Permissive Modu
- Politika ihlalleri sadece kayıt altına alınır
- Erişimler engellenmez
- Sorun giderme için idealdir
- Üretim sistemlerinde kullanılmamalıdir
bashCopy# Permissive moduna geçiş
setenforce 0
3. Disabled Modu
- SELinux tamamen devre dışı
- Kesinlikle önerilmez
- Sistem yeniden başlatılmadan değiştirilemez
Context (Bağlam) Yönetimi
SELinux context yapısı, nesnelerin güvenlik seviyelerini belirlemek için kullanılır. Bu bölümde, context’lerin görüntülenmesi ve yönetimi ele alınacaktır.
Context Yapısı
Her SELinux context etiketi üç bölümden oluşur:
- Kullanıcı (_u):
- SELinux kullanıcısı
- Linux kullanıcısından farklıdır
- Örnek: system_u, unconfined_u
- Rol (_r):
- SELinux rolü
- Kullanıcı-tip ilişkisini tanımlar
- Örnek: object_r, system_r
- Tip (_t):
- En önemli bileşen
- Erişim kuralları buna göre belirlenir
- Örnek: httpd_sys_content_t
Context Yönetimi Komutları
Context Görüntüleme:
bashCopy# Dosya ve dizinlerin context'lerini görüntüleme
ls -lZ /var/www/html
# Çalışan süreçlerin context'lerini görüntüleme
ps -Z
# Ağ portlarının context'lerini görüntüleme
netstat -Z
Context Değiştirme:
bashCopy# Kalıcı context değişikliği
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
restorecon -Rv /web
# Geçici context değişikliği (önerilmez)
chcon -t httpd_sys_content_t /web
Boolean Ayarları
SELinux Boolean’ları, politika davranışlarını hızlıca değiştirmek için kullanılan anahtarlardır.
Boolean Yönetimi:
bashCopy# Tüm Boolean'ları listeleme
getsebool -a
# Belirli bir hizmetle ilgili Boolean'ları filtreleme
getsebool -a | grep http
# Boolean değerini geçici olarak değiştirme
setsebool ftpd_anon_write on
# Boolean değerini kalıcı olarak değiştirme
setsebool -P ftpd_anon_write on
Port Yönetimi
SELinux, ağ portlarının hangi hizmetler tarafından kullanılabileceğini sıkı şekilde kontrol eder.
Port Context Yönetimi:
bashCopy# Port listesi görüntüleme
semanage port -l
# Yeni port ekleme
semanage port -a -t http_port_t -p tcp 8080
# Port context'ini değiştirme
semanage port -m -t http_port_t -p tcp 8080
Sorun Giderme ve Log Analizi
Log Dosyaları
- /var/log/audit/audit.log:
- Ana SELinux log dosyası
- AVC (Access Vector Cache) mesajları
- Ham format
- setroubleshoot:
- Kullanıcı dostu hata mesajları
- Çözüm önerileri
- sealert komutu ile kullanılır
Yaygın Sorun Giderme Adımları:
- SELinux durumunu kontrol edin:
bashCopygetenforce
sestatus -v
- İlgili log mesajlarını inceleyin:
bashCopygrep AVC /var/log/audit/audit.log
- Setroubleshoot mesajlarını kontrol edin:
bashCopysealert -a /var/log/audit/audit.log
- Context sorunlarını düzeltin:
bashCopyrestorecon -Rv /problematic/path
Örnek Uygulamalar
1. Web Sunucusu Yapılandırması
Apache’yi özel bir dizinde çalıştırmak için:
bashCopy# Dizin oluşturma
mkdir /web
echo "Welcome" > /web/index.html
# Context ayarları
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
restorecon -Rv /web
# Apache yapılandırması
vim /etc/httpd/conf/httpd.conf
# DocumentRoot "/web" olarak değiştirin
# Servisi yeniden başlatın
systemctl restart httpd
2. FTP Sunucusu Güvenliği
Anonim FTP erişimi için:
bashCopy# Boolean ayarı
setsebool -P ftp_home_dir on
setsebool -P ftpd_anon_write on
# Port ayarı
semanage port -a -t ftp_port_t -p tcp 2121
# Context ayarı
semanage fcontext -a -t public_content_t "/ftp/pub(/.*)?"
restorecon -Rv /ftp/pub
En İyi Uygulamalar ve Güvenlik İpuçları
- SELinux’u Etkin Tutun:
- Asla devre dışı bırakmayın
- Sorunları çözmek için geçici olarak permissive mod kullanın
- Sistem güvenliğini düzenli olarak gözden geçirin
- Context Yönetimi:
- Her zaman semanage kullanın
- chcon kullanmaktan kaçının
- Düzenli olarak context doğruluğunu kontrol edin
- Logging ve İzleme:
- Audit loglarını düzenli kontrol edin
- Setroubleshoot mesajlarını takip edin
- Şüpheli aktiviteleri araştırın
- Politika Yönetimi:
- Minimum yetki prensibini uygulayın
- Boolean’ları dikkatli kullanın
- Özel politikaları test edin
İleri Seviye SELinux Konuları
Özel Politika Oluşturma
Bazı durumlarda, özel uygulamalar için yeni politikalar oluşturmanız gerekebilir:
bashCopy# Audit2allow ile politika oluşturma
ausearch -c 'httpd' --raw | audit2allow -M my-httpd
semodule -i my-httpd.pp
Politika Modülleri
SELinux politika modüllerinin yönetimi:
bashCopy# Yüklü modülleri listeleme
semodule -l
# Modül yükleme
semodule -i module.pp
# Modül kaldırma
semodule -r module
Sonuç
SELinux, modern Linux sistemlerinde vazgeçilmez bir güvenlik bileşenidir. Karmaşık görünmesine rağmen, temel prensipleri anlaşıldığında yönetimi oldukça basittir. Sistem yöneticileri olarak görevimiz, SELinux’u devre dışı bırakmak yerine, doğru yapılandırma ve yönetim becerilerini geliştirmektir.
Bu kapsamlı rehberde ele alınan konuları düzenli olarak uygulayarak ve güncel güvenlik pratiklerini takip ederek, sistemlerinizi çok daha güvenli hale getirebilirsiniz.
Kaynaklar ve İleri Okuma
- Red Hat SELinux Kılavuzu
- SELinux Proje Dokümantasyonu
- Fedora SELinux Wiki
- Red Hat RHCSA™ 9 Cert Guide Sander van Vugt
Leave a Reply