Doküman

SELinux Sorunları Nasıl Giderilir

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:

  1. The labels are wrong. Etiketlemeniz yanlışsa, etiketleri düzeltmek için araçları kullanabilirsiniz.
  2. 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.
  3. There is a bug in the policy. Politikada ele alınması gereken bir hata olabilir.
  4. 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.