SELinux-huijauslehti järjestelmänvalvojille: 42 vastausta tärkeisiin kysymyksiin

Artikkelin käännös on tehty erityisesti kurssin opiskelijoille "Linux-järjestelmänvalvoja".

SELinux-huijauslehti järjestelmänvalvojille: 42 vastausta tärkeisiin kysymyksiin

Täältä saat vastauksia tärkeisiin kysymyksiin elämästä, maailmankaikkeudesta ja kaikesta Linuxissa parannetulla suojauksella.

"Tärkeä totuus, että asiat eivät aina ole sitä miltä ne näyttävät, on yleisesti tiedossa..."

-Douglas Adams, Linnunradan käsikirja liftareille

Turvallisuus. Lisääntynyt luotettavuus. Kirjeenvaihto. Käytäntö. Four Horsemen of the Apocalypse sysadmin. Päivittäisten tehtäviemme - valvonta, varmuuskopiointi, toteutus, konfigurointi, päivitys jne. - lisäksi vastaamme myös järjestelmien turvallisuudesta. Jopa ne järjestelmät, joissa kolmannen osapuolen palveluntarjoaja suosittelee tehostetun suojauksen poistamista käytöstä. Se tuntuu työltä Ethan Hunt kohdasta "Mission: Impossible".

Tämän ongelman edessä jotkut järjestelmänvalvojat päättävät ryhtyä toimiin sininen pilleri, koska he luulevat, että he eivät koskaan tiedä vastausta elämän, maailmankaikkeuden ja kaiken muun suureen kysymykseen. Ja kuten me kaikki tiedämme, vastaus on 42.

Lippujen oppaan galaksiin hengessä tässä on 42 vastausta tärkeisiin hallintaa ja käyttöä koskeviin kysymyksiin. SELinux järjestelmissäsi.

1. SELinux on pakotettu kulunvalvontajärjestelmä, mikä tarkoittaa, että jokaisella prosessilla on etiketti. Jokaisella tiedostolla, hakemistolla ja järjestelmäobjektilla on myös tunnisteet. Käytäntösäännöt hallitsevat pääsyä merkittyjen prosessien ja objektien välillä. Ydin valvoo näitä sääntöjä.

2. Kaksi tärkeintä käsitettä ovat: Pakkausmerkinnät — merkinnät (tiedostot, prosessit, portit jne.) ja Tyyppivalvonta (joka eristää prosessit toisistaan ​​tyyppien perusteella).

3. Oikea etiketin muoto user:role:type:level (valinnainen).

4. Tarkoituksena tarjota monitasoinen suojaus (Monitasoinen suojaus - MLS) on hallita prosesseja (verkkotunnuksia) käyttämiensä tietojen turvallisuustason perusteella. Esimerkiksi salainen prosessi ei voi lukea huippusalaisia ​​tietoja.

5. Useiden kategorioiden turvallisuuden varmistaminen (Multi-Category Security - MCS) suojaa samanlaisia ​​prosesseja toisiltaan (esimerkiksi virtuaalikoneet, OpenShift-moottorit, SELinux-hiekkalaatikot, säiliöt jne.).

6. Ytimen asetukset SELinux-tilojen vaihtamiseen käynnistyksen yhteydessä:

  • autorelabel=1 → saa järjestelmän suorittamaan uudelleenmerkinnän
  • selinux=0 → ydin ei lataa SELinux-infrastruktuuria
  • enforcing=0 → lataus sallivassa tilassa

7. Jos sinun on nimettävä koko järjestelmä uudelleen:

# touch /.autorelabel
#reboot

Jos järjestelmämerkintä sisältää suuren määrän virheitä, sinun on ehkä käynnistettävä sallivassa tilassa, jotta huomautus onnistuu.

8. Tarkistaaksesi, onko SELinux käytössä: # getenforce

9. SELinuxin tilapäinen käyttöönotto/poistaminen käytöstä: # setenforce [1|0]

10. SELinux-tilan tarkistaminen: # sestatus

11. Asetustiedosto: /etc/selinux/config

12. Miten SELinux toimii? Tässä on esimerkki Apache-verkkopalvelimen merkinnästä:

  • Binääriesitys: /usr/sbin/httpd→httpd_exec_t
  • Asetushakemisto: /etc/httpd→httpd_config_t
  • Lokitiedostohakemisto: /var/log/httpd → httpd_log_t
  • Sisältöhakemisto: /var/www/html → httpd_sys_content_t
  • Käynnistä skripti: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • prosessi: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Portit: 80/tcp, 443/tcp → httpd_t, http_port_t

Prosessi käynnissä kontekstissa httpd_t, voi olla vuorovaikutuksessa merkityn kohteen kanssa httpd_something_t.

13. Monet komennot hyväksyvät argumentin -Z tarkastella, luoda ja muuttaa kontekstia:

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

Kontekstit määritetään, kun tiedostot luodaan niiden päähakemiston kontekstin perusteella (joitakin poikkeuksia lukuun ottamatta). RPM:t voivat luoda konteksteja kuten asennuksen aikana.

14. SELinux-virheille on neljä pääsyytä, jotka kuvataan tarkemmin alla olevissa kohdissa 15-21:

  • Merkintäongelmat
  • Johtuen siitä, mikä SELinuxin on tiedettävä
  • Virhe SELinux-käytännössä/sovelluksessa
  • Tietosi voivat vaarantua

15. Merkintäongelma: jos tiedostosi ovat /srv/myweb on merkitty väärin, pääsy voidaan evätä. Tässä on joitain tapoja korjata tämä:

  • Jos tiedät etiketin:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Jos tiedät tiedoston, jossa on vastaavat merkinnät:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Kontekstin palauttaminen (molemmissa tapauksissa):
    # restorecon -vR /srv/myweb

16. Merkintäongelma: jos siirrät tiedoston kopioimisen sijaan, tiedosto säilyttää alkuperäisen kontekstinsa. Voit korjata tämän ongelman seuraavasti:

  • Muuta kontekstikomentoa tunnisteella:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Muuta kontekstikomentoa linkin otsikolla:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Palauta konteksti (molemmissa tapauksissa): # restorecon -vR /var/www/html/

17. Jos SELinux sinun on tiedettäväettä HTTPD kuuntelee porttia 8585, kerro SELinuxille:

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

18. SELinux sinun on tiedettävä Boolen arvot, jotka mahdollistavat SELinux-käytännön osien muuttamisen ajon aikana tietämättä, että SELinux-käytäntö korvataan. Jos esimerkiksi haluat, että httpd lähettää sähköpostia, kirjoita: # setsebool -P httpd_can_sendmail 1

19. SELinux sinun on tiedettävä loogiset arvot SELinux-asetusten käyttöönottoon/poistamiseen:

  • Voit nähdä kaikki loogiset arvot seuraavasti: # getsebool -a
  • Näet kunkin kuvauksen seuraavasti: # semanage boolean -l
  • Boolen arvon asettaminen: # setsebool [_boolean_] [1|0]
  • Pysyvää asennusta varten lisää -P. Esimerkiksi: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux-käytännöt/sovellukset voivat sisältää virheitä, kuten:

  • Epätavalliset koodipolut
  • Kokoonpanot
  • Uudelleenohjataan stdout
  • Tiedostokuvaaja vuotaa
  • Suoritettava muisti
  • Huonosti rakennetut kirjastot

Avaa liput (älä lähetä raporttia Bugzillalle; Bugzilalla ei ole SLA:ta).

21. Tietosi voivat vaarantuajos sinulla on rajoitettuja verkkotunnuksia, jotka yrittävät:

  • Lataa ydinmoduulit
  • Poista pakotettu SELinux-tila käytöstä
  • Kirjoittaa etc_t/shadow_t
  • Muuta iptables-sääntöjä

22. SELinux-työkalut käytäntömoduulien kehittämiseen:

# yum -y install setroubleshoot setroubleshoot-server

Käynnistä tai käynnistä uudelleen auditd asennuksen jälkeen.

23. käyttö

journalctl

näyttääksesi luettelon kaikista lokeista, jotka liittyvät setroubleshoot:

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

24. käyttö journalctl luetellaksesi kaikki tiettyyn SELinux-tunnisteeseen liittyvät lokit. Esimerkiksi:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Jos tapahtuu SELinux-virhe, käytä lokia setroubleshoot tarjoaa useita mahdollisia ratkaisuja.
Esimerkiksi alkaen 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. Kirjaaminen: SELinux tallentaa tietoja moniin paikkoihin:

  • / Var / log / viestejä
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Lokikirjaus: SELinux-virheiden etsiminen tarkastuslokista:

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

28. Tietyn palvelun SELinux Access Vector Cache (AVC) -viestien etsiminen:

# ausearch -m avc -c httpd

29. Apuohjelma audit2allow kerää tietoja kiellettyjen toimintojen lokeista ja luo sitten SELinuxin käyttöoikeuskäytäntösäännöt. Esimerkiksi:

  • Voit luoda ihmisen luettavan kuvauksen siitä, miksi käyttöoikeus evätään: # audit2allow -w -a
  • Nähdäksesi käyttökiellon sallivan tyyppivalvontasäännön: # audit2allow -a
  • Mukautetun moduulin luominen: # audit2allow -a -M mypolicy
  • Vaihtoehto -M luo tyypin valvontatiedoston (.te) määritetyllä nimellä ja kokoaa säännön käytäntöpaketiksi (.pp): mypolicy.pp mypolicy.te
  • Mukautetun moduulin asentaminen: # semodule -i mypolicy.pp

30. Erillisen prosessin (verkkotunnuksen) määrittäminen toimimaan sallivassa tilassa: # semanage permissive -a httpd_t

31. Jos et enää halua verkkotunnuksen olevan sallittu: # semanage permissive -d httpd_t

32. Voit poistaa kaikki sallitut verkkotunnukset käytöstä seuraavasti: # semodule -d permissivedomains

33. MLS SELinux -käytännön käyttöönotto: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Varmista, että SELinux toimii sallivassa tilassa: # setenforce 0
Käytä skriptiä fixfilesvarmistaaksesi, että tiedostot nimetään uudelleen seuraavan uudelleenkäynnistyksen yhteydessä:

# fixfiles -F onboot # reboot

34. Luo käyttäjä tietyllä MLS-alueella: # useradd -Z staff_u john

Käyttämällä komentoa useradd, yhdistä uusi käyttäjä olemassa olevaan SELinux-käyttäjään (tässä tapauksessa staff_u).

35. Voit tarkastella SELinux- ja Linux-käyttäjien yhdistämistä seuraavasti: # semanage login -l

36. Määritä käyttäjälle tietty alue: # semanage login --modify --range s2:c100 john

37. Voit korjata käyttäjän kotihakemistotunnisteen (tarvittaessa): # chcon -R -l s2:c100 /home/john

38. Voit tarkastella nykyisiä luokkia seuraavasti: # chcat -L

39. Jos haluat muuttaa luokkia tai aloittaa oman luomisen, muokkaa tiedostoa seuraavasti:

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

40. Komennon tai komentosarjan suorittaminen tietyssä tiedostossa, roolissa ja käyttäjäkontekstissa:

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

  • -t tiedoston konteksti
  • -r roolikonteksti
  • -u käyttäjän konteksti

41. Säilöt, jotka toimivat SELinuxin ollessa pois käytöstä:

  • Podman: # podman run --security-opt label=disable …
  • Satamatyöläinen: # docker run --security-opt label=disable …

42. Jos sinun on annettava säiliölle täysi pääsy järjestelmään:

  • Podman: # podman run --privileged …
  • Satamatyöläinen: # docker run --privileged …

Ja nyt tiedät jo vastauksen. Joten ole hyvä: älä panikoi ja ota SELinux käyttöön.

viitteet:

Lähde: will.com

Lisää kommentti