SELinux fuskblad för systemadministratörer: 42 svar på viktiga frågor

Översättningen av artikeln förbereddes speciellt för kursens studenter "Linux-administratör".

SELinux fuskblad för systemadministratörer: 42 svar på viktiga frågor

Här får du svar på viktiga frågor om livet, universum och allt i Linux med förbättrad säkerhet.

"Den viktiga sanningen att saker och ting inte alltid är som de verkar är allmänt känt..."

-Douglas Adams, Liftarens guide till galaxen

Säkerhet. Ökad tillförlitlighet. Korrespondens. Politik. Four Horsemen of the Apocalypse sysadmin. Utöver våra dagliga uppgifter - övervakning, backup, implementering, konfigurering, uppdatering etc. - ansvarar vi även för säkerheten i våra system. Även de system där tredjepartsleverantören rekommenderar att vi inaktiverar utökad säkerhet. Det känns som jobb Ethan Hunt från "Mission: Impossible."

Inför detta dilemma beslutar vissa systemadministratörer att ta blått piller, eftersom de tror att de aldrig kommer att veta svaret på den stora frågan om livet, universum och allt det där. Och som vi alla vet är svaret 42.

I andan av The Hitchhiker's Guide to the Galaxy, här är 42 svar på viktiga frågor om kontroll och användning. SELinux på dina system.

1. SELinux är ett påtvingat åtkomstkontrollsystem, vilket innebär att varje process har en etikett. Varje fil, katalog och systemobjekt har också etiketter. Policyregler styr åtkomst mellan taggade processer och objekt. Kärnan tillämpar dessa regler.

2. De två viktigaste begreppen är: märkning — märkningar (filer, processer, portar etc.) och Typ verkställighet (som isolerar processer från varandra baserat på typer).

3. Korrekt etikettformat user:role:type:level (frivillig).

4. Syftet med att tillhandahålla säkerhet på flera nivåer (Multi-Level Security - MLS) är att hantera processer (domäner) baserat på säkerhetsnivån för de data de kommer att använda. Till exempel kan en hemlig process inte läsa topphemlig data.

5. Säkerställa säkerhet i flera kategorier (Multi-Category Security - MCS) skyddar liknande processer från varandra (till exempel virtuella maskiner, OpenShift-motorer, SELinux-sandlådor, behållare, etc.).

6. Kärnalternativ 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 SELinux-infrastrukturen
  • enforcing=0 → laddar i tillåtande läge

7. Om du behöver märka om hela systemet:

# touch /.autorelabel
#reboot

Om systemmarkeringen innehåller ett stort antal fel kan du behöva starta i tillåtande läge för att anmärkningen ska lyckas.

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

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

10. Kontrollerar SELinux-status: # sestatus

11. Konfigurationsfil: /etc/selinux/config

12. Hur fungerar SELinux? Här är ett exempel på märkning för Apache-webbservern:

  • Binär representation: /usr/sbin/httpd→httpd_exec_t
  • Konfigurationskatalog: /etc/httpd→httpd_config_t
  • Loggfilkatalog: /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
  • processen: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Hamnar: 80/tcp, 443/tcp → httpd_t, http_port_t

Process som körs i sammanhang httpd_t, kan interagera med ett märkt objekt httpd_something_t.

13. Många kommandon accepterar ett argument -Z för att se, skapa och ändra sammanhang:

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

Kontexter etableras när filer skapas baserat på kontexten för deras överordnade katalog (med vissa undantag). RPM kan skapa sammanhang som under installationen.

14. Det finns fyra huvudorsaker till SELinux-fel, som beskrivs mer i detalj 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 äventyras

15. Märkningsproblem: om dina filer finns i /srv/myweb är felaktigt markerade kan åtkomst nekas. Här är några sätt att fixa detta:

  • Om du känner till etiketten:
    # 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 sammanhanget (för båda fallen):
    # restorecon -vR /srv/myweb

16. Märkningsproblem: om du flyttar filen istället för att kopiera den kommer filen att behålla sitt ursprungliga sammanhang. Så här åtgärdar du det här problemet:

  • Ändra kontextkommandot med etiketten:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Ändra kontextkommandot med länketiketten:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Återställ sammanhanget (för båda fallen): # restorecon -vR /var/www/html/

17. Om SELinux du behöver vetaatt HTTPD lyssnar på port 8585, berätta för SELinux:

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

18. SELinux du behöver veta Booleska värden som tillåter att delar av SELinux-policyn ändras under körning utan att kunskap om SELinux-policyn skrivs över. Om du till exempel vill att httpd ska skicka e-post anger du: # setsebool -P httpd_can_sendmail 1

19. SELinux du behöver veta logiska värden för att aktivera/inaktivera SELinux-inställningar:

  • Så här ser du alla booleska värden: # getsebool -a
  • För att se en beskrivning av var och en: # semanage boolean -l
  • Så här ställer du in ett booleskt värde: # setsebool [_boolean_] [1|0]
  • För en permanent installation, lägg till -P. Till exempel: # setsebool httpd_enable_ftp_server 1 -P

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

  • Ovanliga kodvägar
  • konfigurationer
  • Omdirigerar standard
  • Filbeskrivning läcker
  • Körbart minne
  • Dåligt byggda bibliotek

Öppna biljetter (skicka inte in en rapport till Bugzilla; Bugzilla har ingen SLA).

21. Din information kan äventyrasom du har begränsade domäner som försöker:

  • Ladda kärnmoduler
  • Inaktivera påtvingat SELinux-läge
  • 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 installationen.

23. användning

journalctl

för att visa en lista över alla loggar som är kopplade till setroubleshoot:

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

24. användning journalctl för att lista alla loggar som är associerade med en specifik SELinux-tagg. Till exempel:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Om ett SELinux-fel uppstår, använd loggen setroubleshoot erbjuder flera möjliga lösningar.
Till exempel från 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. 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öker efter SELinux-fel i granskningsloggen:

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

28. Så här hittar du SELinux Access Vector Cache (AVC)-meddelanden för en specifik tjänst:

# ausearch -m avc -c httpd

29. Verktyg audit2allow samlar in information från loggar över förbjudna operationer och genererar sedan SELinux tillståndsregler. Till exempel:

  • Så här skapar du en läsbar beskrivning av varför åtkomst nekas: # audit2allow -w -a
  • Så här visar du en regel för typtillämpning som tillåter nekad åtkomst: # audit2allow -a
  • Så här skapar du en anpassad modul: # audit2allow -a -M mypolicy
  • alternativ -M skapar en typtillämpningsfil (.te) med det angivna namnet och kompilerar regeln till ett policypaket (.pp): mypolicy.pp mypolicy.te
  • Så här installerar du en anpassad modul: # semodule -i mypolicy.pp

30. Så här konfigurerar du en separat process (domän) för att fungera i tillåtande läge: # semanage permissive -a httpd_t

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

32. Så här inaktiverar du alla tillåtna domäner: # semodule -d permissivedomains

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

SELINUX=permissive
SELINUXTYPE=mls

Se till att SELinux körs i tillåtande läge: # setenforce 0
Använd ett skript fixfilesför att säkerställa att filerna märks om vid nästa omstart:

# fixfiles -F onboot # reboot

34. Skapa en användare med ett specifikt MLS-intervall: # useradd -Z staff_u john

Använder kommandot useradd, mappa den nya användaren till en befintlig SELinux-användare (i det här fallet, staff_u).

35. För att se kartläggningen mellan SELinux- och Linux-användare: # semanage login -l

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

37. Så här korrigerar du användarens hemkatalogetikett (om nödvändigt): # chcon -R -l s2:c100 /home/john

38. Så här visar du aktuella kategorier: # chcat -L

39. För att ändra kategorier eller börja skapa din egen, redigera filen enligt följande:

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

40. Så här kör du ett kommando eller skript i en specifik fil, roll och användarkontext:

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

  • -t filkontext
  • -r rollsammanhang
  • -u användarkontext

41. Behållare som körs med SELinux inaktiverat:

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

42. Om du behöver ge behållaren full åtkomst till systemet:

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

Och nu vet du redan svaret. Så snälla: få inte panik och aktivera SELinux.

Länkar:

Källa: will.com

Lägg en kommentar