SELinux'a Yeni Başlayanlar Kılavuzu

SELinux'a Yeni Başlayanlar Kılavuzu

Ders öğrencileri için hazırlanan makalenin tercümesi "Linux Güvenliği"

SELinux veya Güvenliği Geliştirilmiş Linux, kötü niyetli izinsiz girişleri önlemek için ABD Ulusal Güvenlik Ajansı (NSA) tarafından geliştirilen gelişmiş bir erişim kontrol mekanizmasıdır. Mevcut isteğe bağlı (veya seçici) modelin (İngilizce İsteğe Bağlı Erişim Kontrolü, DAC), yani okuma, yazma, yürütme izinlerine ek olarak zorunlu (veya zorunlu) bir erişim kontrol modeli (İngilizce Zorunlu Erişim Kontrolü, MAC) uygular.

SELinux'un üç modu vardır:

  1. Bağlayıcılığı — politika kurallarına göre erişim reddi.
  2. izin veren - uygulama modunda yasaklanacak olan politikayı ihlal eden eylemlerin kayıtlarının tutulması.
  3. Yayından kaldırıldı - SELinux'un tamamen devre dışı bırakılması.

Varsayılan olarak ayarlar şuradadır /etc/selinux/config

SELinux modlarını değiştirme

Geçerli modu bulmak için çalıştırın

$ getenforce

Modu izin verilen olarak değiştirmek için aşağıdaki komutu çalıştırın

$ setenforce 0

veya modu değiştirmek için müsamahakâr üzerinde zorlama, vypolnit

$ setenforce 1

SELinux'u tamamen devre dışı bırakmanız gerekiyorsa, bu yalnızca yapılandırma dosyası aracılığıyla yapılabilir.

$ vi /etc/selinux/config

Devre dışı bırakmak için SELINUX parametresini aşağıdaki gibi değiştirin:

SELINUX=disabled

SELinux'u kurma

Her dosya ve işlem, kullanıcı, rol, tür vb. gibi ek bilgileri içeren bir SELinux içeriğiyle işaretlenir. SELinux'u ilk kez etkinleştiriyorsanız, öncelikle içeriği ve etiketleri yapılandırmanız gerekecektir. Etiketleri ve bağlamı atama işlemi etiketleme olarak bilinir. İşaretlemeye başlamak için konfigürasyon dosyasında modu şu şekilde değiştiriyoruz: müsamahakâr.

$ vi /etc/selinux/config
SELINUX=permissive

Modu ayarladıktan sonra müsamahakârkökte bu adı taşıyan boş bir gizli dosya oluşturun. autorelabel

$ touch /.autorelabel

ve bilgisayarı yeniden başlat

$ init 6

Not: modunu kullanıyoruz müsamahakâr modun kullanımından bu yana işaretleme için zorlama yeniden başlatma sırasında sistemin çökmesine neden olabilir.

İndirme işlemi bir dosyada takılı kalırsa endişelenmeyin, işaretleme biraz zaman alır. İşaretleme tamamlandıktan ve sisteminiz başlatıldıktan sonra yapılandırma dosyasına gidebilir ve modu ayarlayabilirsiniz. zorlamave ayrıca şunu çalıştırın:

$ setenforce 1

Artık SELinux'u bilgisayarınızda başarıyla etkinleştirdiniz.

Günlükleri izleme

İşaretleme sırasında veya sistem çalışırken bazı hatalarla karşılaşmış olabilirsiniz. SELinux'unuzun düzgün çalışıp çalışmadığını ve herhangi bir bağlantı noktasına, uygulamaya vb. erişimi engellemediğini kontrol etmek için günlüklere bakmanız gerekir. SELinux günlüğü şurada bulunur: /var/log/audit/audit.log, ancak hataları bulmak için tamamını okumanıza gerek yoktur. Hataları bulmak için denetim2why yardımcı programını kullanabilirsiniz. Aşağıdaki komutu çalıştırın:

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

Sonuç olarak, bir hata listesi alacaksınız. Günlükte hata yoksa hiçbir mesaj görüntülenmez.

SELinux Politikasını Yapılandırma

SELinux politikası, SELinux güvenlik mekanizmasını yöneten bir dizi kuraldır. Politika, belirli bir ortam için bir dizi kural tanımlar. Şimdi yasaklı hizmetlere erişime izin verecek politikaları nasıl yapılandıracağımızı öğreneceğiz.

1. Mantıksal değerler (anahtarlar)

Anahtarlar (boole'lar), yeni politikalar oluşturmanıza gerek kalmadan bir politikanın bölümlerini çalışma zamanında değiştirmenize olanak tanır. SELinux politikalarını yeniden başlatmadan veya yeniden derlemeden değişiklik yapmanıza olanak tanır.

Örnek
Diyelim ki bir kullanıcının ana dizinini FTP okuma/yazma yoluyla paylaşmak istiyoruz ve bunu zaten paylaştık, ancak erişmeye çalıştığımızda hiçbir şey göremiyoruz. Bunun nedeni, SELinux ilkesinin FTP sunucusunun kullanıcının ana dizinini okumasını ve bu dizine yazmasını engellemesidir. FTP sunucusunun ana dizinlere erişebilmesi için politikayı değiştirmemiz gerekiyor. Bunu yaparak herhangi bir anahtar olup olmadığını görelim.

$ semanage boolean -l

Bu komut mevcut anahtarları geçerli durumları (açık veya kapalı) ve açıklamalarıyla birlikte listeleyecektir. Yalnızca ftp sonuçlarını bulmak için grep ekleyerek aramanızı hassaslaştırabilirsiniz:

$ semanage boolean -l | grep ftp

ve aşağıdakileri bulacaksınız

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Bu anahtar devre dışı bırakıldı, bu yüzden onu etkinleştireceğiz setsebool $ setsebool ftp_home_dir on

Artık ftp arka plan programımız kullanıcının ana dizinine erişebilecek.
Not: Açıklama olmadan mevcut anahtarların bir listesini aşağıdakileri yaparak da alabilirsiniz: getsebool -a

2. Etiketler ve bağlam

Bu, SELinux politikasını uygulamanın en yaygın yoludur. Her dosya, klasör, işlem ve bağlantı noktası SELinux içeriğiyle işaretlenmiştir:

  • Dosyalar ve klasörler için etiketler, dosya sisteminde genişletilmiş öznitelikler olarak saklanır ve aşağıdaki komutla görüntülenebilir:
    $ ls -Z /etc/httpd
  • İşlemler ve bağlantı noktaları için etiketleme çekirdek tarafından yönetilir ve bu etiketleri aşağıdaki gibi görüntüleyebilirsiniz:

süreç

$ ps –auxZ | grep httpd

liman

$ netstat -anpZ | grep httpd

Örnek
Şimdi etiketleri ve bağlamı daha iyi anlamak için bir örneğe bakalım. Diyelim ki bir dizin yerine bir web sunucumuz var /var/www/html/ использует /home/dan/html/. SELinux bunu bir politika ihlali olarak değerlendirecek ve web sayfalarınızı görüntüleyemeyeceksiniz. Bunun nedeni, HTML dosyalarıyla ilişkili güvenlik içeriğini ayarlamamış olmamızdır. Varsayılan güvenlik içeriğini görüntülemek için aşağıdaki komutu kullanın:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

İşte geldik httpd_sys_content_t html dosyaları için bağlam olarak. Şu anda aşağıdaki içeriğe sahip olan mevcut dizinimiz için bu güvenlik içeriğini ayarlamamız gerekiyor:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Bir dosyanın veya dizinin güvenlik içeriğini kontrol etmek için alternatif bir komut:

$ semanage fcontext -l | grep '/var/www'

Doğru güvenlik içeriğini bulduğumuzda içeriği değiştirmek için semanage'ı da kullanacağız. /home/dan/html içeriğini değiştirmek için aşağıdaki komutları çalıştırın:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

İçerik semanage kullanılarak değiştirildikten sonra, restorecon komutu dosyalar ve dizinler için varsayılan içeriği yükleyecektir. Web sunucumuz artık klasördeki dosyaları okuyabilecek /home/dan/htmlçünkü bu klasörün güvenlik içeriği şu şekilde değiştirildi: httpd_sys_content_t.

3. Yerel politikalar oluşturun

Yukarıdaki yöntemlerin işinize yaramadığı ve denetim.log'da hatalar (avc/denial) aldığınız durumlar olabilir. Bu durumda yerel bir politika oluşturmanız gerekir. Yukarıda açıklandığı gibi, denetim2why'yi kullanarak tüm hataları bulabilirsiniz.

Hataları çözmek için yerel bir politika oluşturabilirsiniz. Örneğin httpd (Apache) veya smbd (samba) ile ilgili bir hata alırız, hataları yakalar ve onlar için bir politika oluştururuz:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

öyle http_policy и smb_policy oluşturduğumuz yerel politikaların adlarıdır. Şimdi oluşturduğumuz bu local politikaları mevcut SELinux politikasına yüklememiz gerekiyor. Bu şöyle yapılabilir:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Yerel politikalarımız indirildi ve artık denetim.log'da herhangi bir avc veya denail almamalıyız.

Bu benim SELinux'u anlamanıza yardımcı olma girişimimdi. Umarım bu makaleyi okuduktan sonra SELinux'ta kendinizi daha rahat hissedersiniz.

Kaynak: habr.com

Yorum ekle