Snabbreferens för systemadministratörer om SELinux: 42 svar pÄ viktiga frÄgor

ÖversĂ€ttningen av artikeln Ă€r sĂ€rskilt utarbetad för studenter i kursen «Linuxadministratör».

Snabbreferens för systemadministratörer om SELinux: 42 svar pÄ viktiga frÄgor

HÀr fÄr du svar pÄ viktiga frÄgor om livet, universum och allt annat relaterat till Linux med förbÀttrad sÀkerhet.

«En viktig sanning Ă€r att saker och ting inte alltid Ă€r som de verkar, det Ă€r allmĂ€nt kĂ€nt »

―Douglas Adams, RymdresenĂ€rens guide

SĂ€kerhet. Ökad tillförlitlighet. Efterlevnad. Policy. Fyra apokalyptiska ryttare för systemadministratören. Utöver vĂ„ra dagliga uppgifter – övervakning, backup, implementering, konfigurering, uppdatering och sĂ„ vidare – ansvarar vi ocksĂ„ för sĂ€kerheten i vĂ„ra system. Även för de system dĂ€r en tredje part rekommenderar oss att stĂ€nga av förbĂ€ttrad sĂ€kerhet. Det Ă€r som att arbeta Ethan Hunt frĂ„n «Mission: Impossible».

Möter denna dilemma vÀljer vissa systemadministratörer att ta den blÄ tabletten, för de tror att de aldrig kommer att fÄ veta svaret pÄ livets stora frÄga, universum och allt annat. Och, som vi alla vet, Àr svaret 42.

I anda av «RymdresenÀrens guide» presenteras hÀr 42 svar pÄ viktiga frÄgor om hantering och anvÀndning SELinux i dina system.

1. SELinux Àr ett system för tvingande Ätkomstkontroll, vilket innebÀr att varje process har en etikett (label). Varje fil, katalog och systemobjekt har ocksÄ etiketter. Regelverk övervakar Ätkomster mellan mÀrkta processer och objekt. KÀrnan sÀkerstÀller efterlevnad av dessa regler.

2. De tvĂ„ viktigaste koncepten Ă€r: MĂ€rkning — mĂ€rkning (filer, processer, portar etc.) och Typkontroll (som isolerar processer frĂ„n varandra baserat pĂ„ typer).

3. Den rÀtta etikettformatet anvÀndare:roll:typ:nivÄ (valfritt).

4. MĂ„let med att tillhandahĂ„lla fler nivĂ„er av sĂ€kerhet (Multi-Level Security — MLS) Ă€r att hantera processer (domĂ€ner) baserat pĂ„ sĂ€kerhetsnivĂ„n av de data som de ska anvĂ€nda. Till exempel fĂ„r en hemlig process inte lĂ€sa överhemliga data.

5. Att tillhandahĂ„lla mĂ„ngkategorisk sĂ€kerhet (Multi-Category Security — MCS) skyddar liknande processer frĂ„n varandra (till exempel virtuella maskiner, OpenShift-mekanismer, SELinux-sandlĂ„dor, containrar etc.).

6. KÀrninstÀllningar för att Àndra SELinux-lÀgen vid uppstart:

  • autorelabel=1 → fĂ„r systemet att köra ommĂ€rkning
  • selinux=0 → kĂ€rnan laddar inte infrastruktur för SELinux
  • enforcing=0 → laddar i permissive-lĂ€ge

7. Om du behöver ommÀrka hela systemet:

# touch /.autorelabel
#reboot

Om systemets mÀrkning innehÄller mÄnga fel kan det vara nödvÀndigt att starta i permissiv lÀge för att ommÀrkningen ska lyckas.

8. För att kontrollera om SELinux Àr aktiverat: # getenforce

9. För att tillfÀlligt aktivera/avaktivera SELinux: # setenforce [1|0]

10. Kontrollera status för SELinux: # sestatus

11. Konfigurationsfil: /etc/selinux/config

12. Hur fungerar SELinux? HÀr Àr ett exempel pÄ mÀrkning för webbservern Apache:

  • BinĂ€rt vĂ€rde: /usr/sbin/httpd→httpd_exec_t
  • Konfigurationskatalog: /etc/httpd→httpd_config_t
  • Loggfiler katalog: /var/log/httpd → httpd_log_t
  • InnehĂ„llskatalog: /var/www/html → httpd_sys_content_t
  • Startskript: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Process: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Portar: 80/tcp, 443/tcp → httpd_t, http_port_t

Processen som körs i kontext httpd_t, kan interagera med objekt med mÀrkning httpd_something_t.

13. MÄnga kommandon accepterar argumentet -Z för att visa, skapa och Àndra kontext:

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

Kontexter sÀtts nÀr filer skapas baserat pÄ kontexten för deras överordnade katalog (med vissa undantag). RPM kan stÀlla in kontexter bÄde vid installation.

14. Det finns fyra huvudsakliga orsaker till SELinux-fel, som beskrivs mer utförligt i punkterna 15-21 nedan:

  • MĂ€rkningsproblem
  • PĂ„ grund av nĂ„got som SELinux behöver veta
  • Fel i SELinux-policy/applikation
  • Din information kan vara kompromissad

15. MÀrkningsproblem: om dina filer i /srv/myweb Àr felaktigt mÀrkta kan Ätkomst nekas. HÀr Àr nÄgra sÀtt att ÄtgÀrda detta:

  • Om du kĂ€nner till mĂ€rkningen:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Om du kĂ€nner till en fil med motsvarande mĂ€rkning:
    # semanage fcontext -a -e /srv/myweb /var/www
  • ÅterstĂ€ll kontexten (för bĂ„da fallen):
    # restorecon -vR /srv/myweb

16. MÀrkningsproblem: om du flyttar en fil istÀllet för att kopiera den kommer filen att behÄlla sin ursprungliga kontext. För att ÄtgÀrda detta:

  • Ändra kontextkommandot till mĂ€rkning:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Ändra kontextkommandot till mĂ€rkning av lĂ€nk:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • ÅterstĂ€ll kontexten (för bĂ„da fallen): # restorecon -vR /var/www/html/

17. Om SELinux behöver veta, att HTTPD lyssnar pÄ port 8585, informera SELinux:

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

18. SELinux behöver veta logiska vÀrden som gör det möjligt att Àndra delar av SELinux-policyn under körning utan att behöva kÀnna till ompolicering av SELinux. Till exempel, om du vill att httpd ska skicka e-post, skriv: # setsebool -P httpd_can_sendmail 1

19. SELinux behöver veta logiska vÀrden för att aktivera/avaktivera SELinux-instÀllningar:

  • För att se alla logiska vĂ€rden: # getsebool -a
  • För att se beskrivningen av varje: # semanage boolean -l
  • För att stĂ€lla in ett logiskt vĂ€rde: # setsebool [_boolean_] [1|0]
  • För permanent installation, lĂ€gg till -PJuniper (MX/QFX/ACX) # setsebool httpd_enable_ftp_server 1 -P

20. SELinux-policyer/applikationer kan innehÄlla fel, inklusive:

  • Ovanliga kodvĂ€gar
  • Konfigurationer
  • Omdirigera stdout
  • FilhandtaglĂ€ckor
  • Exekverbart minne
  • DĂ„ligt konstruerade bibliotek

Öppna biljetter (skicka inte rapporten till Bugzilla; det finns ingen SLA i Bugzilla).

21. Din information kan vara kompromissad, om du har begrÀnsade domÀner som försöker:

  • Ladda kĂ€rnmoduler
  • StĂ€nga av enforced-lĂ€get för SELinux
  • Skriva till etc_t/shadow_t
  • Ändra iptables-regler

22. SELinux-verktyg för att utveckla policymoduler:

# yum -y install setroubleshoot setroubleshoot-server

Starta om eller starta om auditd efter installation.

23. AnvÀnd

journalctl

för att visa en lista över alla loggar relaterade till setroubleshoot:

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

24. AnvÀnd journalctl för att visa en lista över alla loggar relaterade till en specifik SELinux-tagg. Till exempel:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Vid ett SELinux-fel, anvÀnd loggen setroubleshoot med flera möjliga lösningar.
Till exempel frÄn journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux hindrar httpd frÄn att fÄ getattr-Ätkomst pÄ filen /var/www/html/index.html. För komplett meddelande kör: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux hindrar httpd frÄn att fÄ getattr-Ätkomst pÄ filen /var/www/html/index.html.

***** Plugin restorecon (99.5 % sÀkerhet) föreslÄr ************************

Om du vill fixa etiketten,
/var/www/html/index.html:s standardetikett bör vara httpd_syscontent_t.
DÄ kan du anvÀnda restorecon.
Kör
# /sbin/restorecon -v /var/www/html/index.html

26. Loggning: SELinux registrerar information pÄ mÄnga stÀllen:

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

27. Loggning: sök efter SELinux-fel i auditloggen:

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

28. För att hitta meddelanden frÄn SELinux Access Vector Cache (AVC) för en viss tjÀnst:

# ausearch -m avc -c httpd

29. Verktyg audit2allow samlar information frÄn loggar av nekade operationer och genererar sedan SELinux policyregel. Till exempel:

  • För att skapa en lĂ€sbar beskrivning av varför Ă„tkomsten nekades: # audit2allow -w -a
  • För att visa en regel för tvingande typ som tillĂ„ter nekad Ă„tkomst: # audit2allow -a
  • För att skapa en anvĂ€ndarmodul: # audit2allow -a -M mypolicy
  • Alternativ -M skapar en fil för tvingande tillĂ€mpning av typ (.te) med angivet namn och kompilerar regeln till en policypaket (.pp): mypolicy.pp mypolicy.te
  • För att installera en anvĂ€ndarmodul: # semodule -i mypolicy.pp

30. För att konfigurera enskilda processer (domÀner) att arbeta i permissive-lÀge: # semanage permissive -a httpd_t

31. Om du inte lÀngre vill att domÀnen ska vara permissive: # semanage permissive -d httpd_t

32. För att stÀnga av alla permissive domÀner: # semodule -d permissivedomains

33. Aktivera MLS-policy för SELinux: # yum install selinux-policy-mls
i /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Se till att SELinux körs i permissive-lÀge: # setenforce 0
AnvÀnd skriptet fixfiles, för att sÀkerstÀlla att filer kommer att ommÀrkas vid nÀsta omstart:

# fixfiles -F onboot # reboot

34. Skapa en anvÀndare med en viss MLS-intervall: # useradd -Z staff_u john

Genom att anvÀnda kommandot useradd, koppla den nya anvÀndaren till en befintlig SELinux-anvÀndare (i detta fall, staff_u).

35. För att se matchningen mellan SELinux-anvÀndare och Linux: # semanage login -l

36. Definiera ett specifikt intervall för anvÀndaren: # semanage login --modify --range s2:c100 john

37. För att korrigera etiketten i anvÀndarens hemmakatalog (om nödvÀndigt): # chcon -R -l s2:c100 /home/john

38. För att se aktuella kategorier: # chcat -L

39. För att Àndra kategorier eller börja skapa egna, Àndra filen enligt följande:

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

40. För att köra ett kommando eller skript i en viss fil, roll och anvÀndarkontext:

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

  • -t filens kontext
  • -r rollens kontext
  • -u anvĂ€ndarens kontext

41. Containrar som körs med inaktiverad SELinux:

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

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


42. Om du behöver ge containern fullstÀndig Ätkomst till systemet:

  • Podman: # podman run --privileged 

  • Docker: # docker run --privileged 


Och nu vet du redan svaret. DÀrför, vÀnligen: panikera inte och aktivera SELinux.

LĂ€nkar:

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster