SELinux spiekbriefje voor systeembeheerders: 42 antwoorden op belangrijke vragen

De vertaling van het artikel is speciaal gemaakt voor de studenten van de cursus "Linux-beheerder".

SELinux spiekbriefje voor systeembeheerders: 42 antwoorden op belangrijke vragen

Hier krijg je antwoorden op belangrijke vragen over het leven, het universum en alles in Linux met verbeterde beveiliging.

“De belangrijke waarheid dat de dingen niet altijd zijn wat ze lijken, is algemeen bekend...”

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

Veiligheid. Verhoogde betrouwbaarheid. Correspondentie. Beleid. Vier Ruiters van de Apocalyps sysadmin. Naast onze dagelijkse taken - monitoring, backup, implementatie, configuratie, updaten etc. - zijn wij ook verantwoordelijk voor de beveiliging van onze systemen. Zelfs die systemen waarbij de externe provider aanbeveelt om de verbeterde beveiliging uit te schakelen. Het voelt als werk Ethan Hunt uit ‘Missie: onmogelijk’.

Geconfronteerd met dit dilemma besluiten sommige systeembeheerders dit te doen blauwe pil, omdat ze denken dat ze nooit het antwoord zullen weten op de grote vraag van het leven, het universum en zo. En zoals we allemaal weten is dat antwoord 42.

In de geest van The Hitchhiker's Guide to the Galaxy vindt u hier 42 antwoorden op belangrijke vragen over bediening en gebruik. SELinux op uw systemen.

1. SELinux is een geforceerd toegangscontrolesysteem, wat betekent dat elk proces een label heeft. Elk bestand, elke map en elk systeemobject heeft ook labels. Beleidsregels regelen de toegang tussen getagde processen en objecten. De kernel handhaaft deze regels.

2. De twee belangrijkste concepten zijn: labeling — markeringen (bestanden, processen, poorten, enz.) en Typ handhaving (die processen van elkaar isoleert op basis van typen).

3. Correct etiketformaat user:role:type:level (optioneel).

4. Het doel van het bieden van beveiliging op meerdere niveaus (Beveiliging op meerdere niveaus - MLS) is om processen (domeinen) te beheren op basis van het beveiligingsniveau van de gegevens die ze zullen gebruiken. Een geheim proces kan bijvoorbeeld geen uiterst geheime gegevens lezen.

5. Garanderen van beveiliging in meerdere categorieën (Beveiliging in meerdere categorieën - MCS) beschermt vergelijkbare processen tegen elkaar (bijvoorbeeld virtuele machines, OpenShift-engines, SELinux-sandboxen, containers, enz.).

6. Kernelopties voor het veranderen van SELinux-modi tijdens het opstarten:

  • autorelabel=1 → zorgt ervoor dat het systeem het herlabelen uitvoert
  • selinux=0 → de kernel laadt de SELinux-infrastructuur niet
  • enforcing=0 → laden in permissieve modus

7. Als u het hele systeem opnieuw moet labelen:

# touch /.autorelabel
#reboot

Als de systeemmarkering een groot aantal fouten bevat, moet u mogelijk in de permissieve modus opstarten om de opmerking te laten slagen.

8. Om te controleren of SELinux is ingeschakeld: # getenforce

9. Om SELinux tijdelijk in/uit te schakelen: # setenforce [1|0]

10. SELinux-status controleren: # sestatus

11. Configuratiebestand: /etc/selinux/config

12. Hoe werkt SELinux? Hier is een voorbeeldmarkering voor de Apache-webserver:

  • Binaire representatie: /usr/sbin/httpd→httpd_exec_t
  • Configuratiemap: /etc/httpd→httpd_config_t
  • Directory met logbestanden: /var/log/httpd → httpd_log_t
  • Inhoudsmap: /var/www/html → httpd_sys_content_t
  • Startscript: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • proces: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Poorten: 80/tcp, 443/tcp → httpd_t, http_port_t

Proces dat in context wordt uitgevoerd httpd_t, kan communiceren met een gelabeld object httpd_something_t.

13. Veel opdrachten accepteren een argument -Z context bekijken, creëren en wijzigen:

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

Contexten worden tot stand gebracht wanneer bestanden worden gemaakt op basis van de context van hun bovenliggende map (met enkele uitzonderingen). RPM's kunnen contexten tot stand brengen zoals tijdens de installatie.

14. Er zijn vier hoofdoorzaken van SELinux-fouten, die in meer detail worden beschreven in de punten 15-21 hieronder:

  • Labeling problemen
  • Vanwege iets dat SELinux moet weten
  • Fout in SELinux beleid/applicatie
  • Uw gegevens kunnen in gevaar komen

15. Etikettering probleem: als uw bestanden aanwezig zijn /srv/myweb onjuist gemarkeerd zijn, kan de toegang worden geweigerd. Hier zijn enkele manieren om dit op te lossen:

  • Als u het etiket kent:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Als u een bestand met gelijkwaardige markeringen kent:
    # semanage fcontext -a -e /srv/myweb /var/www
  • De context herstellen (voor beide gevallen):
    # restorecon -vR /srv/myweb

16. Etiketteringsprobleem: als u het bestand verplaatst in plaats van kopieert, behoudt het bestand zijn oorspronkelijke context. Om dit probleem op te lossen:

  • Wijzig de contextopdracht met het label:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Wijzig de contextopdracht met het linklabel:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Herstel de context (voor beide gevallen): # restorecon -vR /var/www/html/

17. als SELinux moet je kennendat HTTPD luistert op poort 8585, vertel SELinux:

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

18. SELinux moet je kennen Booleaanse waarden die het mogelijk maken dat delen van het SELinux-beleid tijdens runtime worden gewijzigd zonder dat men weet dat het SELinux-beleid wordt overschreven. Als u bijvoorbeeld wilt dat httpd e-mail verzendt, voert u het volgende in: # setsebool -P httpd_can_sendmail 1

19. SELinux moet je kennen logische waarden voor het in-/uitschakelen van SELinux-instellingen:

  • Om alle Booleaanse waarden te zien: # getsebool -a
  • Om een ​​beschrijving van elk te zien: # semanage boolean -l
  • Een Booleaanse waarde instellen: # setsebool [_boolean_] [1|0]
  • Voor een permanente installatie, voeg toe -P. Bijvoorbeeld: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux-beleid/applicaties kunnen fouten bevatten, waaronder:

  • Ongebruikelijke codepaden
  • Configuraties
  • Stdout wordt omgeleid
  • Bestandsdescriptor lekt
  • Uitvoerbaar geheugen
  • Slecht gebouwde bibliotheken

Open tickets (geen melding indienen bij Bugzilla; Bugzilla heeft geen SLA).

21. Uw gegevens kunnen in gevaar komenals u beperkte domeinen heeft die proberen:

  • Kernelmodules laden
  • Schakel de afgedwongen SELinux-modus uit
  • Schrijven aan etc_t/shadow_t
  • Wijzig iptables-regels

22. SELinux tools voor het ontwikkelen van beleidsmodules:

# yum -y install setroubleshoot setroubleshoot-server

Opnieuw opstarten of opnieuw opstarten auditd na installatie.

23. Gebruiken

journalctl

om een ​​lijst weer te geven met alle bijbehorende logboeken setroubleshoot:

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

24. Gebruiken journalctl om alle logs weer te geven die aan een specifieke SELinux-tag zijn gekoppeld. Bijvoorbeeld:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Als er een SELinux-fout optreedt, gebruik dan het log setroubleshoot meerdere mogelijke oplossingen aanbieden.
Bijvoorbeeld van 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. Loggen: SELinux registreert informatie op veel plaatsen:

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

27. Logging: zoeken naar SELinux-fouten in de auditlog:

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

28. Om SELinux Access Vector Cache (AVC) berichten voor een specifieke dienst te vinden:

# ausearch -m avc -c httpd

29. Nut audit2allow verzamelt informatie uit logs van verboden handelingen en genereert vervolgens SELinux-toestemmingsbeleidsregels. Bijvoorbeeld:

  • Ga als volgt te werk om een ​​voor mensen leesbare beschrijving te maken van waarom toegang wordt geweigerd: # audit2allow -w -a
  • Een typehandhavingsregel bekijken die geweigerde toegang toestaat: # audit2allow -a
  • Een aangepaste module maken: # audit2allow -a -M mypolicy
  • optie -M maakt een typehandhavingsbestand (.te) met de opgegeven naam en compileert de regel in een beleidspakket (.pp): mypolicy.pp mypolicy.te
  • Om een ​​aangepaste module te installeren: # semodule -i mypolicy.pp

30. Een afzonderlijk proces (domein) configureren om in de permissieve modus te werken: # semanage permissive -a httpd_t

31. Als u niet langer wilt dat het domein toestemming geeft: # semanage permissive -d httpd_t

32. Om alle toegestane domeinen uit te schakelen: # semodule -d permissivedomains

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

SELINUX=permissive
SELINUXTYPE=mls

Zorg ervoor dat SELinux in de permissieve modus draait: # setenforce 0
Gebruik een script fixfilesom ervoor te zorgen dat de bestanden bij de volgende herstart opnieuw worden gelabeld:

# fixfiles -F onboot # reboot

34. Maak een gebruiker aan met een specifiek MLS-bereik: # useradd -Z staff_u john

Met behulp van de opdracht useradd, wijs de nieuwe gebruiker toe aan een bestaande SELinux-gebruiker (in dit geval staff_u).

35. Om de mapping tussen SELinux- en Linux-gebruikers te bekijken: # semanage login -l

36. Definieer een specifiek bereik voor de gebruiker: # semanage login --modify --range s2:c100 john

37. Om het homedirectorylabel van de gebruiker te corrigeren (indien nodig): # chcon -R -l s2:c100 /home/john

38. Om de huidige categorieën te bekijken: # chcat -L

39. Om categorieën te wijzigen of uw eigen categorieën te maken, bewerkt u het bestand als volgt:

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

40. Een opdracht of script uitvoeren in een specifiek bestand, rol en gebruikerscontext:

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

  • -t bestandscontext
  • -r rolcontext
  • -u gebruikerscontext

41. Containers die draaien terwijl SELinux uitgeschakeld is:

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

42. Als u de container volledige toegang tot het systeem wilt geven:

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

En nu weet je het antwoord al. Dus alsjeblieft: raak niet in paniek en schakel SELinux in.

referenties:

Bron: www.habr.com

Voeg een reactie