selinux
SELinux, Linux çekirdeğine entegre edilmiş güçlü bir Zorunlu Erişim Kontrolü (MAC - Mandatory Access Control) güvenlik mekanizmasıdır. Geleneksel Linux İsteğe Bağlı Erişim Kontrolü (DAC - Discretionary Access Control) modeline (yani dosya izinleri - sahip/grup/diğer, rwx) ek bir güvenlik katmanı sağlar. RHEL tabanlı dağıtımlarda (Fedora, CentOS Stream, Rocky Linux, AlmaLinux) varsayılan olarak etkin gelir.
Temel Kavramlar
SELinux'un temel amacı, süreçlerin (processes) erişebileceği kaynakları (dosyalar, portlar, diğer süreçler vb.) en az yetki prensibine (principle of least privilege) göre sıkı bir şekilde sınırlamaktır. Bir süreç, normal dosya izinleri izin verse bile, SELinux politikası izin vermiyorsa belirli bir kaynağa erişemez.
Güvenlik Bağlamları (Security Contexts / Labels): SELinux, sistemdeki her nesneye (süreç, dosya, port, arayüz vb.) bir güvenlik etiketi veya bağlam atar. Bu bağlam genellikle
kullanıcı:rol:tip:seviye
formatındadır (örn.system_u:object_r:httpd_sys_content_t:s0
). En önemli kısım genellikle tip'tir.Politika (Policy): Hangi tipteki sürecin, hangi tipteki kaynağa nasıl erişebileceğini (örn.
httpd_t
tipindeki sürecinhttpd_sys_content_t
tipindeki dosyaları okumasına izin verilir) tanımlayan kurallar bütünüdür. Dağıtımlar genellikle varsayılan bir politika ile gelir (targeted
politikası en yaygın olanıdır).Çalışma Modları:
Enforcing
: Politika aktif olarak uygulanır. İzin verilmeyen eylemler engellenir ve/var/log/audit/audit.log
dosyasına (eğerauditd
servisi çalışıyorsa) kaydedilir. Bu, varsayılan ve önerilen moddur.Permissive
: Politika uygulanmaz (eylemler engellenmez), ancak politika ihlalleri yine de loglanır. Sorun giderme sırasında, bir problemin SELinux kaynaklı olup olmadığını anlamak için geçici olarak bu moda geçilebilir.Disabled
: SELinux tamamen devre dışıdır. Bu moddan tekrarPermissive
veyaEnforcing
moda geçmek genellikle dosya sisteminin yeniden etiketlenmesini gerektirir ve önerilmez.
Booleans: Politikanın belirli yönlerini kolayca açıp kapatmak için kullanılan anahtarlardır. Örneğin, Apache'nin ağa bağlanmasına veya kullanıcı ev dizinlerini okumasına izin veren boolean'lar olabilir. Bu, tüm politikayı yeniden yazmadan belirli davranışlara izin vermeyi sağlar.
Temel Yönetim Komutları
Durumu Kontrol Etme:
Modu Geçici Olarak Değiştirme: (Sistem yeniden başlayana kadar geçerli)
Modu Kalıcı Olarak Değiştirme:
/etc/selinux/config
(veya/etc/sysconfig/selinux
) dosyasını düzenleyin veSELINUX=
satırınıenforcing
,permissive
veyadisabled
olarak ayarlayın.disabled
moduna geçmek veya bu moddan çıkmak için sistemin yeniden başlatılması gerekir.enforcing
vepermissive
arasında geçiş içinsetenforce
yeterlidir, ancak kalıcı ayar için dosya düzenlenmelidir.Bağlamları Görüntüleme:
Dosya Bağlamını Geçici Olarak Değiştirme (
chcon
): Bir dosyanın veya dizinin güvenlik bağlamını geçici olarak değiştirir.restorecon
çalıştırıldığında veya sistem yeniden etiketlendiğinde varsayılan değere döner.Varsayılan Dosya Bağlamını Geri Yükleme (
restorecon
): Bir dosyanın veya dizinin (ve altındakilerin-R
ile) politika tarafından tanımlanan varsayılan güvenlik bağlamını geri yükler. Yanlış bağlam nedeniyle oluşan erişim sorunlarını çözmek için sıkça kullanılır.Kalıcı Bağlam Ayarları (
semanage
): Dosya yolları için varsayılan bağlamları, portları, boolean'ları vb. kalıcı olarak yönetmek için kullanılır. Bu komut genelliklepolicycoreutils-python-utils
(veya benzeri) paketinin kurulmasını gerektirir.Boolean'ları Yönetme (
getsebool
,setsebool
):
Sorun Giderme
SELinux, izin sorunlarının yaygın bir kaynağı olabilir. Bir uygulamanın beklendiği gibi çalışmamasının nedeni SELinux ise, genellikle /var/log/audit/audit.log
dosyasında type=AVC
içeren bir kayıt bulunur.
Audit Loglarını Kontrol Etme:
auditd
servisinin çalıştığından emin olun (sudo systemctl status auditd
). Ardından logları inceleyin:Permissive Moda Geçme: Sorunun gerçekten SELinux kaynaklı olup olmadığını anlamak için geçici olarak permissive moda geçin (
sudo setenforce 0
) ve uygulamayı tekrar deneyin. Eğer sorun düzelirse, sorun SELinux politikasıyla ilgilidir. İşi bitince tekrarsudo setenforce 1
ile enforcing moda dönmeyi unutmayın!Çözüm Yolları:
Dosya Bağlamı: En yaygın sorun, dosyaların yanlış güvenlik bağlamına sahip olmasıdır.
restorecon
genellikle sorunu çözer. Gerekirsesemanage fcontext
ile kalıcı kural ekleyin.Boolean: İlgili işlemi yapmaya izin veren bir boolean olabilir.
getsebool -a | grep <ilgili_kelime>
ile arama yapıpsetsebool -P <boolean> on
ile etkinleştirin.Port Bağlamı: Uygulama standart olmayan bir port kullanıyorsa,
semanage port
ile o porta uygun bağlamı atayın.Özel Politika Modülü: Yukarıdakiler işe yaramazsa veya daha karmaşık bir izin gerekiyorsa,
audit2allow
aracı ile loglardaki engellemelere izin veren özel bir politika modülü oluşturulabilir (ileri düzey konu).
SELinux güçlü bir güvenlik katmanıdır. Kapatmak yerine, karşılaşılan sorunları anlayıp politikayı uygun şekilde ayarlamak genellikle daha güvenli bir yaklaşımdır.
Last updated