Huskeseddel for systemadministratorer om SELinux: 42 svar på vigtige spørgsmål

Oversættelsen er specielt udarbejdet til studerende på kurset «Linux Administrator».

Huskeseddel for systemadministratorer om SELinux: 42 svar på vigtige spørgsmål

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

„En vigtig sandhed er, at tingene ikke altid er, hvad de ser ud til at være, er velkendt...“

―Douglas Adams, Hitchhiker's Guide to the Galaxy

Sikkerhed. Forbedring af pålidelighed. Overensstemmelse. Politik. De fire Apokalypsens Ryttere for systemadministratorer. Ud over vores daglige opgaver — overvågning, backup, implementering, konfiguration, opdatering osv. — er vi også ansvarlige for sikkerheden af vores systemer. Selv de systemer, hvor en tredjepartsudbyder anbefaler os at deaktivere den forbedrede sikkerhed. Det minder om arbejdet Ethan Hunt fra 'Mission: Impossible'.

Når de står over for dette dilemma, vælger nogle systemadministratorer at tage den blå pille, fordi de tror, de aldrig vil finde 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 'Hitchhiker's Guide to the Galaxy', her er 42 svar på vigtige spørgsmål om styring og brug SELinux i dine systemer.

1. SELinux er et system til tvungen adgangskontrol, hvilket betyder, at hver proces har en label. Hver fil, mappe og systemobjekt har også labels. Politikker styrer adgangen mellem mærkede processer og objekter. Kernen sikrer overholdelse af disse regler.

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

3. Den korrekte labelformat bruger:rolle:type:niveau (valgfrit).

4. Formålet med at sikre multi-level sikkerhed (Multi-Level Security — MLS) er at styre processer (domæner) baseret på sikkerhedsniveauet for de data, de skal bruge. For eksempel kan en hemmelig proces ikke læse overhemmelige data.

5. At sikre multi-category sikkerhed (Multi-Category Security — MCS) beskytter lignende processer fra hinanden (f.eks. virtuelle maskiner, OpenShift-mekanismer, SELinux-sandkasser, containere osv.).

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

  • autorelabel=1 → tvinger systemet til at køre relabeling
  • selinux=0 → kernen indlæser ikke SELinux-infrastrukturen
  • enforcing=0 → opstart i permissive-tilstand

7. Hvis du skal ommærke hele systemet:

# touch /.autorelabel
#reboot

Hvis systemmærkningen indeholder mange fejl, kan det være nødvendigt at starte i permissive tilstand for at sikre, at ommærkningen gennemføres korrekt.

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

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

10. Tjek status for SELinux: # sestatus

11. Konfigurationsfil: /etc/selinux/config

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

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

Processen, der kører i konteksten httpd_t, kan interagere med objektet mærket httpd_something_t.

13. Mange kommandoer tager argumentet -Z for at se, oprette og ændre konteksten:

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

Kontekster bliver anvendt, når filer oprettes baseret på konteksten af deres overordnede mappe (med nogle undtagelser). RPM kan indstille kontekster både under installation.

14. Der er fire hovedårsager til SELinux-fejl, som er beskrevet nærmere i punkterne 15-21 nedenfor:

  • Mærkningsproblemer
  • På grund af noget, SELinux skal vide
  • Fejl i SELinux-politikken/applikationen
  • Dine oplysninger kan være kompromitteret

15. Mærkningsproblem: hvis dine filer er /srv/myweb forkert mærket, kan adgangen være nægtet. Her er nogle måder at rette dette på:

  • Hvis du kender mærket:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Hvis du kender en fil med et ækvivalent mærke:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Ved at genskabe konteksten (for begge tilfælde):
    # restorecon -vR /srv/myweb

16. Mærkningsproblem: hvis du flytter en fil i stedet for at kopiere den, vil filen bevare sin oprindelige kontekst. For at løse dette problem:

  • Ændr konteksts command med mærket:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Ændr konteksts command med mærkehenvisningen:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Genskab konteksten (for begge tilfælde): # restorecon -vR /var/www/html/

17. Hvis SELinux skal vide, at HTTPD lytter på port 8585, informér SELinux:

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

18. SELinux skal vide logiske værdier, der tillader at ændre dele af SELinux-politikken i drift uden kendskab til at overskrive SELinux-politikken. For eksempel, hvis du vil have httpd til at sende e-mails, skal du skrive: # setsebool -P httpd_can_sendmail 1

19. SELinux skal vide logiske værdier til at aktivere/deaktivere SELinux-indstillinger:

  • For at se alle logiske værdier: # getsebool -a
  • For at se beskrivelsen af hver enkelt: # semanage boolean -l
  • For at indstille en logisk værdi: # setsebool [_boolean_] [1|0]
  • For permanent indstilling, tilføj -P. For eksempel: # setsebool httpd_enable_ftp_server 1 -P

20. Politikker/applikationer for SELinux kan indeholde fejl, herunder:

  • Usædvanlige kodeveje
  • Konfigurationer
  • Omledning af stdout
  • Lækager af filbeskrivere
  • Udførelig hukommelse
  • Dårligt byggede biblioteker

Åbn supportbilletter (send ikke en rapport til Bugzilla; der er ingen SLA i Bugzilla).

21. Dine oplysninger kan være kompromitteret, hvis du har begrænsede domæner, der forsøger at:

  • Indlæse kerne moduler
  • Deaktivere enforced tilstand for SELinux
  • Skrive til etc_t/shadow_t
  • Ændre iptables regler

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

# yum -y install setroubleshoot setroubleshoot-server

Genstart eller genstart auditd efter installationen.

23. Brug

journalctl

for at vise en liste over alle logs relateret til setroubleshoot:

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

24. Brug journalctl for at vise en liste over alle logs relateret til en bestemt SELinux etiket. For eksempel:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Når der opstår en SELinux-fejl, brug loggen setroubleshoot som giver flere mulige løsninger.
For eksempel fra journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux forhindrer httpd i at få adgang til filen /var/www/html/index.html. For den komplette besked, kør: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux forhindrer httpd i at få adgang til filen /var/www/html/index.html.

***** Plugin restorecon (99.5% sikkerhed) foreslår ************************

Hvis du vil rette etiketten,
/var/www/html/index.htmls standardetiket skal være httpd_syscontent_t.
Så kan du restorecon.
Gør
# /sbin/restorecon -v /var/www/html/index.html

26. Logning: SELinux skriver information mange steder:

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

27. Logning: søg efter SELinux-fejl i auditloggen:

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

28. For at finde SELinux Access Vector Cache (AVC) beskeder for en bestemt tjeneste:

# ausearch -m avc -c httpd

29. Utility audit2allow indsamler information fra logs over forbudte operationer og genererer derefter tilladelsesregler for politikken for SELinux. For eksempel:

  • For at skabe en læsbar beskrivelse af årsagen til afvist adgang: # audit2allow -w -a
  • For at se en regel for tvangsbrug af typer, der tillader forbudt adgang: # audit2allow -a
  • For at oprette et brugerdefineret modul: # audit2allow -a -M mypolicy
  • Mulighed -M opretter en fil til tvangsbrug af type (.te) med det angivne navn og kompilerer reglen til en politikpakke (.pp): mypolicy.pp mypolicy.te
  • For at installere det brugerdefinerede modul: # semodule -i mypolicy.pp

30. For at konfigurere en enkelt proces (domæne) til at køre i permissive tilstand: # semanage permissive -a httpd_t

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

32. For at deaktivere alle permissive domæner: # semodule -d permissivedomains

33. Aktivering af MLS-politik i SELinux: # yum install selinux-policy-mls
i 10c/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Sørg for, at SELinux kører i permissive tilstand: # setenforce 0
Brug scriptet fixfiles, for at sikre, at filerne bliver ommærket ved næste genstart:

# fixfiles -F onboot # reboot

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

Ved brug af kommandoen useradd, match a new user with an existing SELinux user (in this case, staff_u).

35. To view the mapping between SELinux and Linux users: # semanage login -l

36. Define a specific range for the user: # semanage login --modify --range s2:c100 john

37. To fix the label in the user's home directory (if necessary): # chcon -R -l s2:c100 /home/john

38. To view current categories: # chcat -L

39. To change categories or start creating your own, modify the file as follows:

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

40. To run a command or script in a specific file, role, and user context:

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

  • -t file context
  • -r role context
  • -u user context

41. Containers operating with disabled SELinux:

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

42. If you need to give the container full access to the system:

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

And now you already know the answer. So please: don’t panic and enable SELinux.

Links:

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster