Sistem yöneticileri için SELinux yardımcı sayfası: Önemli sorulara 42 yanıt

Makalenin çevirisi ders öğrencilerine özel olarak hazırlanmıştır. "Linux Yöneticisi".

Sistem yöneticileri için SELinux yardımcı sayfası: Önemli sorulara 42 yanıt

Burada yaşam, evren ve Linux'taki her şey hakkındaki önemli soruların yanıtlarını geliştirilmiş güvenlikle alacaksınız.

“Her şeyin her zaman göründüğü gibi olmadığı önemli gerçek, herkesin bildiği bir gerçektir…”

-Douglas Adams, Bir Otostopçunun Galaksi Rehberi

Emniyet. Artan güvenilirlik. Yazışma. Politika. Mahşerin Dört Atlısı sistem yöneticisi. Günlük görevlerimizin (izleme, yedekleme, uygulama, yapılandırma, güncelleme vb.) yanı sıra sistemlerimizin güvenliğinden de sorumluyuz. Üçüncü taraf sağlayıcının gelişmiş güvenliği devre dışı bırakmamızı önerdiği sistemler bile. İş gibi hissettiriyor Ethan Avı "Görev: İmkansız"dan.

Bu ikilemle karşı karşıya kalan bazı sistem yöneticileri, Mavi hapÇünkü hayatın, evrenin ve diğer şeylerin büyük sorusunun cevabını asla bilemeyeceklerini düşünüyorlar. Ve hepimizin bildiği gibi bu cevap 42'dir.

Otostopçunun Galaksi Rehberi'nin ruhuna uygun olarak, kontrol ve kullanıma ilişkin önemli soruların 42 cevabını burada bulabilirsiniz. SELinux sistemlerinizde.

1. SELinux zorunlu erişim kontrol sistemidir, yani her işlemin bir etiketi vardır. Her dosya, dizin ve sistem nesnesinin de etiketleri vardır. İlke kuralları, etiketli işlemler ve nesneler arasındaki erişimi denetler. Çekirdek bu kuralları uygular.

2. En önemli iki kavram şunlardır: Etiketleme — işaretler (dosyalar, işlemler, bağlantı noktaları vb.) ve Tip yaptırımı (işlemleri türlere göre birbirinden ayıran).

3. Doğru etiket formatı user:role:type:level (isteğe bağlı).

4. Çok seviyeli güvenlik sağlamanın amacı (Çok Düzeyli Güvenlik - MLS), kullanacakları verilerin güvenlik düzeyine göre süreçleri (domainleri) yönetmektir. Örneğin, gizli bir süreç çok gizli verileri okuyamaz.

5. Çok kategorili güvenliğin sağlanması (Çok Kategorili Güvenlik - MCS) benzer işlemleri birbirinden korur (örneğin, sanal makineler, OpenShift motorları, SELinux sanal alanları, konteynerler vb.).

6. Önyükleme sırasında SELinux modlarını değiştirmek için çekirdek seçenekleri:

  • autorelabel=1 → sistemin yeniden etiketlemeyi çalıştırmasına neden olur
  • selinux=0 → çekirdek SELinux altyapısını yüklemiyor
  • enforcing=0 → izin verilen modda yükleme

7. Sistemin tamamını yeniden etiketlemeniz gerekiyorsa:

# touch /.autorelabel
#reboot

Sistem işaretlemesi çok sayıda hata içeriyorsa, açıklamanın başarılı olması için izin verilen modda önyükleme yapmanız gerekebilir.

8. SELinux'un etkin olup olmadığını kontrol etmek için: # getenforce

9. SELinux'u geçici olarak etkinleştirmek/devre dışı bırakmak için: # setenforce [1|0]

10 SELinux durumunu kontrol etme: # sestatus

11 Yapılandırma dosyası: /etc/selinux/config

12 SELinux nasıl çalışır? Apache web sunucusu için örnek bir işaretleme:

  • İkili gösterim: /usr/sbin/httpd→httpd_exec_t
  • Yapılandırma dizini: /etc/httpd→httpd_config_t
  • Günlük dosyası dizini: /var/log/httpd → httpd_log_t
  • İçerik dizini: /var/www/html → httpd_sys_content_t
  • Komut dosyasını başlat: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • süreci: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Limanlar: 80/tcp, 443/tcp → httpd_t, http_port_t

Bağlamda çalışan süreç httpd_t, etiketli bir nesneyle etkileşime girebilir httpd_something_t.

13 Birçok komut bir argümanı kabul eder -Z bağlamı görüntülemek, oluşturmak ve değiştirmek için:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

Bağlamlar, dosyalar üst dizinlerinin bağlamına göre (bazı istisnalar dışında) oluşturulduğunda oluşturulur. RPM'ler kurulum sırasındaki gibi bağlamlar oluşturabilir.

14 SELinux hatalarının dört ana nedeni vardır ve bunlar aşağıda 15-21. maddelerde daha ayrıntılı olarak açıklanmaktadır:

  • etiketleme sorunları
  • SELinux'un bilmesi gereken bir şey yüzünden
  • SELinux politikasında/uygulamasında hata
  • Bilgileriniz tehlikeye girebilir

15 Etiketleme sorunu: dosyalarınız varsa /srv/myweb yanlış işaretlenirse erişim reddedilebilir. Bunu düzeltmenin bazı yolları şunlardır:

  • Etiketi biliyorsanız:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Eşdeğer işaretlere sahip bir dosya biliyorsanız:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Bağlamı geri yükleme (her iki durum için):
    # restorecon -vR /srv/myweb

16 Etiketleme sorunu: dosyayı kopyalamak yerine taşırsanız dosya orijinal içeriğini korur. Bu sorunu düzeltmek için:

  • Bağlam komutunu şu etiketle değiştirin:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Bağlam komutunu bağlantı etiketiyle değiştirin:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Bağlamı geri yükleyin (her iki durumda da): # restorecon -vR /var/www/html/

17 Eğer Bilmeniz gereken SELinuxHTTPD'nin 8585 numaralı bağlantı noktasını dinlediğini SELinux'a söyleyin:

# semanage port -a -t http_port_t -p tcp 8585

18 Bilmeniz gereken SELinux SELinux politikasının bazı bölümlerinin, SELinux politikasının üzerine yazıldığı bilgisi olmadan çalışma zamanında değiştirilmesine izin veren Boolean değerleri. Örneğin httpd'nin e-posta göndermesini istiyorsanız şunu girin: # setsebool -P httpd_can_sendmail 1

19 Bilmeniz gereken SELinux SELinux ayarlarını etkinleştirmek/devre dışı bırakmak için mantıksal değerler:

  • Tüm boole değerlerini görmek için: # getsebool -a
  • Her birinin açıklamasını görmek için: # semanage boolean -l
  • Bir boole değeri ayarlamak için: # setsebool [_boolean_] [1|0]
  • Kalıcı bir kurulum için şunu ekleyin: -P. Örneğin: # setsebool httpd_enable_ftp_server 1 -P

20 SELinux politikaları/uygulamaları aşağıdakiler dahil hatalar içerebilir:

  • Olağandışı kod yolları
  • konfigürasyonları
  • Stdout'u yönlendirme
  • Dosya tanımlayıcı sızıntıları
  • Çalıştırılabilir bellek
  • Kötü oluşturulmuş kütüphaneler

Biletleri açın (Bugzilla'ya rapor göndermeyin; Bugzilla'nın SLA'sı yoktur).

21 Bilgileriniz tehlikeye girebilirKısıtlanmış alan adlarınız varsa şunları yapmaya çalışıyorsanız:

  • Çekirdek modüllerini yükle
  • Zorunlu SELinux modunu devre dışı bırak
  • Şuraya yaz: etc_t/shadow_t
  • iptables kurallarını değiştirin

22 Politika modüllerini geliştirmeye yönelik SELinux araçları:

# yum -y install setroubleshoot setroubleshoot-server

Yeniden başlatın veya yeniden başlatın auditd yüklemeden sonra.

23 Kullanmak

journalctl

ilişkili tüm günlüklerin bir listesini görüntülemek için setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24 Kullanmak journalctl Belirli bir SELinux etiketiyle ilişkili tüm günlükleri listelemek için. Örneğin:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25 Bir SELinux hatası oluşursa günlüğü kullanın setroubleshoot birkaç olası çözüm sunuyor.
Örneğin, journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26 Günlüğe kaydetme: SELinux bilgileri birçok yere kaydeder:

  • / var / log / messages
  • /var/log/denetim/denetim.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27 Günlüğe kaydetme: denetim günlüğünde SELinux hatalarını arama:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28 Belirli bir hizmete ilişkin SELinux Erişim Vektör Önbelleği (AVC) mesajlarını bulmak için:

# ausearch -m avc -c httpd

29 Yarar audit2allow yasaklanmış işlemlerin günlüklerinden bilgi toplar ve ardından SELinux izin politikası kuralları oluşturur. Örneğin:

  • Erişimin neden reddedildiğine ilişkin insanlar tarafından okunabilir bir açıklama oluşturmak için: # audit2allow -w -a
  • Erişimin reddedilmesine izin veren bir tür uygulama kuralını görüntülemek için: # audit2allow -a
  • Özel bir modül oluşturmak için: # audit2allow -a -M mypolicy
  • Seçenek -M belirtilen adla bir tür uygulama dosyası (.te) oluşturur ve kuralı bir politika paketinde (.pp) derler: mypolicy.pp mypolicy.te
  • Özel bir modül yüklemek için: # semodule -i mypolicy.pp

30 İzin verilen modda çalışacak ayrı bir işlemi (etki alanı) yapılandırmak için: # semanage permissive -a httpd_t

31 Alanın artık izin verilen bir alan olmasını istemiyorsanız: # semanage permissive -d httpd_t

32 Tüm izin verilen etki alanlarını devre dışı bırakmak için: # semodule -d permissivedomains

33 MLS SELinux politikasını etkinleştirme: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

SELinux'un izin verilen modda çalıştığından emin olun: # setenforce 0
Bir komut dosyası kullanın fixfilesdosyaların bir sonraki yeniden başlatmada yeniden etiketlendiğinden emin olmak için:

# fixfiles -F onboot # reboot

34 Belirli bir MLS aralığına sahip bir kullanıcı oluşturun: # useradd -Z staff_u john

Komutu kullanma useradd, yeni kullanıcıyı mevcut bir SELinux kullanıcısıyla eşleştirin (bu durumda, staff_u).

35 SELinux ve Linux kullanıcıları arasındaki eşlemeyi görüntülemek için: # semanage login -l

36 Kullanıcı için belirli bir aralık tanımlayın: # semanage login --modify --range s2:c100 john

37 Kullanıcının ana dizin etiketini düzeltmek için (gerekirse): # chcon -R -l s2:c100 /home/john

38 Mevcut kategorileri görüntülemek için: # chcat -L

39 Kategorileri değiştirmek veya kendi kategorinizi oluşturmaya başlamak için dosyayı aşağıdaki gibi düzenleyin:

/etc/selinux/_<selinuxtype>_/setrans.conf

40 Belirli bir dosya, rol ve kullanıcı bağlamında bir komut veya betiği çalıştırmak için:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t dosya içeriği
  • -r rol bağlamı
  • -u kullanıcı bağlamı

41 SELinux devre dışıyken çalışan kapsayıcılar:

  • Podman: # podman run --security-opt label=disable …
  • Liman işçisi: # docker run --security-opt label=disable …

42 Container'a sisteme tam erişim izni vermeniz gerekiyorsa:

  • Podman: # podman run --privileged …
  • Liman işçisi: # docker run --privileged …

Ve artık cevabı zaten biliyorsun. O yüzden lütfen: paniğe kapılmayın ve SELinux'u etkinleştirin.

Bağlantılar:

Kaynak: habr.com

Yorum ekle