IHS Blog

VPS’te SELinux Nedir? Kapatmalı mıyız, Yoksa Nasıl Yapılandırmalıyız?

vps-te-selinux-nedir-kapatmali-miyiz-yoksa-nasil-yapilandirmaliyiz

Linux tabanlı sunucularda güvenlik, sistem yöneticilerinin en önemli önceliklerinden biridir. Özellikle bir Sanal Özel Sunucu (VPS) yönetiyorsanız, sisteminizi yetkisiz erişimlere, zararlı yazılımlara ve siber saldırılara karşı korumak hayati önem taşır. Bu noktada, standart izin mekanizmalarının ötesinde daha granüler ve katmanlı bir güvenlik sağlayan SELinux (Security-Enhanced Linux) devreye girer. Ancak SELinux, yapılandırma karmaşıklığı nedeniyle sıkça devre dışı bırakılan bir araçtır. Peki, bu doğru bir yaklaşım mıdır? Bu makalede, SELinux’ün ne olduğunu, geleneksel güvenlik modellerinden farkını, onu kapatmanın risklerini, aktif tutmanın avantajlarını ve temel yapılandırma adımlarını A’dan Z’ye ele alacağız. Amacımız, VPS’inizde SELinux’ü bir engel olarak değil, güçlü bir güvenlik müttefiki olarak nasıl kullanabileceğinizi göstermektir.

SELinux’e Giriş

Modern sunucu altyapılarında güvenlik, yalnızca dış tehditlere karşı bir savunma hattı oluşturmakla kalmaz, aynı zamanda sistem içindeki süreçlerin ve uygulamaların yetkilerini kontrol altında tutmayı da gerektirir. SELinux, bu derinlemesine güvenlik felsefesini benimseyen, Linux çekirdeğine entegre edilmiş güçlü bir güvenlik modülüdür. Onu anlamak, VPS güvenliğinde proaktif bir yaklaşım sergilemenin ilk adımıdır.

SELinux Nedir?

SELinux (Security-Enhanced Linux), Amerika Birleşik Devletleri Ulusal Güvenlik Ajansı (NSA) tarafından geliştirilen ve Linux çekirdeğine entegre edilen bir Zorunlu Erişim Kontrolü (Mandatory Access Control – MAC) sistemidir. Temel amacı, bir sürecin (örneğin bir web sunucusu) erişebileceği dosyaları, portları ve diğer sistem kaynaklarını katı bir şekilde tanımlanmış politikalar aracılığıyla sınırlamaktır. Bir saldırgan sistemdeki bir uygulamada zafiyet bulsa bile, SELinux sayesinde bu zafiyeti kullanarak sistemin diğer bölümlerine sızması ve hasar vermesi engellenir.

Geleneksel Güvenlik Modellerinden Farkı: DAC ve MAC Karşılaştırması

Linux sistemleri varsayılan olarak İsteğe Bağlı Erişim Kontrolü (Discretionary Access Control – DAC) modelini kullanır. Bu modelde, bir dosyanın veya kaynağın sahibi, ona kimin (kullanıcı, grup, diğerleri) hangi yetkilerle (okuma, yazma, çalıştırma) erişebileceğini belirler. SELinux ise bu modelin üzerine Zorunlu Erişim Kontrolü (MAC) katmanını ekler. MAC modelinde erişim kararları, sistem yöneticisi tarafından merkezi olarak tanımlanan ve çekirdek tarafından zorla uygulanan güvenlik politikalarına dayanır. Kullanıcılar veya süreçler, bu politikaları esnetemez veya değiştiremez.

ÖzellikDAC (Geleneksel Linux İzinleri)MAC (SELinux)
Kontrol MekanizmasıDosya sahibi izinleri belirler (chmod, chown).Merkezi bir politika tüm erişimi yönetir.
EsneklikYüksek. Kullanıcılar kendi dosyaları için izinleri değiştirebilir.Düşük. Sadece yönetici politikayı değiştirebilir.
Güvenlik OdaklılıkKullanıcı odaklıdır. Bir kullanıcının hesabı ele geçirilirse, o kullanıcının tüm dosyaları risk altına girer.Sistem odaklıdır. Bir süreç ele geçirilse bile, yalnızca politika tarafından izin verilen kaynaklara erişebilir.
KarmaşıklıkDüşük, anlaşılması ve yönetimi kolaydır.Yüksek, öğrenme eğrisi ve yapılandırma gerektirir.

Temel Kavramlar ve Terminoloji

SELinux’ü etkili bir şekilde kullanabilmek için bazı temel kavramları bilmek gerekir. Bu terimler, SELinux’ün nasıl çalıştığının ve yapılandırıldığının anahtarıdır.

Politikalar (Policies)

Politikalar, sistemdeki tüm etkileşimleri yöneten kurallar bütünüdür. Bir politikanın içinde, hangi sürecin (örneğin, httpd) hangi türdeki dosyaya (örneğin, httpd_sys_content_t) hangi izinlerle (örneğin, okuma) erişebileceği gibi binlerce kural bulunur. CentOS/RHEL tabanlı sistemlerde varsayılan olarak “targeted” (hedeflenmiş) politika kullanılır. Bu politika, belirli ağ servislerini hedefler ve sistemin geri kalanına karışmaz, bu da yönetimi kolaylaştırır.

Bağlamlar (Contexts)

SELinux’ün temel taşı bağlamlardır. Sistemdeki her dosya, süreç, port ve kullanıcı bir SELinux bağlamı ile etiketlenir. Bu etiket, “kullanıcı:rol:tür:seviye” formatında bir dizedir. En önemli kısmı “tür” (type) bilgisidir. Örneğin, Apache web sunucusunun dosyaları genellikle `httpd_sys_content_t` türüne sahipken, Apache sürecinin kendisi `httpd_t` türüyle çalışır. Politika, `httpd_t` sürecinin `httpd_sys_content_t` türündeki dosyalara erişimine izin verir.

Modlar (Modes)

SELinux üç ana modda çalışabilir: Enforcing (Zorlayıcı), Permissive (İzin Verici) ve Disabled (Devre Dışı). Bu modlar, politikaların ne kadar katı uygulanacağını belirler ve makalenin ilerleyen bölümlerinde detaylıca incelenecektir.

Boolean’lar (Booleans)

Boolean’lar, SELinux politikalarını yeniden derlemeye gerek kalmadan anında özelleştirmeyi sağlayan açma/kapama anahtarlarıdır. Örneğin, `httpd_can_network_connect` boolean’ı `on` olarak ayarlanırsa, web sunucusunun ağ bağlantıları kurmasına izin verilir. Bu, belirli senaryolar için politikayı esnetmenin en kolay yoludur.

VPS Güvenliğindeki Yeri ve Önemi

Bir VPS ortamında, genellikle birden fazla servis (web sunucusu, veritabanı, e-posta sunucusu vb.) aynı sistem üzerinde çalışır. Bu servislerden birinde ortaya çıkacak bir güvenlik zafiyeti, diğer servisleri ve tüm sistemi tehdit edebilir. SELinux, bu servisleri birbirinden izole ederek hasar sınırlaması (damage confinement) sağlar. Örneğin, web sunucunuzda bir “zero-day” zafiyeti istismar edilse bile, SELinux saldırganın veritabanı dosyalarını okumasını veya sisteme bir rootkit kurmasını engelleyebilir. Bu, geleneksel izinlerin tek başına sağlayamayacağı kritik bir koruma katmanıdır.

Karşılaştırma: SELinux’u Açık Tutmak mı, Kapatmak mı?

SELinux, sunduğu üstün güvenliğe rağmen sistem yöneticileri arasında sıkça tartışılan bir konudur. Birçok yönetici, karşılaştıkları ilk sorunda çözümü SELinux’ü devre dışı bırakmakta bulur. Ancak bu kararı vermeden önce, her iki senaryonun da avantajlarını ve dezavantajlarını dikkatlice tartmak gerekir.

SELinux’u Kapatmanın Yaygın Nedenleri

SELinux’ün kapatılmasının ardında genellikle üç temel neden yatar: uyumluluk, karmaşıklık ve sorun giderme zorlukları.

Uygulama Uyumluluk Sorunları

Bazı üçüncü parti uygulamalar veya özel olarak geliştirilmiş yazılımlar, SELinux politikalarıyla uyumlu olmayabilir. Bir uygulama, standart dışı bir dizine dosya yazmaya veya beklenmedik bir porta bağlanmaya çalıştığında, SELinux bu işlemleri engelleyerek uygulamanın düzgün çalışmasını önleyebilir. Bu durum, özellikle acil durumlarda, yöneticileri hızlı bir çözüm olarak SELinux’ü kapatmaya itebilir.

Yapılandırma Karmaşıklığı ve Öğrenme Eğrisi

SELinux’ün kendine özgü terminolojisi, bağlamları, boolean’ları ve politika kuralları, ilk başta göz korkutucu gelebilir. Standart Linux izin sistemine alışkın bir yönetici için SELinux’ü anlamak ve doğru şekilde yapılandırmak zaman ve çaba gerektirir. Bu öğrenme eğrisi, birçok kişinin onu kullanmaktan kaçınmasına neden olur.

Sorun Giderme Zorlukları

Bir uygulama beklendiği gibi çalışmadığında, sorunun kaynağının SELinux olup olmadığını anlamak bazen zor olabilir. Hata kayıtlarını (audit logs) okumak ve yorumlamak, doğru araçları (`audit2why`, `ausearch`) kullanmayı gerektirir. Bu süreç, standart sorun giderme yöntemlerine göre daha karmaşık olduğu için yöneticiler tarafından bir angarya olarak görülebilir.

SELinux’u Kapatmanın Potansiyel Riskleri

Kolay bir çözüm gibi görünse de, SELinux’ü devre dışı bırakmak, sunucunuzu ciddi güvenlik risklerine maruz bırakır. Bu, özellikle internete açık bir sunucu için tehlikeli bir adımdır.

“Zero-Day” Zafiyetlerine Karşı Savunmasızlık

Yazılımlarda henüz bilinmeyen ve yaması yayınlanmamış güvenlik açıklarına “zero-day” zafiyetleri denir. Bir saldırgan, Apache veya Nginx gibi popüler bir yazılımda böyle bir açık bulursa, SELinux kapalıyken bu açığı kullanarak sistemde kolayca komut çalıştırabilir. SELinux açık olduğunda ise, web sunucusu sürecinin yetkileri o kadar kısıtlıdır ki, saldırganın sistemin diğer bölümlerine sızması ve kalıcı hasar vermesi neredeyse imkansız hale gelir.

Hasar Sınırlama Yeteneğinin Kaybı

SELinux’ün en büyük faydalarından biri, bir güvenlik ihlali durumunda hasarı sınırlamasıdır. Bir süreç (örneğin, bir PHP betiği) ele geçirilse bile, yalnızca kendi SELinux bağlamının izin verdiği dosya ve işlemlere erişebilir. SELinux’ü kapattığınızda, bu izolasyon ortadan kalkar ve ele geçirilen bir süreç, ait olduğu kullanıcının tüm yetkilerine sahip olur, bu da felaketle sonuçlanabilir.

Ayrıcalık Yükseltme Saldırılarına Karşı Zayıflık

Ayrıcalık yükseltme (privilege escalation), bir saldırganın düşük yetkili bir kullanıcı hesabından root (yönetici) hesabına geçmeye çalışmasıdır. SELinux, süreçlerin çekirdekle nasıl etkileşime gireceğini sıkı bir şekilde kontrol ederek bu tür saldırıların birçoğunu engeller. Bu koruma katmanını kaldırmak, sunucunuzu daha savunmasız bırakır.

SELinux’u Aktif Tutmanın Avantajları

Yapılandırma zorluklarına rağmen, SELinux’ü aktif ve doğru yapılandırılmış bir şekilde tutmanın getirdiği güvenlik avantajları yadsınamaz.

Avantajlar (SELinux Açık)Dezavantajlar / Riskler (SELinux Kapalı)
Gelişmiş Sistem Güvenliği: “Zero-day” ve diğer zafiyetlere karşı proaktif koruma sağlar.Artan Güvenlik Açıkları: Bilinmeyen zafiyetlere karşı tamamen savunmasız kalınır.
Süreç İzolasyonu: Bir servisteki ihlalin diğer servislere yayılmasını engeller (hasar sınırlama).Sistem Geneli Risk: Tek bir güvenlik açığı tüm sistemin ele geçirilmesine yol açabilir.
Ayrıcalık Yükseltme Koruması: Kötü niyetli yazılımların root yetkilerine ulaşmasını zorlaştırır.Kolay Ayrıcalık Yükseltme: Saldırganların root erişimi elde etmesi daha kolay hale gelir.
Yasal ve Kurumsal Uyum: PCI-DSS, HIPAA gibi standartların gerektirdiği katı güvenlik kontrollerini karşılamaya yardımcı olur.Uyumsuzluk Riski: Belirli güvenlik standartlarına ve yasal düzenlemelere uyum sağlamak zorlaşır.

Gelişmiş Sistem Güvenliği ve İzolasyon

SELinux, her bir servisi kendi “kum havuzuna” (sandbox) hapseder. Web sunucusu sadece web dosyalarına, veritabanı sunucusu sadece veritabanı dosyalarına erişebilir. Bu, sistem bütünlüğünü korumanın en etkili yollarından biridir.

Süreçlerin Yetkilerinin Sınırlandırılması

En az ayrıcalık ilkesi (principle of least privilege), bir sürecin işini yapması için gereken minimum yetkilere sahip olması gerektiğini belirtir. SELinux, bu ilkeyi çekirdek seviyesinde uygulayarak sistem güvenliğini temelden güçlendirir.

Yasal ve Kurumsal Uyum Gereksinimlerinin Karşılanması

PCI-DSS (Kredi Kartı Sektörü Veri Güvenliği Standardı) veya HIPAA (Sağlık Sigortası Taşınabilirlik ve Sorumluluk Yasası) gibi sıkı güvenlik standartlarına uyması gereken işletmeler için SELinux, zorunlu erişim kontrolü gibi gereksinimleri karşılamada önemli bir araçtır. Ayrıca bir yönetilmeyen vps sahibiyseniz bu ayarlamaları sizin yapmanız gerektiğini unutmayın.

Son Karar: Hangi Senaryo Sizin İçin Uygun?

Genel kural olarak, **SELinux’ü her zaman “Enforcing” modunda çalıştırmalısınız.** Kapatmak, yalnızca kısa vadeli bir kolaylık sağlar ancak uzun vadede sunucunuzu büyük risklere atar. Eğer bir uygulama uyumluluk sorunu yaşıyorsanız, doğru yaklaşım SELinux’ü kapatmak değil, sorunu anlamak ve uygulama için gerekli olan özel politika kurallarını oluşturmaktır. SELinux’ü öğrenmek için zaman ayırmak, sunucunuzun güvenliğine yapacağınız en değerli yatırımlardan biridir.

SELinux Durumunu Yönetme ve Modları Değiştirme

SELinux’ün davranışını kontrol etmek, mevcut durumunu anlamak ve gerektiğinde modlar arasında geçiş yapmak, temel SELinux yönetiminin ilk adımıdır. Bu işlemler, birkaç basit komutla kolayca gerçekleştirilebilir.

Mevcut SELinux Durumunu Kontrol Etme: `sestatus`

Sisteminizdeki SELinux’ün mevcut durumunu öğrenmenin en kolay yolu `sestatus` komutunu kullanmaktır. Bu komut, size SELinux’ün aktif olup olmadığını, hangi modda çalıştığını, hangi politikanın yüklü olduğunu ve diğer önemli bilgileri özetler.

Terminalde `sestatus` komutunu çalıştırdığınızda şuna benzer bir çıktı alırsınız:

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: 31

Bu çıktıda en önemli satırlar “Current mode” (Mevcut mod) ve “Mode from config file” (Yapılandırma dosyasındaki mod) satırlarıdır. “Current mode”, SELinux’ün şu anki çalışma modunu gösterirken; “Mode from config file”, sistem yeniden başlatıldığında hangi modda başlayacağını belirtir.

SELinux Modlarını Anlama

SELinux’ün üç temel çalışma modu vardır. Her modun farklı bir işlevi bulunur ve doğru modu seçmek, hem güvenlik hem de sorun giderme açısından kritiktir.

Enforcing (Zorlayıcı) Mod

Bu, SELinux’ün varsayılan ve en güvenli çalışma modudur. Bu modda, SELinux politika kurallarını aktif olarak zorlar. Yani, politikaya aykırı olan herhangi bir işlem (örneğin, bir web sunucusunun `/home` dizinindeki bir dosyayı okumaya çalışması) engellenir ve bu deneme `/var/log/audit/audit.log` dosyasına kaydedilir. Üretim ortamındaki sunucular her zaman bu modda çalışmalıdır.

Permissive (İzin Verici) Mod

Permissive mod, sorun giderme ve politika geliştirme için kullanılır. Bu modda, SELinux politika ihlallerini engellemez, sadece bir uyarı olarak hata kayıtlarına (log) yazar. Politika kurallarına aykırı bir işlem gerçekleştiğinde, SELinux bu işleme izin verir ama “bunu yapmamalıydın” dercesine bir kayıt oluşturur. Bu mod, yeni bir uygulama kurduğunuzda hangi SELinux kurallarına ihtiyacınız olduğunu anlamak için son derece kullanışlıdır.

Disabled (Devre Dışı) Mod

Bu modda, SELinux çekirdekten tamamen devre dışı bırakılır. Hiçbir politika yüklenmez, hiçbir işlem kontrol edilmez ve hiçbir kayıt tutulmaz. Ayrıca, dosya sistemindeki dosyalara SELinux bağlam etiketleri atanmaz. Bu mod kesinlikle önerilmez, çünkü sisteminizi önemli bir koruma katmanından mahrum bırakır. Disabled moddan tekrar Enforcing veya Permissive moda geçmek, tüm dosya sisteminin yeniden etiketlenmesini gerektireceği için zahmetli bir süreçtir ve yeniden başlatma gerektirir.

Çalışma Zamanında Mod Değiştirme: `setenforce` Komutu

Sistemi yeniden başlatmadan SELinux modunu Enforcing ve Permissive arasında değiştirebilirsiniz. Bu işlem `setenforce` komutu ile yapılır. Bu komut, özellikle geçici olarak bir sorunu teşhis etmek için kullanışlıdır.

Bu değişiklikler sadece mevcut oturum için geçerlidir ve sistem yeniden başlatıldığında kaybolur. `getenforce` komutu ile de mevcut modu hızlıca kontrol edebilirsiniz.

Sistemin Yeniden Başlatılmasında Kalıcı Olacak Şekilde Mod Değiştirme

SELinux modunu kalıcı olarak değiştirmek için yapılandırma dosyasını düzenlemeniz gerekir. Bu dosya `/etc/selinux/config` (veya bazı sistemlerde `/etc/sysconfig/selinux`) yolunda bulunur.

Dosyayı bir metin düzenleyici ile açın (örneğin, `nano /etc/selinux/config`) ve `SELINUX=` satırını düzenleyin.

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing

Burada `SELINUX=` değerini `enforcing`, `permissive` veya `disabled` olarak ayarlayabilirsiniz. Bu değişikliğin etkili olması için sisteminizi yeniden başlatmanız gerekir. Özellikle `disabled` modundan diğer modlara geçiş yapıyorsanız, yeniden başlatma sırasında dosya sisteminin yeniden etiketlenmesi (auto-relabel) işlemi gerçekleşecektir, bu da biraz zaman alabilir.

Temel SELinux Yapılandırma Adımları

SELinux’ü sadece aktif tutmak yeterli değildir; aynı zamanda sisteminizdeki uygulamaların ve servislerin ihtiyaçlarına göre doğru şekilde yapılandırmak da gerekir. Bu, bağlamlarla çalışmayı, boolean’ları ayarlamayı ve ağ portlarını yönetmeyi içerir. Doğru bir Linux Hosting paketi seçimi bu adımları daha kolay yönetmenizi sağlar.

SELinux Bağlamları (Contexts) ile Çalışma

Bağlamlar, SELinux’ün temelini oluşturur. Bir dosyanın veya sürecin ne yapıp ne yapamayacağı, onun bağlam etiketine göre belirlenir. Yanlış bağlama sahip bir dosya, en sık karşılaşılan SELinux hatalarının nedenidir.

Dosya ve Dizinlerin Bağlamını Görüntüleme: `ls -Z`

Bir dosyanın veya dizinin SELinux bağlamını görmek için standart `ls` komutuna `-Z` bayrağını eklemeniz yeterlidir. Örneğin, `/var/www/html` dizininin içeriğini listelemek için:

ls -Z /var/www/html

Çıktı, dosyanın izinleri, sahibi, grubu gibi standart bilgilerin yanı sıra SELinux bağlamını da gösterecektir. Web sunucusu tarafından erişilebilir dosyalar genellikle `httpd_sys_content_t` bağlam türüne sahiptir.

Bir Dosyanın Bağlamını Geçici Olarak Değiştirme: `chcon`

Eğer bir dosyanın bağlamı yanlışsa ve bunu geçici olarak düzeltmek isterseniz `chcon` (change context) komutunu kullanabilirsiniz. Örneğin, web sunucusunun okuyabilmesi için bir dosyanın türünü `httpd_sys_content_t` olarak ayarlamak:

chcon -t httpd_sys_content_t /path/to/file.html

Ancak bu değişiklik geçicidir. Eğer sistemde dosya sistemi yeniden etiketlenirse veya `restorecon` komutu çalıştırılırsa, bu değişiklik kaybolur ve dosya varsayılan bağlamına geri döner.

Dosya Sistemi Etiketlerine Göre Bağlamları Kalıcı Olarak Geri Yükleme: `restorecon`

Dosyaların bağlamlarını kalıcı olarak düzeltmenin en doğru yolu `restorecon` komutunu kullanmaktır. Bu komut, SELinux’ün dosya sistemi etiketleme politikalarını okur ve bir dosyanın veya dizinin olması gereken varsayılan bağlamı ne ise onu uygular. Örneğin, web sitenizin kök dizinindeki tüm dosyaların bağlamlarını düzeltmek için:

restorecon -Rv /var/www/html

`-R` parametresi işlemi yinelemeli (recursive) olarak tüm alt dizinlere uygular, `-v` ise yapılan değişiklikleri ekranda gösterir. Bir dosyayı yanlış bir konumdan web dizinine taşıdıysanız (örneğin `/home` dizininden), bağlamı genellikle yanlış olacaktır. `restorecon` çalıştırmak bu sorunu çözmenin en güvenli yoludur.

SELinux Boolean’ları ile Politikaları Özelleştirme

Boolean’lar, SELinux politikasının belirli yönlerini, politikayı yeniden yazmaya gerek kalmadan açıp kapatmanızı sağlayan anahtarlardır. Bu, sık karşılaşılan senaryolar için esneklik sağlar.

Mevcut Boolean’ları ve Durumlarını Listeleme: `getsebool -a`

Sisteminizdeki tüm SELinux boolean’larını ve mevcut durumlarını (on/off) listelemek için `getsebool -a` komutunu kullanabilirsiniz. Çıktı oldukça uzun olabilir, bu yüzden genellikle `grep` ile filtrelemek daha pratiktir. Örneğin, HTTPD ile ilgili boolean’ları görmek için:

getsebool -a | grep httpd

Boolean Değerini Değiştirme: `setsebool`

Bir boolean’ın değerini değiştirmek için `setsebool` komutu kullanılır. Örneğin, web sunucusunun ağ üzerinden başka servislere bağlanmasına izin vermek için:

setsebool httpd_can_network_connect on

Bu komutla yapılan değişiklik, yeniden başlatma sonrasında kaybolur. Değişikliği kalıcı hale getirmek için `-P` bayrağını eklemeniz gerekir:

setsebool -P httpd_can_network_connect on

Bu işlem biraz daha uzun sürebilir çünkü politika disk üzerine yazılır.

Ağ Portu Bağlamlarını Yönetme: `semanage port`

SELinux, sadece dosya ve süreçleri değil, aynı zamanda ağ portlarını da kontrol eder. Her servisin yalnızca belirli bağlam türüne sahip portları dinlemesine izin verilir. Örneğin, Apache varsayılan olarak `http_port_t` türüne sahip portları (80, 443 vb.) dinleyebilir. Eğer web sunucunuzu standart dışı bir portta (örneğin 8080) çalıştırmak isterseniz, SELinux’e bu portun artık `http_port_t` türüne ait olduğunu bildirmeniz gerekir.

Yeni Bir Port için Politika Tanımlama

`semanage` aracı, SELinux politika yönetiminin temel komutudur. 8080 TCP portunu `http_port_t` olarak tanımlamak için aşağıdaki komut kullanılır:

semanage port -a -t http_port_t -p tcp 8080

Burada `-a` ekleme, `-t` tür belirtme ve `-p` protokol belirtme anlamına gelir.

Mevcut Port Politikalarını Listeleme

Sistemde tanımlı olan tüm port bağlamlarını listelemek için `semanage port -l` komutunu kullanabilirsiniz. Belirli bir türle ilişkili portları görmek için `grep` ile filtreleyebilirsiniz:

semanage port -l | grep http_port_t

Bu komutlar, SELinux’ü yönetilebilir ve sisteminizin ihtiyaçlarına uyarlanabilir bir güvenlik aracına dönüştürmenizi sağlar.

SELinux Sorunlarını Giderme (Troubleshooting)

SELinux, bir işlemi engellediğinde, bunu sessizce yapmaz. Her engelleme (AVC denial) sistemin denetim (audit) kayıtlarına detaylı bir şekilde yazılır. Bu kayıtları okumayı ve yorumlamayı öğrenmek, SELinux kaynaklı sorunları çözmenin anahtarıdır. Neyse ki bu süreçte size yardımcı olacak güçlü araçlar mevcuttur. Eğer bir cPanel Hosting kullanıyorsanız, bazı ayarlar panel üzerinden daha kolay yönetilebilir.

SELinux Hata Kayıtlarını (Loglarını) Okuma ve Yorumlama

SELinux tarafından engellenen her eylem, bir iz bırakır. Bu izleri takip ederek sorunun kaynağını ve çözümünü bulabilirsiniz.

Audit Log Dosyasının Yeri: `/var/log/audit/audit.log`

Tüm SELinux olayları, varsayılan olarak `/var/log/audit/audit.log` dosyasına kaydedilir. Bu dosyayı doğrudan okumak mümkün olsa da, içeriği oldukça karmaşık ve ayrıntılıdır. Genellikle ham log dosyasını okumak yerine, bu logları analiz etmek için tasarlanmış özel araçlar kullanılır.

`ausearch` Komutu ile Hata Filtreleme

`ausearch` komutu, devasa `audit.log` dosyası içinde belirli olayları aramak için kullanılır. Özellikle SELinux reddetmelerini (AVC denial) bulmak için son derece faydalıdır. Yalnızca son zamanlarda meydana gelen AVC reddetmelerini görmek için:

ausearch -m avc -ts recent

Burada `-m avc` mesaj türünü “AVC” olarak filtreler, `-ts recent` ise zaman damgasını “yakın zaman” (genellikle son 10 dakika) olarak sınırlar. Bu komut, sorunun neden kaynaklandığına dair ilk ipuçlarını size verecektir.

Sorun Giderme Yardımcı Araçları

Red Hat tabanlı dağıtımlar (CentOS, Fedora, RHEL), SELinux sorunlarını anlamayı ve çözmeyi kolaylaştıran `setroubleshoot` paketi ile birlikte gelir. Bu paket, `audit2why` ve `audit2allow` gibi paha biçilmez araçlar içerir.

Hata Nedenini Anlama: `audit2why`

Bir engelleme kaydı bulduğunuzda, bunun neden olduğunu anlamak için `audit2why` aracını kullanabilirsiniz. Bu araç, denetim loglarını okur ve size engellemenin nedenini daha anlaşılır bir dilde açıklar.

audit2why < /var/log/audit/audit.log

Çıktı size genellikle sorunun bir boolean’ı etkinleştirerek mi yoksa bir dosya bağlamını düzelterek mi çözülebileceğini söyleyecektir. Hatta bazen, “Bu engellemeyi çözmek için ‘setsebool -P httpd_can_network_connect on’ komutunu çalıştırın” gibi doğrudan çözüm önerileri sunar.

Hatalardan Politika Kuralı Oluşturma: `audit2allow`

Bazen karşılaştığınız sorun, mevcut politikada olmayan özel bir izni gerektirir. Bu durumda, `audit2allow` aracı devreye girer. Bu araç, denetim loglarındaki engelleme kayıtlarını analiz eder ve bu engellemeleri ortadan kaldıracak özel SELinux politika modülleri oluşturur. Bu, ileri düzey bir tekniktir ve dikkatli kullanılmalıdır.

Önce, mevcut tüm reddetmelerden bir kural taslağı oluşturulur:

audit2allow -a

Eğer önerilen kural mantıklı görünüyorsa, bu kuralı içeren bir modül oluşturup sisteme yükleyebilirsiniz:

audit2allow -a -M my_custom_policy
semodule -i my_custom_policy.pp

Bu, uygulamanızın ihtiyaç duyduğu özel izinleri, ana politikayı değiştirmeden, yönetilebilir bir modül olarak eklemenizi sağlar.

Sık Karşılaşılan SELinux Hataları ve Çözümleri

Pratikte, sistem yöneticilerinin karşılaştığı SELinux sorunları genellikle birkaç yaygın senaryo etrafında toplanır.

Web Sunucusu (Apache/Nginx) Erişim İzni Hataları

Sorun: Web sitenizin dosyalarını standart `/var/www/html` dizini yerine, örneğin `/srv/my-website` gibi farklı bir dizine koydunuz ve tarayıcıda “403 Forbidden” hatası alıyorsunuz.

Neden: Yeni dizinin ve içindeki dosyaların SELinux bağlamı muhtemelen `httpd_sys_content_t` değil. Web sunucusu (`httpd_t` süreci) bu bağlama sahip olmayan dosyaları okuyamaz.

Çözüm: Önce `semanage fcontext` ile yeni dizin için kalıcı bir etiketleme kuralı ekleyin, ardından `restorecon` ile bu kuralı uygulayın.

semanage fcontext -a -t httpd_sys_content_t "/srv/my-website(/.*)?"
restorecon -Rv /srv/my-website

Veritabanı Servisinin Dosyalara Erişememesi

Sorun: MySQL/MariaDB veritabanı dosyalarınızı varsayılan `/var/lib/mysql` dizininden daha büyük bir diske bağlı olan `/data/mysql` dizinine taşıdınız ve veritabanı servisi başlamıyor.

Neden: Yeni dizinin bağlamı, veritabanı sürecinin (`mysqld_t`) yazma iznine sahip olduğu `mysqld_db_t` değil.

Çözüm: Web sunucusu örneğinde olduğu gibi, yeni dizin için doğru bağlam kuralını tanımlayın ve uygulayın.

semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
restorecon -Rv /data/mysql

Özel Bir Port Üzerinden Çalışan Uygulama Hataları

Sorun: Özel bir uygulamayı 9999 portunda çalışacak şekilde yapılandırdınız, ancak uygulama bu porta bağlanamıyor (bind error).

Neden: SELinux, 9999 portunun hangi servis tarafından kullanılabileceğini bilmiyor. Bu port muhtemelen `unreserved_port_t` olarak etiketlidir ve uygulamanızın bu türe bağlanma izni yoktur.

Çözüm: `semanage port` komutu ile bu porta uygulamanız için özel bir bağlam türü atayın. Örneğin, uygulamanızın bağlamı `myapp_t` ise, porta da `myapp_port_t` gibi bir tür atayarak sorunu çözebilirsiniz. Basit bir çözüm olarak, eğer bu bir HTTP servisi ise, `http_port_t` olarak da etiketleyebilirsiniz:

semanage port -a -t http_port_t -p tcp 9999

Güvenli ve Yönetilebilir Bir VPS Altyapısı İçin Neden İHS Telekom’u Tercih Etmelisiniz?

SELinux gibi güçlü güvenlik araçlarını etkin bir şekilde yönetmek, yalnızca teknik bilgi değil, aynı zamanda sağlam ve güvenilir bir altyapı gerektirir. Bir VDS veya VPS sunucusunun performansı, güvenliği ve yönetilebilirliği, temelinde yatan donanım, ağ altyapısı ve sağlayıcının sunduğu destek hizmetleriyle doğrudan ilişkilidir. İşte bu noktada İHS Telekom, Türkiye’nin lider altyapı sağlayıcısı olarak öne çıkmaktadır.

İHS Telekom, yılların verdiği tecrübe ile en güncel donanımları ve yüksek hızlı ağ altyapısını bir araya getirerek kesintisiz ve performanslı hosting hizmetleri sunar. Sunduğumuz VPS çözümleri, SELinux gibi gelişmiş güvenlik katmanlarını sorunsuz bir şekilde çalıştırmanız için gereken kararlı ve güçlü ortamı sağlar. Güvenlik, altyapımızın temel taşıdır ve sunduğumuz tüm hizmetlerde en yüksek standartları gözetiriz. Ayrıca olası bir problemde bir SSL sertifikası kurulumunda veya diğer teknik konularda uzman ekibimizden destek alabilirsiniz. Projeniz için bir domain sorgulama işlemi yaparak ilk adımı atabilirsiniz.

Web siteniz için özel olarak optimize edilmiş, yüksek performanslı ve güvenli bir barındırma çözümü arıyorsanız, WordPress hosting paketlerimiz de ideal bir seçenek olabilir. İster karmaşık SELinux politikaları yönetin, ister yüksek trafikli bir web uygulaması çalıştırın, İHS Telekom’un sunduğu esnek ve ölçeklenebilir altyapı ile tüm ihtiyaçlarınıza cevap bulabilirsiniz. Güvenliğinizi ve performansınızı şansa bırakmayın, sektörün lideri İHS Telekom ile çalışarak projenizi sağlam temeller üzerine inşa edin.

Exit mobile version