SELinuxi petuleht süsteemiadministraatoritele: 42 vastust olulistele küsimustele

Artikli tõlge koostati spetsiaalselt kursuse üliõpilastele "Linuxi administraator".

SELinuxi petuleht süsteemiadministraatoritele: 42 vastust olulistele küsimustele

Siit saate parema turvalisusega vastused olulistele küsimustele elu, universumi ja kõige kohta Linuxis.

"Oluline tõde, et asjad ei ole alati nii, nagu nad paistavad, on üldteada..."

-Douglas Adams, Hitchhiker's Guide to the Galaxy

Ohutus. Suurenenud töökindlus. Kirjavahetus. poliitika. Neli Apokalüpsise ratsanikku süsadmin. Lisaks igapäevastele ülesannetele – monitooring, varundamine, juurutamine, seadistamine, uuendamine jne – vastutame ka oma süsteemide turvalisuse eest. Isegi need süsteemid, kus kolmandast osapoolest teenusepakkuja soovitab täiustatud turvalisuse keelata. See tundub nagu töö Ethan Hunt filmist "Mission: Impossible".

Selle dilemma ees otsustavad mõned süsteemiadministraatorid selle ette võtta sinine pill, sest nad arvavad, et ei saa kunagi vastust suurele küsimusele elu, universumi ja kõige muu kohta. Ja nagu me kõik teame, on see vastus 42.

Siin on The Hitchhiker's Guide to the Galaxy vaimus 42 vastust olulistele küsimustele juhtimise ja kasutamise kohta. SELinux teie süsteemides.

1. SELinux on sunnitud juurdepääsu juhtimissüsteem, mis tähendab, et igal protsessil on silt. Igal failil, kataloogil ja süsteemiobjektil on ka sildid. Poliitikareeglid kontrollivad juurdepääsu märgistatud protsesside ja objektide vahel. Kernel jõustab need reeglid.

2. Kaks kõige olulisemat mõistet on järgmised: Sildistamine — märgised (failid, protsessid, pordid jne) ja Tüübi jõustamine (mis isoleerib protsessid üksteisest tüüpide alusel).

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

4. Mitmetasemelise turvalisuse tagamise eesmärk (Mitmetasandiline turvalisus – MLS) on hallata protsesse (domeene) nende poolt kasutatavate andmete turvalisuse taseme alusel. Näiteks ei saa salajane protsess lugeda ülisalajasti andmeid.

5. Mitme kategooria turvalisuse tagamine (Mitme kategooria turvalisus – MCS) kaitseb sarnaseid protsesse üksteise eest (näiteks virtuaalmasinad, OpenShift mootorid, SELinuxi liivakastid, konteinerid jne).

6. Kerneli valikud SELinuxi režiimide muutmiseks alglaadimisel:

  • autorelabel=1 → käivitab süsteemi ümbermärgistamise
  • selinux=0 → kernel ei laadi SELinuxi infrastruktuuri
  • enforcing=0 → laadimine lubavas režiimis

7. Kui teil on vaja kogu süsteem ümber sildistada:

# touch /.autorelabel
#reboot

Kui süsteemimärgistus sisaldab palju vigu, peate märkimise õnnestumiseks võib-olla käivitama lubava režiimi.

8. Kontrollimaks, kas SELinux on lubatud: # getenforce

9. SELinuxi ajutiseks lubamiseks/keelamiseks: # setenforce [1|0]

10. SELinuxi oleku kontrollimine: # sestatus

11. Konfiguratsioonifail: /etc/selinux/config

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

  • Binaarne esitus: /usr/sbin/httpd→httpd_exec_t
  • Konfiguratsioonikataloog: /etc/httpd→httpd_config_t
  • Logifailide kataloog: /var/log/httpd → httpd_log_t
  • Sisukataloog: /var/www/html → httpd_sys_content_t
  • Käivitage skript: /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 töötab kontekstis httpd_t, saab suhelda märgistatud objektiga httpd_something_t.

13. Paljud käsud aktsepteerivad argumenti -Z konteksti vaatamiseks, loomiseks ja muutmiseks:

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

Kontekstid luuakse siis, kui failid luuakse nende emakataloogi konteksti alusel (mõnede eranditega). RPM-id võivad luua kontekste nagu installimise ajal.

14. SELinuxi tõrgetel on neli peamist põhjust, mida kirjeldatakse üksikasjalikumalt allpool punktides 15-21:

  • Märgistamisega seotud probleemid
  • Millegi tõttu, mida SELinux peab teadma
  • Viga SELinuxi poliitikas/rakenduses
  • Teie teave võib olla ohus

15. Märgistamise probleem: kui teie failid on sees /srv/myweb on valesti märgitud, võidakse juurdepääs keelata. Siin on mõned viisid selle parandamiseks.

  • Kui teate silti:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Kui teate samaväärsete märgistega faili:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Konteksti taastamine (mõlemal juhul):
    # restorecon -vR /srv/myweb

16. Märgistamise probleem: kui faili kopeerimise asemel teisaldate, säilitab fail oma esialgse konteksti. Selle probleemi lahendamiseks tehke järgmist.

  • Muutke kontekstikäsku sildiga:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Muutke lingisildiga kontekstikäsku:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Taasta kontekst (mõlemal juhul): # restorecon -vR /var/www/html/

17. kui SELinux, mida peate teadmaet HTTPD kuulab porti 8585, öelge SELinuxile:

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

18. SELinux, mida peate teadma Tõeväärtused, mis võimaldavad SELinuxi poliitika osi muuta käitusajal ilma, et SELinuxi poliitika üle kirjutataks. Näiteks kui soovite, et httpd saadaks meili, sisestage: # setsebool -P httpd_can_sendmail 1

19. SELinux, mida peate teadma loogilised väärtused SELinuxi sätete lubamiseks/keelamiseks:

  • Kõigi tõeväärtuste vaatamiseks toimige järgmiselt. # getsebool -a
  • Iga kirjelduse vaatamiseks toimige järgmiselt. # semanage boolean -l
  • Tõeväärtuse määramiseks toimige järgmiselt. # setsebool [_boolean_] [1|0]
  • Püsipaigalduse jaoks lisage -P. Näiteks: # setsebool httpd_enable_ftp_server 1 -P

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

  • Ebatavalised kooditeed
  • Konfiguratsioonid
  • Stdouti ümbersuunamine
  • Faili deskriptor lekib
  • Käivitatav mälu
  • Halvasti ehitatud raamatukogud

Avatud piletid (ärge esitage Bugzillale aruannet; Bugzillal puudub SLA).

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

  • Laadige kerneli moodulid
  • Keela jõustatud SELinuxi režiim
  • Kirjuta etc_t/shadow_t
  • Muutke iptablesi reegleid

22. SELinuxi tööriistad poliitikamoodulite arendamiseks:

# yum -y install setroubleshoot setroubleshoot-server

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

23. Kasutage

journalctl

kõigi seotud logide loendi kuvamiseks setroubleshoot:

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

24. Kasutage journalctl et loetleda kõik konkreetse SELinuxi sildiga seotud logid. Näiteks:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Kui ilmneb SELinuxi tõrge, kasutage logi setroubleshoot pakkudes mitmeid võimalikke lahendusi.
Näiteks alates 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. Logimine: SELinux salvestab teavet paljudes kohtades:

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

27. Logimine: SELinuxi vigade otsimine auditilogist:

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

28. Konkreetse teenuse SELinux Access Vector Cache (AVC) sõnumite leidmiseks tehke järgmist.

# ausearch -m avc -c httpd

29. Utiliit audit2allow kogub teavet keelatud toimingute logidest ja genereerib seejärel SELinuxi loapoliitika reeglid. Näiteks:

  • Inimloetava kirjelduse loomiseks selle kohta, miks juurdepääs on keelatud, toimige järgmiselt. # audit2allow -w -a
  • Juurdepääsu keelamist lubava tüübi jõustamisreegli vaatamiseks tehke järgmist. # audit2allow -a
  • Kohandatud mooduli loomiseks tehke järgmist. # audit2allow -a -M mypolicy
  • Variant -M loob määratud nimega tüübi jõustamisfaili (.te) ja kompileerib reegli poliitikapaketiks (.pp): mypolicy.pp mypolicy.te
  • Kohandatud mooduli installimiseks tehke järgmist. # semodule -i mypolicy.pp

30. Eraldi protsessi (domeeni) konfigureerimiseks lubavas režiimis töötama: # semanage permissive -a httpd_t

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

32. Kõigi lubatud domeenide keelamiseks tehke järgmist. # semodule -d permissivedomains

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

SELINUX=permissive
SELINUXTYPE=mls

Veenduge, et SELinux töötaks lubavas režiimis: # setenforce 0
Kasutage skripti fixfilestagamaks, et failid järgmisel taaskäivitamisel ümber märgitakse:

# fixfiles -F onboot # reboot

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

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

35. SELinuxi ja Linuxi kasutajate vahelise kaardistamise vaatamiseks tehke järgmist. # semanage login -l

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

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

38. Praeguste kategooriate vaatamiseks: # chcat -L

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

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

40. Konkreetses failis, rollis ja kasutaja kontekstis käsu või skripti käitamiseks tehke järgmist.

# 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, kui SELinux on keelatud:

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

42. Kui teil on vaja anda konteinerile täielik juurdepääs süsteemile:

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

Ja nüüd sa juba tead vastust. Nii et palun: ärge sattuge paanikasse ja lubage SELinux.

Lingid:

Allikas: www.habr.com

Lisa kommentaar