Bugün SElinux’a göz atalım ve SELinux sorunlarının nasıl giderileceğini görelim.
SELinux
Security-Enhanced Linux (SELinux), Linux® sistemleri için yöneticilerin sisteme kimlerin erişebileceği konusunda daha fazla kontrole sahip olmalarını sağlayan bir güvenlik mimarisidir. Başlangıçta Amerika Birleşik Devletleri Ulusal Güvenlik Ajansı (NSA) tarafından Linux Güvenlik Modülleri (LSM) kullanılarak Linux çekirdeğine yönelik bir dizi yama olarak geliştirilmiştir.
SELinux, 2000 yılında açık kaynak topluluğuna sunuldu ve 2003 yılında yukarı akış Linux çekirdeğine entegre edildi.
SELinux nasıl çalışır?
SELinux, bir sistemdeki uygulamalar, işlemler ve dosyalar için erişim kontrollerini tanımlar. Bir ilkenin izin verdiği erişimi zorlamak için SELinux’a neye erişilebileceğini veya neyin erişilemeyeceğini söyleyen bir dizi kural olan güvenlik ilkelerini kullanır.
Konu olarak bilinen bir uygulama veya işlem, dosya gibi bir nesneye erişim talebinde bulunduğunda, SELinux, özneler ve nesneler için izinlerin önbelleğe alındığı bir erişim vektörü önbelleği (AVC) ile kontrol eder.
SELinux, önbelleğe alınan izinlere dayanarak erişim hakkında bir karar veremezse, isteği güvenlik sunucusuna gönderir. Güvenlik sunucusu, uygulamanın veya işlemin ve dosyanın güvenlik bağlamını kontrol eder. Güvenlik bağlamı, SELinux ilke veritabanından uygulanır. Daha sonra izin verilir veya reddedilir.
İzin reddedilirse, /var/log.messages içinde bir “avc: reddedildi” mesajı mevcut olacaktır.
SELinux hataları nasıl işlenir
SELinux’ta bir hata aldığınızda, ele alınması gereken bir şey vardır. Muhtemelen bu 4 yaygın sorundan 1’idir:
- The labels are wrong. Etiketlemeniz yanlışsa, etiketleri düzeltmek için araçları kullanabilirsiniz.
- A policy needs to be fixed. Bu, yaptığınız bir değişiklik hakkında SELinux’u bilgilendirmeniz veya bir politikayı ayarlamanız gerektiği anlamına gelebilir. Booleanları veya ilke modüllerini kullanarak düzeltebilirsiniz.
- There is a bug in the policy. Politikada ele alınması gereken bir hata olabilir.
- The system has been broken in to. SELinux, sistemlerinizi birçok senaryoda koruyabilse de, bir sistemin güvenliğinin ihlal edilmesi olasılığı hala mevcuttur. Bunun böyle olduğundan şüpheleniyorsanız, derhal harekete geçin.
Sorun:
Hizmet başlatılamıyor – Bizim örnekteki servis HTTPD, bu herhangi bir hizmet olabilir, senaryonuza göre değiştirebilirsiniz.
Çözüm:
Hizmeti başlatmayı deneyebilir ve neler olduğunu kontrol edebilirsiniz, hizmeti başlatmaya çalıştığınızda, neler olduğunu ve nerede başarısız olduğunu anlayabilirsiniz. Systemd verileri yakalar ve ayrıntılı hata görüntüler.
Hizmetin durumunu kontrol edin,
# systemctl status httpd
httpd’yi başlatmayı deneyin:
# systemctl start httpd
Durumu tekrar çalıştırın:
# systemctl status httpd.service
Devre dışı bırakarak sorunun SELinux ile olup olmadığını kontrol edin:
# setenforce 0
şimdi httpd hizmetini yeniden başlatın ve durumu kontrol edin.
# systemctl start httpd
httpd’nin durumunu kontrol edin:
# systemctl status httpd.service
Hizmet iyi başladıysa, sorunun selinux ile olduğunu onayladık, ancak hedefimiz selinux’u devre dışı bırakmak değil, bu yüzden hizmeti durduralım ve selinux’u etkinleştirelim.
httpd hizmetini durdurmak için şunu çalıştırın,
# systemctl stop httpd
SELinux’u etkinleştirmek için şunu çalıştırın:
# setenforce 1
Selinux ile ilgili sorunun farkındayız, ancak bunun hizmet mi yoksa bağlantı noktası mı olduğundan emin değiliz (çoğunlukla bağlantı noktasından kaynaklanmaktadır, gördüğünüz gibi hizmet systemctl’de başlamaya çalışıyor, ancak bağlantı noktasının izni reddedildi).
Asıl sorunun ne olduğunu kontrol etmek için aşağıdaki komutu çalıştırarak SELinux ile ilgili günlükleri gözden geçirebilirsiniz.
# ausearch -m avc -ts recent
Ayrıca, denetim günlüklerini inceleyebilir ve yüklendikten sonra httpd bölümüne gidebilirsiniz:
# sealert -a /var/log/audit/audit.log
Bu gönderiyle ilgili olduğundan, selinux’ta hangi bağlantı noktalarına izin verildiğini doğrulamak için aşağıdaki komutu çalıştırabilirsiniz. http bağlantı noktalarını doğrulamak için:
# semanage port -l | grep http
Bununla biliyoruz, bağlantı noktası eksik, bağlantı noktasını selinux’a eklemek için aşağıdaki komutu çalıştırabilirsiniz.
# semanage port -a -t http_port_t -p tcp 9091
Ekledikten sonra, 9091 numaralı bağlantı noktasının listelendiğini doğrulayın:
# semanage port -l | grep http
Bağlantı noktasını gördüğünüzde, artık httpd hizmetini başlatabilir ve durumu görebilirsiniz, hizmet çalışıyor ve çalışıyor olmalıdır.
# systemctl start httpd
Durumu kontrol edin:
# systemctl status httpd
Yazının orijinalini buradan okuyabilirsiniz.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.