De vertaling van het artikel is speciaal voorbereid voor studenten van de cursus .

Hier krijgt u antwoorden op belangrijke vragen over het leven, het universum en alles in Linux met verbeterde veiligheid.
„Een belangrijke waarheid is dat dingen niet altijd zijn wat ze lijken, dat is algemeen bekend...“
―Douglas Adams, De Weg van de Laatste Ster
Veiligheid. Betrouwbaarheid verhogen. Naleving. Beleid. De vier ruiters van de Apocalypse voor sysadmins. Naast onze dagelijkse taken - monitoring, back-ups, implementatie, configuratie, updates, enz. - zijn we ook verantwoordelijk voor de veiligheid van onze systemen. Zelfs die systemen waarvan de externe provider ons adviseert om versterkte beveiliging uit te schakelen. Dit lijkt op het werk uit 'Mission: Impossible'.
Bij confrontatie met dit dilemma, kiezen sommige systeembeheerders ervoor om de , omdat ze denken dat ze nooit het antwoord op de grote vraag over leven, het universum en alles zullen ontdekken. En, zoals we allemaal weten, is dat antwoord 42.
In de geest van 'De Weg van de Laatste Ster', zijn hier 42 antwoorden op belangrijke vragen over het beheren en gebruiken in uw systemen.
1. SELinux is een systeem voor dwangmatig toegangsbeheer, wat betekent dat elk proces een label (label) heeft. Elk bestand, elke map en elk systeemobject heeft ook labels. Beleidsregels beheren de toegang tussen gelabelde processen en objecten. De kernel zorgt voor de handhaving van deze regels.
2. De twee belangrijkste concepten zijn: Labeling – labeling (bestanden, processen, poorten, enz.) en Type enforcement (dat processen van elkaar iso-leert op basis van types).
3. Het juiste labelformaat user:role:type:level (optioneel).
4. Het doel van het bieden van multi-level beveiliging (Multi-Level Security — MLS) is het beheren van processen (domeinen) op basis van het beveiligingsniveau van de data die zij zullen gebruiken. Bijvoorbeeld, een geheim proces kan geen supergeheime data lezen.
5. Multi-category beveiliging bieden (Multi-Category Security — MCS) beschermt soortgelijke processen tegen elkaar (bijvoorbeeld virtuele machines, OpenShift-mechanismen, SELinux-sandboxen, containers, enz.).
6. Kernelparameters om SELinux-modi bij het opstarten te wijzigen:
autorelabel=1→ zorgt ervoor dat het systeem de herlabeling uitvoertselinux=0→ kernel laadt de SELinux-infrastructuur nietenforcing=0→ opstarten in permissive modus
7. Als u het hele systeem opnieuw moet labelen:
# touch /.autorelabel
#reboot
Als de systeemaanduiding veel fouten bevat, moet u mogelijk in permissieve modus opstarten om het opnieuw labelen succesvol te laten verlopen.
8. Om te controleren of SELinux is ingeschakeld: # getenforce
9. Om SELinux tijdelijk in te schakelen / uit te schakelen: # setenforce [1|0]
10. Controle van de status van SELinux: # sestatus
11. Configuratiebestand: /etc/selinux/config
12. Hoe werkt SELinux? Hier is een voorbeeld van labeling voor de webserver Apache:
- Binaire weergave:
/usr/sbin/httpd→httpd_exec_t - Configuratiemap:
/etc/httpd→httpd_config_t - Logbestandenmap:
/var/log/httpd → httpd_log_t - Inhoudsmappen:
/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 wordt uitgevoerd in de context httpd_t, kan interageren met het object met label httpd_something_t.
13. Veel commando's accepteren de argument -Z om de context te bekijken, maken en wijzigen:
ls -Zid -Zps -Znetstat -Zcp -Zmkdir -Z
De context wordt ingesteld wanneer bestanden worden gemaakt op basis van de context van hun bovenliggende map (met enkele uitzonderingen). RPM kan contexten instellen tijdens de installatie.
14. Er zijn vier belangrijke redenen voor SELinux-fouten, die verder worden beschreven in punten 15-21 hieronder:
- Labelproblemen
- Vanwege iets dat SELinux moet weten
- Fout in het SELinux-beleid / de applicatie
- Uw gegevens kunnen zijn gecompromitteerd
15. Labelprobleem: als uw bestanden in /srv/myweb incorrect gelabeld zijn, kan toegang worden geweigerd. Hier zijn een paar manieren om dit te corrigeren:
- Als u het label kent:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?' - Als u het bestand kent met het equivalente label:
# semanage fcontext -a -e /srv/myweb /var/www - Herstel de context (voor beide gevallen):
# restorecon -vR /srv/myweb
16. Labelprobleem: als u het bestand verplaatst in plaats van het te kopiëren, behoudt het bestand zijn oorspronkelijke context. Om dit probleem op te lossen:
- Wijzig het contextcommando met label:
# chcon -t httpd_system_content_t /var/www/html/index.html - Wijzig het contextcommando met labellink:
# 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 weten, dat HTTPD poort 8585 beluistert, informeer SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux moet weten logische waarden die het mogelijk maken om delen van het SELinux-beleid runtime te wijzigen zonder kennis van het herschrijven van het SELinux-beleid. Bijvoorbeeld, als u wilt dat httpd e-mail verzendt, typt u: # setsebool -P httpd_can_sendmail 1
19. SELinux moet weten logische waarden voor het in- / uitschakelen van SELinux-instellingen:
- Om alle logische waarden te zien:
# getsebool -a - Om de beschrijving van elk te zien:
# semanage boolean -l - Om een logische waarde in te stellen:
# setsebool [_boolean_] [1|0] - Voor blijvende instelling voegt u toe
-P. Bijvoorbeeld:# setsebool httpd_enable_ftp_server 1 -P
20. SELinux beleids-/toepassingen kunnen fouten bevatten, waaronder:
- Onbruikelijke codepaden
- Configurations
- Verwijzing van stdout
- Bestandsdescriptor lekken
- Uitvoerbaar geheugen
- Slecht gebouwde bibliotheken
Open tickets (stuur geen rapport naar Bugzilla; er is geen SLA in Bugzilla).
21. Uw gegevens kunnen zijn gecompromitteerd, als je beperkte domeinen hebt die proberen:
- Kernelmodules te laden
- De enforced modus van SELinux uit te schakelen
- Te schrijven naar
etc_t/shadow_t - Iptables regels te wijzigen
22. SELinux-tools voor de ontwikkeling van beleidsmodules:
# yum -y install setroubleshoot setroubleshoot-server
Herstart of herlaad auditd na installatie.
23. Gebruik
journalctl om een lijst van alle logs die verband houden met setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. Gebruik journalctl om een lijst van alle logs te geven die verband houden met een bepaalde SELinux-label. Bijvoorbeeld:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. Bij een SELinux-fout gebruik de log setroubleshoot met een suggestie van verschillende mogelijke oplossingen.
Bijvoorbeeld uit journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux voorkomt dat httpd toegang krijgt tot getattr op het bestand /var/www/html/index.html. Voor een volledig bericht voer in: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux verhindert dat httpd toegang heeft tot getattr op het bestand /var/www/html/index.html.
***** Plugin restorecon (99.5 vertrouwen) suggereert ************************
Als je het label wilt herstellen,
het standaardlabel voor /var/www/html/index.html zou httpd_syscontent_t moeten zijn.
Dan kun je restorecon uitvoeren.
Voer uit
# /sbin/restorecon -v /var/www/html/index.html26. Logging: 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 het auditlog:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Om berichten van SELinux Access Vector Cache (AVC) voor een bepaalde service te vinden:
# ausearch -m avc -c httpd
29. Hulpprogramma audit2allow verzamelt informatie uit logboeken van geweigerde acties en genereert vervolgens SELinux regels voor toestemming. Bijvoorbeeld:
- Om een leesbare beschrijving van de reden voor de geweigerde toegang te maken:
# audit2allow -w -a - Om de regel voor dwingend typegebruik te bekijken die geweigerde toegang toestaat:
# audit2allow -a - Om een gebruikersmodule te maken:
# audit2allow -a -M mypolicy - Optie
-Mmaakt een bestand voor dwingend type (.te) met de opgegeven naam en compileert de regel in een beleidspakket (.pp):mypolicy.pp mypolicy.te - Om de gebruikersmodule te installeren:
# semodule -i mypolicy.pp
30. Om een afzonderlijk proces (domein) in permissive modus uit te voeren: # semanage permissive -a httpd_t
31. Als je niet wilt dat het domein permissive blijft: # semanage permissive -d httpd_t
32. Om alle permissive domeinen uit te schakelen: # semodule -d permissivedomains
33. Inschakelen van de MLS politiek van SELinux: # yum install selinux-policy-mls
in /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Zorg ervoor dat SELinux in permissive modus draait: # setenforce 0
Gebruik het script fixfiles, om ervoor te zorgen dat bestanden opnieuw gelabeld worden bij de volgende herstart:
# fixfiles -F onboot # reboot
34. Maak een gebruiker met een specifiek MLS-bereik: # useradd -Z staff_u john
Met behulp van de opdracht useradd, koppel de nieuwe gebruiker aan een bestaande SELinux-gebruiker (in dit geval, staff_u).
35. Om de overeenkomst tussen SELinux-gebruikers en Linux-gebruikers te bekijken: # semanage login -l
36. Bepaal een specifiek bereik voor de gebruiker: # semanage login --modify --range s2:c100 john
37. Om het label in de home directory van de gebruiker te corrigeren (indien nodig): # chcon -R -l s2:c100 /home/john
38. Voor het weergeven van de huidige categorieën: # chcat -L
39. Om categorieën te wijzigen of uw eigen te maken, pas het bestand als volgt aan:
/etc/selinux/_<selinuxtype>_/setrans.conf
40. Om een opdracht of script uit te voeren in een specifiek bestand, rol en gebruikerscontext:
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
-tbestandcontext-rrolcontext-ugebruikercontext
41. Containers die draaien met uitgeschakelde SELinux:
- 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 u al het antwoord. Dus, alstublieft: raak niet in paniek en zet SELinux aan.
Links:
- by
- door Dan Walsh
- by
- by
Bron: habr.com
