Süsteemiadministraatori õpik SELinuxi kohta: 42 vastust olulistele küsimustele

Artikli tõlge on ette valmistatud spetsiaalselt kursuse üliõpilastele „Linuxi administraator“.

Süsteemiadministraatori õpik SELinuxi kohta: 42 vastust olulistele küsimustele

Здесь вы получите ответы на важные вопросы о жизни, вселенной и всем таком в Linux с улучшенной безопасностью.

«Важная истина, что вещи не всегда являются тем, чем кажутся, общеизвестна…»

―Дуглас Адамс, Автостопом по Галактике

Безопасность. Повышение надежности. Соответствие. Политика. Четыре Всадника Апокалипсиса сисадмина. В дополнение к нашим ежедневным задачам — мониторингу, резервному копированию, внедрению, настройке, обновлению и т. д. — мы также отвечаем за безопасность наших систем. Даже тех систем, где сторонний провайдер рекомендует нам отключить усиленную безопасность. Это похоже на работу Этана Ханта из “Миссия невыполнима”.

Столкнувшись с этой дилеммой, некоторые системные администраторы решают взять голубую таблетку, потому что они думают, что никогда не узнают ответ на большой вопрос жизни, вселенной и всем таком. И, как мы все знаем, этот ответ 42.

В духе “Автостопом по галактике”, здесь приведены 42 ответа на важные вопросы об управлении и использовании SELinux в ваших системах.

1. SELinux on juurkontrolli haldamise süsteem, mis tähendab, et igal protsessil on silt (label). Igal failil, kataloogil ja süsteemiobjektil on samuti sildid. Poliitika reeglid reguleerivad juurdepääsu siltidega protsesside ja objektide vahel. Südamik tagab nende reeglite täitmise.

2. Kaks kõige olulisemat mõistet on: Labeling — sildistamine (failid, protsessid, pordid jne) ja Type enforcement (mis isoleerib protsessid omavahel tüüpide alusel).

3. Õige sildi formaat user:role:type:level (valikuline).

4. Mitme tasandi turvalisuse tagamise eesmärk (Multi-Level Security — MLS) on juhtida protsesse (domeene) andmete turvalisuse taseme alusel, mida nad kasutavad. Näiteks ei saa salajane protsess lugeda üliväärseid andmeid.

5. Mitmekategoorilise turvalisuse tagamine (Multi-Category Security — MCS) kaitseb sarnaseid protsesse üksteise eest (näiteks virtuaalmasinad, OpenShifti mehhanismid, SELinuxi liivakastid, konteinerid jne).

6. Kerniparameetrid SELinuxi režiimide muutmiseks käivitamisel:

  • autorelabel=1 → sunnib süsteemi käivitama ümber sildistamise
  • selinux=0 → kernel ei laadita SELinux infrastruktuuri
  • enforcing=0 → laadimine permissive režiimis

7. Kui peate kogu süsteemi ümber märgistama:

# touch /.autorelabel
#reboot

Kui süsteemi märgistamine sisaldab palju vigu, võib osutuda vajalikuks laadida permissive režiimis, et ümbermärgistamine õnnestuks.

8. SELinuxi sisselülitamise kontrollimiseks: # getenforce

9. SELinuxi ajutiseks sisselülitamiseks/väljalülitamiseks: # setenforce [1|0]

10. SELinuxi staatuse kontroll: # sestatus

11. Konfiguratsioonifail: /etc/selinux/config

12. Kuidas SELinux töötab? Siin on näide Apache veebiserveri märgistamisest:

  • Binaarne esitlus: /usr/sbin/httpd→httpd_exec_t
  • Konfiguratsioonikataloog: /etc/httpd→httpd_config_t
  • Logifailide kataloog: /var/log/httpd → httpd_log_t
  • Sisu kataloog: /var/www/html → httpd_sys_content_t
  • Käivitusskrift: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Protsess: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Pordid: 80/tcp, 443/tcp → httpd_t, http_port_t

Protsess, mis on käivitatud kontekstis httpd_t, võib suhelda objekti, millel on silt httpd_something_t.

13. Paljud käsud võtavad argumendi -Z konteksti vaatamiseks, loomiseks ja muutmiseks:

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

Kontekstid määratakse, kui failid luuakse nende vanemkatalooge konteksti põhjal (mõningatel eranditel). RPM-id võivad määrata kontekste ka installimise ajal.

14. SELinuxi vigade nelja peamise põhjuse kohta on rohkem teavet punktides 15-21 allpool:

  • Märgistamisprobleemid
  • Miks SELinux peaks teadma
  • Viga SELinux poliitikas/rakenduses
  • Teie teave võib olla ohus

15. Märgistamise probleem: kui teie failid on /srv/myweb vale märgistusega, võib juurdepääs olla keelatud. Siin on mõned viisid, kuidas seda parandada:

  • Kui teate sildi:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Kui teate faili vastava märgistusega:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Taastades konteksti (mõlemal juhul):
    # restorecon -vR /srv/myweb

16. Märgistamise probleem: kui te teisaldate faili, mitte ei kopeeri, siis fail säilitab oma algse konteksti. Probleemi parandamiseks:

  • Muuda konteksti käsklusega, millel on märk:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Muuda konteksti käsklusega, millel on viitemärk:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Taasta kontekst (mõlemal juhul): # restorecon -vR /var/www/html/

17. Kui SELinux peab teadma, et HTTPD kuulab porti 8585, teavita SELinuxit:

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

18. SELinux peab teadma loogilised väärtused, mis võimaldavad muuta SELinuxi poliitika osi jooksvalt ilma SELinuxi poliitika ümberkirjutamist teadmata. Näiteks, kui soovite, et httpd saadaks e-kirju, sisestage: # setsebool -P httpd_can_sendmail 1

19. SELinux peab teadma loogilised väärtused, mis lülitavad SELinuxi seadeid sisse/ välja:

  • Kõigi loogiliste väärtuste nägemiseks: # getsebool -a
  • Igaühe kirjelduse nägemiseks: # semanage boolean -l
  • Loogilise väärtuse seadmiseks: # setsebool [_boolean_] [1|0]
  • Püsivaks installimiseks lisage -P. Näiteks: # setsebool httpd_enable_ftp_server 1 -P

20. SELinuxi poliitikad/rakendused võivad sisaldada vigu, sealhulgas:

  • Ebatavalised kooditeed
  • Konfiguratsioonid
  • stdout-i edastamine
  • Faili descriptorite leke
  • Täidetav mälu
  • Halvasti koostatud raamatukogud

Avage piletid (ärge saatke aruannet Bugzilla'sse; Bugzilla's pole SLA-d).

21. Teie teave võib olla ohus, kui teil on piiratud domeenid, mis üritavad:

  • Kerneli mooduleid laadida
  • SELinux'i enforced režiimi keelata
  • Kirjutada etc_t/shadow_t
  • Muuda iptables reegleid

22. SELinuxi poliitikate moodulite arendamise tööriistad:

# yum -y install setroubleshoot setroubleshoot-server

Taaskäivitage või taaskäivitage auditd pärast installimist.

23. Kasutage

journalctl

kõikide logide loendi väljastamiseks, mis on seotud setroubleshoot:

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

24. Kasutage journalctl kõikide logide loendi väljastamiseks, mis on seotud konkreetse SELinuxi sildiga. Näiteks:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. SELinuxi veateate korral kasutage logi setroubleshoot ja pakutakse mitmeid võimalikke lahendusi.
Näiteks, journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux takistab httpd-l pääsemast failile /var/www/html/index.html. Täieliku sõnumi saamiseks käivitage: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux takistab httpd-l pääsemast failile /var/www/html/index.html.

***** Plugin restorecon (99,5 protsendi usaldusväärsusega) soovitab ************************

Kui soovite sildi parandada,
/var/www/html/index.html vaike silt peaks olema httpd_syscontent_t.
Siis saate kasutada restorecon-i.
Tehke
# /sbin/restorecon -v /var/www/html/index.html

26. Logimine: SELinux kirjutab teavet paljudesse kohtadesse:

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

27. Logimine: SELinuxi vigade otsimine auditi logis:

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

28. Kuidas leida SELinux Access Vector Cache (AVC) sõnumeid kindla teenuse jaoks:

# ausearch -m avc -c httpd

29. Tööriist audit2allow kogub teavet keelatud toimingute logidest ja genereerib seejärel SELinuxi õiguste poliitika reeglid. Näiteks:

  • Kuidas luua loetav kirjeldus juurdepääsuloo keeldumise põhjusest: # audit2allow -w -a
  • Kuidas vaadata tüübi sundrakendamise reeglit, mis lubab keelatud juurdepääsu: # audit2allow -a
  • Kuidas luua kasutaja moodul: # audit2allow -a -M mypolicy
  • Valik -M loob sundrakendamise tüübi faili (.te) antud nimega ja kompileerib reegli poliitika paketti (.pp): mypolicy.pp mypolicy.te
  • Kuidas installida kasutaja moodul: # semodule -i mypolicy.pp

30. Kuidas seadistada üksik protsess (domen) töötama lubava režiimiga: # semanage permissive -a httpd_t

31. Kui te ei soovi enam, et domeen oleks lubav: # semanage permissive -d httpd_t

32. Kuidas keelata kõik lubavad domeenid: # semodule -d permissivedomains

33. SELinuxi MLS poliitika aktiveerimine: # yum install selinux-policy-mls
failis /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Veenduge, et SELinux töötaks lubavas režiimis: # setenforce 0
Kasutage skripti fixfiles, et tagada failide ümbermarkeerimine järgmise taasalustamise ajal:

# fixfiles -F onboot # reboot

34. Looge kasutaja kindla MLS vahemikuga: # useradd -Z staff_u john

Kasutades käsku useradd, seadke uus kasutaja SELinuxi olemasoleva kasutajaga kokku (antud juhul, staff_u).

35. Selleks, et vaadata kasutajate SELinux ja Linuxi vastavust: # semanage login -l

36. Määrake kasutaja jaoks kindel vahemik: # semanage login --modify --range s2:c100 john

37. Kasutaja kodukatalooge sildi parandamiseks (vajadusel): # chcon -R -l s2:c100 /home/john

38. Käitumise vaatamiseks praeguseid kategooriaid: # chcat -L

39. Kategooriate muutmiseks või omade loomise alustamiseks muutke faili järgmiselt:

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

40. Käivitada käsu või skripti teatud failis, rolli ja kasutaja konteksti:

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

  • -t faili kontekst
  • -r rolli kontekst
  • -u kasutaja kontekst

41. Konteinerid, mis töötavad deaktiveeritud SELinuxiga:

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

42. Kui peate konteinerile andma täisüsteemi juurdepääsu:

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

Ja nüüd teate juba vastust. Seetõttu, palun: ärge paanitsege ja lubage SELinux.

Lingid:

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster