ProHoster > blog > administratie > SELinux spiekbriefje voor systeembeheerders: 42 antwoorden op belangrijke vragen
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".
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).
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:
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:
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:
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: