SELinux snydeark til systemadministratorer: 42 svar på vigtige spørgsmål

Oversættelsen af ​​artiklen er udarbejdet specifikt til kursets studerende "Linux-administrator".

SELinux snydeark til systemadministratorer: 42 svar på vigtige spørgsmål

Her får du svar på vigtige spørgsmål om livet, universet og alt i Linux med forbedret sikkerhed.

"Den vigtige sandhed, at tingene ikke altid er, som de ser ud til, er almindelig viden..."

- Douglas Adams, The Hitchhiker's Guide to the Galaxy

Sikkerhed. Øget pålidelighed. Korrespondance. Politik. Fire Horsemen of the Apocalypse sysadmin. Udover vores daglige opgaver - overvågning, backup, implementering, konfiguration, opdatering osv. - er vi også ansvarlige for sikkerheden af ​​vores systemer. Selv de systemer, hvor tredjepartsudbyderen anbefaler, at vi deaktiverer forbedret sikkerhed. Det føles som arbejde Ethan Hunt fra "Mission: Impossible".

Stillet over for dette dilemma beslutter nogle systemadministratorer at tage det blå pille, fordi de tror, ​​de aldrig vil kende svaret på det store spørgsmål om livet, universet og alt det der. Og som vi alle ved, er svaret 42.

I ånden af ​​The Hitchhiker's Guide to the Galaxy er her 42 svar på vigtige spørgsmål om kontrol og brug. SELinux på dine systemer.

1. SELinux er et tvungen adgangskontrolsystem, hvilket betyder, at hver proces har en etiket. Hver fil, mappe og systemobjekt har også etiketter. Politikregler styrer adgangen mellem taggede processer og objekter. Kernen håndhæver disse regler.

2. De to vigtigste begreber er: Mærkning — mærkninger (filer, processer, havne osv.) og Type håndhævelse (som isolerer processer fra hinanden baseret på typer).

3. Korrekt etiketformat user:role:type:level (valgfri).

4. Formålet med at levere sikkerhed på flere niveauer (Multi-Level Security - MLS) er at styre processer (domæner) baseret på sikkerhedsniveauet for de data, de vil bruge. For eksempel kan en hemmelig proces ikke læse tophemmelige data.

5. Sikring af multi-kategori sikkerhed (Multi-Category Security - MCS) beskytter lignende processer mod hinanden (for eksempel virtuelle maskiner, OpenShift-motorer, SELinux-sandkasser, containere osv.).

6. Kernelindstillinger til at ændre SELinux-tilstande ved opstart:

  • autorelabel=1 → får systemet til at køre ommærkning
  • selinux=0 → kernen indlæser ikke SELinux-infrastrukturen
  • enforcing=0 → indlæsning i tilladelig tilstand

7. Hvis du har brug for at ommærke hele systemet:

# touch /.autorelabel
#reboot

Hvis systemmærkningen indeholder et stort antal fejl, skal du muligvis starte i tilladelig tilstand for at bemærkning skal lykkes.

8. For at kontrollere, om SELinux er aktiveret: # getenforce

9. For midlertidigt at aktivere/deaktivere SELinux: # setenforce [1|0]

10. Kontrollerer SELinux-status: # sestatus

11. Konfigurationsfil: /etc/selinux/config

12. Hvordan virker SELinux? Her er et eksempel på mærkning for Apache-webserveren:

  • Binær repræsentation: /usr/sbin/httpd→httpd_exec_t
  • Konfigurationsmappe: /etc/httpd→httpd_config_t
  • Logfilmappe: /var/log/httpd → httpd_log_t
  • Indholdsmappe: /var/www/html → httpd_sys_content_t
  • Start script: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • proces: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Havne: 80/tcp, 443/tcp → httpd_t, http_port_t

Proces kører i sammenhæng httpd_t, kan interagere med et mærket objekt httpd_something_t.

13. Mange kommandoer accepterer et argument -Z at se, skabe og ændre kontekst:

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

Kontekster etableres, når filer oprettes baseret på konteksten af ​​deres overordnede mappe (med nogle undtagelser). RPM'er kan etablere sammenhænge som under installationen.

14. Der er fire hovedårsager til SELinux-fejl, som er beskrevet mere detaljeret i punkt 15-21 nedenfor:

  • Mærkningsproblemer
  • På grund af noget, som SELinux har brug for at vide
  • Fejl i SELinux politik/applikation
  • Dine oplysninger kan blive kompromitteret

15. Mærkningsproblem: hvis dine filer er i /srv/myweb er markeret forkert, kan adgang nægtes. Her er nogle måder at løse dette på:

  • Hvis du kender etiketten:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Hvis du kender en fil med tilsvarende markeringer:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Gendannelse af konteksten (i begge tilfælde):
    # restorecon -vR /srv/myweb

16. Mærkningsproblem: hvis du flytter filen i stedet for at kopiere den, bevarer filen sin oprindelige kontekst. Sådan løser du dette problem:

  • Skift kontekstkommandoen med etiketten:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Skift kontekstkommandoen med linketiketten:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Gendan konteksten (i begge tilfælde): # restorecon -vR /var/www/html/

17. Hvis SELinux du har brug for at kendeat HTTPD lytter på port 8585, fortæl SELinux:

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

18. SELinux du har brug for at kende Booleske værdier, der tillader dele af SELinux-politikken at blive ændret under kørsel, uden at kendskab til SELinux-politikken overskrives. For eksempel, hvis du vil have httpd til at sende e-mail, skal du indtaste: # setsebool -P httpd_can_sendmail 1

19. SELinux du har brug for at kende logiske værdier for at aktivere/deaktivere SELinux-indstillinger:

  • For at se alle booleske værdier: # getsebool -a
  • For at se en beskrivelse af hver: # semanage boolean -l
  • Sådan indstilles en boolesk værdi: # setsebool [_boolean_] [1|0]
  • For en permanent installation, tilføj -P. For eksempel: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux politikker/applikationer kan indeholde fejl, herunder:

  • Usædvanlige kodestier
  • konfigurationer
  • Omdirigerer stdout
  • Filbeskrivelsen lækker
  • Eksekverbar hukommelse
  • Dårligt byggede biblioteker

Åbne billetter (indsend ikke en rapport til Bugzilla; Bugzilla har ingen SLA).

21. Dine oplysninger kan blive kompromitterethvis du har begrænsede domæner, der forsøger at:

  • Indlæs kernemoduler
  • Deaktiver tvungen SELinux-tilstand
  • Skrive til etc_t/shadow_t
  • Skift iptables regler

22. SELinux værktøjer til udvikling af politikmoduler:

# yum -y install setroubleshoot setroubleshoot-server

Genstart eller genstart auditd efter installation.

23. brug

journalctl

for at vise en liste over alle logfiler tilknyttet setroubleshoot:

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

24. brug journalctl for at liste alle logfiler forbundet med et specifikt SELinux-tag. For eksempel:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Hvis der opstår en SELinux-fejl, skal du bruge loggen setroubleshoot tilbyder 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. Logning: SELinux registrerer information mange steder:

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

27. Logning: søger efter SELinux-fejl i revisionsloggen:

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

28. Sådan finder du SELinux Access Vector Cache (AVC)-meddelelser for en bestemt tjeneste:

# ausearch -m avc -c httpd

29. Hjælpeprogram audit2allow indsamler oplysninger fra logfiler over forbudte operationer og genererer derefter SELinux-tilladelsespolitikregler. For eksempel:

  • Sådan oprettes en menneskelæselig beskrivelse af, hvorfor adgang nægtes: # audit2allow -w -a
  • Sådan får du vist en typehåndhævelsesregel, der tillader nægtet adgang: # audit2allow -a
  • Sådan opretter du et brugerdefineret modul: # audit2allow -a -M mypolicy
  • valgmulighed -M opretter en type håndhævelsesfil (.te) med det angivne navn og kompilerer reglen til en politikpakke (.pp): mypolicy.pp mypolicy.te
  • Sådan installeres et brugerdefineret modul: # semodule -i mypolicy.pp

30. Sådan konfigurerer du en separat proces (domæne) til at fungere i tilladelig tilstand: # semanage permissive -a httpd_t

31. Hvis du ikke længere ønsker, at domænet skal være tilladt: # semanage permissive -d httpd_t

32. Sådan deaktiverer du alle tilladelige domæner: # semodule -d permissivedomains

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

SELINUX=permissive
SELINUXTYPE=mls

Sørg for, at SELinux kører i tilladelig tilstand: # setenforce 0
Brug et script fixfilesfor at sikre, at filerne ommærkes ved næste genstart:

# fixfiles -F onboot # reboot

34. Opret en bruger med et specifikt MLS-område: # useradd -Z staff_u john

Brug af kommandoen useradd, kortlæg den nye bruger til en eksisterende SELinux-bruger (i dette tilfælde, staff_u).

35. For at se kortlægningen mellem SELinux- og Linux-brugere: # semanage login -l

36. Definer et specifikt interval for brugeren: # semanage login --modify --range s2:c100 john

37. Sådan rettes brugerens hjemmemappe-etiket (hvis nødvendigt): # chcon -R -l s2:c100 /home/john

38. For at se aktuelle kategorier: # chcat -L

39. For at ændre kategorier eller begynde at oprette din egen, rediger filen som følger:

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

40. Sådan kører du en kommando eller et script i en bestemt fil, rolle og brugerkontekst:

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

  • -t fil kontekst
  • -r rolle kontekst
  • -u brugerkontekst

41. Containere, der kører med SELinux deaktiveret:

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

42. Hvis du har brug for at give containeren fuld adgang til systemet:

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

Og nu kender du allerede svaret. Så venligst: Gå ikke i panik og aktiver SELinux.

referencer:

Kilde: www.habr.com

Tilføj en kommentar