SELinux jukseark for systemadministratorer: 42 svar på viktige spørsmål

Oversettelsen av artikkelen ble utarbeidet spesielt for studentene på kurset "Linux-administrator".

SELinux jukseark for systemadministratorer: 42 svar på viktige spørsmål

Her vil du få svar på viktige spørsmål om livet, universet og alt i Linux med forbedret sikkerhet.

"Den viktige sannheten om at ting ikke alltid er som de ser ut er allmennkunnskap ..."

- Douglas Adams, Haikerens guide til galaksen

Sikkerhet. Økt pålitelighet. Korrespondanse. Politikk. Four Horsemen of the Apocalypse sysadmin. I tillegg til våre daglige oppgaver – overvåking, backup, implementering, konfigurering, oppdatering osv. – er vi også ansvarlige for sikkerheten til våre systemer. Selv de systemene der tredjepartsleverandøren anbefaler at vi deaktiverer forbedret sikkerhet. Det føles som jobb Ethan Hunt fra «Mission: Impossible».

Stilt overfor dette dilemmaet bestemmer noen systemadministratorer seg for å ta blå pille, fordi de tror de aldri vil vite svaret på det store spørsmålet om livet, universet og alt det der. Og som vi alle vet, er svaret 42.

I ånden til The Hitchhiker's Guide to the Galaxy, her er 42 svar på viktige spørsmål om kontroll og bruk. SELinux på systemene dine.

1. SELinux er et tvungen tilgangskontrollsystem, som betyr at hver prosess har en etikett. Hver fil, katalog og systemobjekt har også etiketter. Policyregler kontrollerer tilgang mellom merkede prosesser og objekter. Kjernen håndhever disse reglene.

2. De to viktigste konseptene er: Merking — merkinger (filer, prosesser, porter osv.) og Type håndhevelse (som isolerer prosesser fra hverandre basert på typer).

3. Riktig etikettformat user:role:type:level (valgfri).

4. Formålet med å tilby sikkerhet på flere nivåer (Multi-Level Security - MLS) er å administrere prosesser (domener) basert på sikkerhetsnivået til dataene de skal bruke. For eksempel kan ikke en hemmelig prosess lese topphemmelige data.

5. Sikre multi-kategori sikkerhet (Multi-Category Security - MCS) beskytter lignende prosesser fra hverandre (for eksempel virtuelle maskiner, OpenShift-motorer, SELinux-sandkasser, containere, etc.).

6. Kjernealternativer for å endre SELinux-modus ved oppstart:

  • autorelabel=1 → får systemet til å kjøre ommerking
  • selinux=0 → kjernen laster ikke inn SELinux-infrastrukturen
  • enforcing=0 → lasting i tillatelig modus

7. Hvis du trenger å ommerke hele systemet:

# touch /.autorelabel
#reboot

Hvis systemmerkingen inneholder et stort antall feil, må du kanskje starte opp i permissive modus for å lykkes.

8. For å sjekke om SELinux er aktivert: # getenforce

9. Slik aktiverer/deaktiverer du SELinux midlertidig: # setenforce [1|0]

10. Sjekker SELinux-status: # sestatus

11. Konfigurasjonsfil: /etc/selinux/config

12. Hvordan fungerer SELinux? Her er et eksempel på merking for Apache-nettserveren:

  • Binær representasjon: /usr/sbin/httpd→httpd_exec_t
  • Konfigurasjonskatalog: /etc/httpd→httpd_config_t
  • Loggfilkatalog: /var/log/httpd → httpd_log_t
  • Innholdskatalog: /var/www/html → httpd_sys_content_t
  • Startskript: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • prosessen: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Porter: 80/tcp, 443/tcp → httpd_t, http_port_t

Prosess som kjører i kontekst httpd_t, kan samhandle med et merket objekt httpd_something_t.

13. Mange kommandoer godtar et argument -Z for å se, skape og endre kontekst:

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

Kontekster etableres når filer opprettes basert på konteksten til deres overordnede katalog (med noen unntak). RPM-er kan etablere kontekster som under installasjon.

14. Det er fire hovedårsaker til SELinux-feil, som er beskrevet mer detaljert i punktene 15-21 nedenfor:

  • Merkeproblemer
  • På grunn av noe som SELinux trenger å vite
  • Feil i SELinux policy/applikasjon
  • Informasjonen din kan være kompromittert

15. Merkeproblem: hvis filene dine er i /srv/myweb er merket feil, kan tilgang nektes. Her er noen måter å fikse dette på:

  • Hvis du kjenner etiketten:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Hvis du kjenner en fil med tilsvarende markeringer:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Gjenopprette konteksten (for begge tilfeller):
    # restorecon -vR /srv/myweb

16. Merkeproblem: hvis du flytter filen i stedet for å kopiere den, vil filen beholde sin opprinnelige kontekst. Slik løser du dette problemet:

  • Endre kontekstkommandoen med etiketten:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Endre kontekstkommandoen med lenkeetiketten:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Gjenopprett konteksten (for begge tilfeller): # restorecon -vR /var/www/html/

17. Hvis SELinux du trenger å viteat HTTPD lytter på port 8585, fortell SELinux:

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

18. SELinux du trenger å vite Boolske verdier som gjør at deler av SELinux-policyen kan endres under kjøretid uten at kunnskap om SELinux-policyen blir overskrevet. Hvis du for eksempel vil at httpd skal sende e-post, skriv inn: # setsebool -P httpd_can_sendmail 1

19. SELinux du trenger å vite logiske verdier for å aktivere/deaktivere SELinux-innstillinger:

  • For å se alle boolske verdier: # getsebool -a
  • For å se en beskrivelse av hver: # semanage boolean -l
  • For å angi en boolsk verdi: # setsebool [_boolean_] [1|0]
  • For en permanent installasjon, legg til -P. For eksempel: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux retningslinjer/applikasjoner kan inneholde feil, inkludert:

  • Uvanlige kodebaner
  • Konfigurasjoner
  • Omdirigerer standard
  • Filbeskrivelsen lekker
  • Kjørbart minne
  • Dårlig bygde biblioteker

Åpne billetter (ikke send inn en rapport til Bugzilla; Bugzilla har ingen SLA).

21. Informasjonen din kan være kompromitterthvis du har begrensede domener som prøver å:

  • Last inn kjernemoduler
  • Deaktiver tvungen SELinux-modus
  • Skrive til etc_t/shadow_t
  • Endre iptables regler

22. SELinux-verktøy for å utvikle policymoduler:

# yum -y install setroubleshoot setroubleshoot-server

Start på nytt eller start på nytt auditd etter installasjon.

23. bruk

journalctl

for å vise en liste over alle logger knyttet til setroubleshoot:

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

24. bruk journalctl for å liste opp alle logger knyttet til en spesifikk SELinux-tag. For eksempel:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Hvis det oppstår en SELinux-feil, bruk loggen setroubleshoot tilbyr flere mulige løsninger.
For eksempel fra 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. Logging: SELinux registrerer informasjon mange steder:

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

27. Logging: søker etter SELinux-feil i revisjonsloggen:

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

28. Slik finner du SELinux Access Vector Cache (AVC)-meldinger for en bestemt tjeneste:

# ausearch -m avc -c httpd

29. Nytte audit2allow samler inn informasjon fra logger over forbudte operasjoner og genererer deretter SELinux tillatelsesregler. For eksempel:

  • For å lage en menneskelesbar beskrivelse av hvorfor tilgang nektes: # audit2allow -w -a
  • Slik viser du en typehåndhevelsesregel som tillater nektet tilgang: # audit2allow -a
  • Slik oppretter du en egendefinert modul: # audit2allow -a -M mypolicy
  • alternativ -M oppretter en type enforcement-fil (.te) med det angitte navnet og kompilerer regelen til en policypakke (.pp): mypolicy.pp mypolicy.te
  • Slik installerer du en tilpasset modul: # semodule -i mypolicy.pp

30. Slik konfigurerer du en egen prosess (domene) til å fungere i tillatelsesmodus: # semanage permissive -a httpd_t

31. Hvis du ikke lenger vil at domenet skal være tillatt: # semanage permissive -d httpd_t

32. Slik deaktiverer du alle tillatte domener: # semodule -d permissivedomains

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

SELINUX=permissive
SELINUXTYPE=mls

Sørg for at SELinux kjører i permissiv modus: # setenforce 0
Bruk et skript fixfilesfor å sikre at filene blir merket på nytt ved neste omstart:

# fixfiles -F onboot # reboot

34. Opprett en bruker med et spesifikt MLS-område: # useradd -Z staff_u john

Ved å bruke kommandoen useradd, tilordne den nye brukeren til en eksisterende SELinux-bruker (i dette tilfellet, staff_u).

35. For å se kartleggingen mellom SELinux- og Linux-brukere: # semanage login -l

36. Definer et spesifikt område for brukeren: # semanage login --modify --range s2:c100 john

37. For å korrigere brukerens hjemmekatalogetikett (om nødvendig): # chcon -R -l s2:c100 /home/john

38. For å se gjeldende kategorier: # chcat -L

39. For å endre kategorier eller begynne å lage din egen, rediger filen som følger:

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

40. Slik kjører du en kommando eller et skript i en bestemt fil, rolle og brukerkontekst:

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

  • -t filkontekst
  • -r rollekontekst
  • -u brukerkontekst

41. Beholdere som kjører med SELinux deaktivert:

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

42. Hvis du trenger å gi beholderen full tilgang til systemet:

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

Og nå vet du allerede svaret. Så vær så snill: ikke få panikk og aktiver SELinux.

referanser:

Kilde: www.habr.com

Legg til en kommentar