Tizim ma'murlari uchun SELinux cheat varag'i: muhim savollarga 42 ta javob

Maqolaning tarjimasi kurs talabalari uchun maxsus tayyorlangan "Linux administratori".

Tizim ma'murlari uchun SELinux cheat varag'i: muhim savollarga 42 ta javob

Bu yerda siz hayot, koinot va Linuxdagi barcha narsalar haqidagi muhim savollarga yaxshilangan xavfsizlik bilan javob olasiz.

"Narsalar har doim ham ko'rinadigandek emasligi haqidagi muhim haqiqat hammaga ma'lum ..."

- Duglas Adams, Avtostopchining Galaktika bo'yicha qo'llanmasi

Xavfsizlik. Ishonchlilikning oshishi. Xat yozish. Siyosat. Apokalipsisning to'rt otliqlari tizimi boshqaruvchisi. Kundalik vazifalarimizdan tashqari - monitoring, zaxiralash, amalga oshirish, sozlash, yangilash va boshqalar - biz tizimlarimiz xavfsizligi uchun ham javobgarmiz. Hatto uchinchi tomon provayderi kengaytirilgan xavfsizlikni o'chirishni tavsiya qiladigan tizimlar ham. Bu ish kabi Ethan Hunt "Missiya: imkonsiz" filmidan.

Ushbu dilemmaga duch kelgan ba'zi tizim ma'murlari buni qilishga qaror qilishadi ko'k tabletka, chunki ular hayot, koinot va shunga o'xshash katta savolga javobni hech qachon bilmaydi deb o'ylashadi. Va hammamiz bilganimizdek, bu javob 42.

Avtostopchining Galaktika boʻyicha qoʻllanmasi ruhida bu yerda nazorat va foydalanish boʻyicha muhim savollarga 42 ta javob berilgan. SELinux tizimlaringizda.

1. SELinux - bu majburiy kirishni boshqarish tizimi, ya'ni har bir jarayonning yorlig'i bor. Har bir fayl, katalog va tizim obyekti ham teglarga ega. Siyosat qoidalari teglangan jarayonlar va ob'ektlar o'rtasidagi kirishni nazorat qiladi. Yadro bu qoidalarga amal qiladi.

2. Ikkita eng muhim tushunchalar: Etiketleme — belgilar (fayllar, jarayonlar, portlar va boshqalar) va Amal qilish turi (turlarga qarab jarayonlarni bir-biridan ajratib turadi).

3. To'g'ri yorliq formati user:role:type:level (ixtiyoriy).

4. Ko'p darajali xavfsizlikni ta'minlashdan maqsad (Ko'p darajali xavfsizlik - MLS) jarayonlarni (domenlarni) ular foydalanadigan ma'lumotlarning xavfsizlik darajasiga qarab boshqarishdir. Masalan, maxfiy jarayon juda maxfiy ma'lumotlarni o'qiy olmaydi.

5. Ko'p toifali xavfsizlikni ta'minlash (Ko'p toifali xavfsizlik - MCS) o'xshash jarayonlarni bir-biridan himoya qiladi (masalan, virtual mashinalar, OpenShift dvigatellari, SELinux qum qutilari, konteynerlar va boshqalar).

6. Yuklashda SELinux rejimlarini o'zgartirish uchun yadro variantlari:

  • autorelabel=1 → tizimni qayta etiketlashni ishga tushirishga olib keladi
  • selinux=0 → yadro SELinux infratuzilmasini yuklamaydi
  • enforcing=0 → ruxsat beruvchi rejimda yuklash

7. Agar butun tizimni qayta belgilash kerak bo'lsa:

# touch /.autorelabel
#reboot

Tizim belgilashda koʻp sonli xatolar boʻlsa, qayd etish muvaffaqiyatli boʻlishi uchun ruxsat beruvchi rejimda yuklashingiz kerak boʻlishi mumkin.

8. SELinux yoqilganligini tekshirish uchun: # getenforce

9. SELinux-ni vaqtincha yoqish/o'chirish uchun: # setenforce [1|0]

10. SELinux holatini tekshirish: # sestatus

11. Konfiguratsiya fayli: /etc/selinux/config

12. SELinux qanday ishlaydi? Apache veb-serverini belgilash misoli:

  • Ikkilik vakillik: /usr/sbin/httpd→httpd_exec_t
  • Konfiguratsiya katalogi: /etc/httpd→httpd_config_t
  • Jurnal fayli katalogi: /var/log/httpd → httpd_log_t
  • Kontent katalogi: /var/www/html → httpd_sys_content_t
  • Skriptni ishga tushirish: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Jarayon: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Portlar: 80/tcp, 443/tcp → httpd_t, http_port_t

Kontekstda ishlayotgan jarayon httpd_t, belgilangan ob'ekt bilan o'zaro aloqada bo'lishi mumkin httpd_something_t.

13. Ko'pgina buyruqlar argumentni qabul qiladi -Z kontekstni ko'rish, yaratish va o'zgartirish uchun:

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

Kontekstlar fayllar asosiy katalog konteksti asosida yaratilganda (ba'zi istisnolardan tashqari) o'rnatiladi. RPMlar o'rnatish paytida bo'lgani kabi kontekstlarni o'rnatishi mumkin.

14. SELinux xatolarining to'rtta asosiy sababi bor, ular quyida 15-21 bandlarda batafsil tavsiflangan:

  • Belgilash muammolari
  • SELinux bilishi kerak bo'lgan narsa tufayli
  • SELinux siyosati/ilovasida xato
  • Sizning ma'lumotlaringiz buzilgan bo'lishi mumkin

15. Belgilash muammosi: agar sizning fayllaringiz bo'lsa /srv/myweb noto'g'ri belgilangan bo'lsa, kirish rad etilishi mumkin. Buni tuzatishning ba'zi usullari:

  • Agar siz yorliqni bilsangiz:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Agar siz ekvivalent belgilarga ega faylni bilsangiz:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Kontekstni tiklash (har ikkala holatda ham):
    # restorecon -vR /srv/myweb

16. Belgilash muammosi: agar siz uni nusxalash o'rniga faylni ko'chirsangiz, fayl asl kontekstini saqlab qoladi. Ushbu muammoni hal qilish uchun:

  • Yorliq bilan kontekst buyrug'ini o'zgartiring:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Kontekst buyrug'ini havola yorlig'i bilan o'zgartiring:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Kontekstni tiklang (har ikki holatda ham): # restorecon -vR /var/www/html/

17. agar Siz bilishingiz kerak SELinuxHTTPD 8585 portda tinglayotganini SELinuxga ayting:

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

18. Siz bilishingiz kerak SELinux SELinux siyosatining qismlarini ish vaqtida SELinux siyosati ustidan yozilmagan holda o'zgartirishga imkon beruvchi mantiqiy qiymatlar. Misol uchun, agar siz httpd elektron pochta xabarlarini yuborishni istasangiz, quyidagilarni kiriting: # setsebool -P httpd_can_sendmail 1

19. Siz bilishingiz kerak SELinux SELinux sozlamalarini yoqish/o'chirish uchun mantiqiy qiymatlar:

  • Barcha mantiqiy qiymatlarni ko'rish uchun: # getsebool -a
  • Har birining tavsifini ko'rish uchun: # semanage boolean -l
  • Boolean qiymatni o'rnatish uchun: # setsebool [_boolean_] [1|0]
  • Doimiy o'rnatish uchun qo'shing -P. Masalan: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux siyosatlari/ilovalari quyidagi xatolarni o'z ichiga olishi mumkin:

  • Noodatiy kod yo'llari
  • Konfiguratsiya
  • Stdout qayta yoʻnaltirilmoqda
  • Fayl identifikatori sizib chiqadi
  • Bajariladigan xotira
  • Yomon qurilgan kutubxonalar

Ochiq chiptalar (Bugzilla-ga hisobot topshirmang; Bugzilla-da SLA yo'q).

21. Sizning ma'lumotlaringiz buzilgan bo'lishi mumkinagar sizda cheklangan domenlar bo'lsa:

  • Yadro modullarini yuklash
  • Majburiy SELinux rejimini o'chiring
  • ga yozing etc_t/shadow_t
  • Iptables qoidalarini o'zgartiring

22. Siyosat modullarini ishlab chiqish uchun SELinux vositalari:

# yum -y install setroubleshoot setroubleshoot-server

Qayta ishga tushiring yoki qayta yoqing auditd o'rnatishdan keyin.

23. Foydalanish

journalctl

bilan bog'langan barcha jurnallar ro'yxatini ko'rsatish uchun setroubleshoot:

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

24. Foydalanish journalctl muayyan SELinux yorlig'i bilan bog'langan barcha jurnallarni ro'yxatga olish uchun. Masalan:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Agar SELinux xatosi yuzaga kelsa, jurnaldan foydalaning setroubleshoot bir nechta mumkin bo'lgan echimlarni taklif qiladi.
Masalan, dan 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. Jurnal: SELinux ko'p joylarda ma'lumotlarni yozib oladi:

  • / var / log / xabarlar
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Jurnal: audit jurnalida SELinux xatolarini qidirish:

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

28. Muayyan xizmat uchun SELinux Access vektor keshi (AVC) xabarlarini topish uchun:

# ausearch -m avc -c httpd

29. Qulaylik audit2allow taqiqlangan operatsiyalar jurnallaridan ma'lumotlarni to'playdi va keyin SELinux ruxsat siyosati qoidalarini yaratadi. Masalan:

  • Nima uchun kirish taqiqlanganligi haqida odam o'qiy oladigan tavsifni yaratish uchun: # audit2allow -w -a
  • Ruxsat etilgan ruxsatga ruxsat beruvchi turdagi ijro qoidasini ko‘rish uchun: # audit2allow -a
  • Maxsus modul yaratish uchun: # audit2allow -a -M mypolicy
  • Variant -M belgilangan nomga ega boʻlgan turdagi ijro faylini (.te) yaratadi va qoidani siyosat paketiga (.pp) kompilyatsiya qiladi: mypolicy.pp mypolicy.te
  • Maxsus modulni o'rnatish uchun: # semodule -i mypolicy.pp

30. Ruxsat beruvchi rejimda ishlash uchun alohida jarayonni (domenni) sozlash uchun: # semanage permissive -a httpd_t

31. Agar siz endi domenga ruxsat berishni xohlamasangiz: # semanage permissive -d httpd_t

32. Barcha ruxsat etilgan domenlarni o'chirish uchun: # semodule -d permissivedomains

33. MLS SELinux siyosatini yoqish: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

SELinux ruxsat beruvchi rejimda ishlayotganiga ishonch hosil qiling: # setenforce 0
Skriptdan foydalaning fixfilesKeyingi qayta yuklashda fayllar qayta etiketlanganligiga ishonch hosil qilish uchun:

# fixfiles -F onboot # reboot

34. Muayyan MLS diapazoniga ega foydalanuvchi yarating: # useradd -Z staff_u john

Buyruqdan foydalanish useradd, yangi foydalanuvchini mavjud SELinux foydalanuvchisi bilan taqqoslang (bu holda, staff_u).

35. SELinux va Linux foydalanuvchilari o'rtasidagi xaritani ko'rish uchun: # semanage login -l

36. Foydalanuvchi uchun ma'lum diapazonni belgilang: # semanage login --modify --range s2:c100 john

37. Foydalanuvchining uy katalogi yorlig'ini tuzatish uchun (agar kerak bo'lsa): # chcon -R -l s2:c100 /home/john

38. Joriy toifalarni ko'rish uchun: # chcat -L

39. Kategoriyalarni o'zgartirish yoki o'zingizni yaratishni boshlash uchun faylni quyidagi tarzda tahrirlang:

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

40. Muayyan fayl, rol va foydalanuvchi kontekstida buyruq yoki skriptni ishga tushirish uchun:

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

  • -t fayl konteksti
  • -r rol konteksti
  • -u foydalanuvchi konteksti

41. SELinux o'chirilgan holda ishlaydigan konteynerlar:

  • Podman: # podman run --security-opt label=disable …
  • Docker: # docker run --security-opt label=disable …

42. Agar siz konteynerga tizimga to'liq kirish huquqini berishingiz kerak bo'lsa:

  • Podman: # podman run --privileged …
  • Docker: # docker run --privileged …

Va endi siz javobni allaqachon bilasiz. Shuning uchun, iltimos: vahima qo'ymang va SELinux-ni yoqing.

Manbalar:

Manba: www.habr.com

a Izoh qo'shish