
De vertaling van het artikel is voorbereid voor studenten van de cursus
SELinux of Security Enhanced Linux is een verbeterd toegangsbeheersysteem dat is ontwikkeld door de National Security Agency (NSA) van de Verenigde Staten om kwaadwillige inbraken te voorkomen. Het implementeert een verplichte (of mandataire) toegangsbeheermodel (Engels: Mandatory Access Control, MAC) bovenop het bestaande discretionaire (of selectieve) model (Engels: Discretionary Access Control, DAC), dat wil zeggen de rechten voor lezen, schrijven en uitvoeren.
SELinux heeft drie modi:
- Enforcing — blokkeert toegang op basis van beleidsregels.
- Permissive — houdt een log bij van acties die het beleid schenden, die in de enforced modus verboden zouden zijn.
- Uitgeschakeld — schakelt SELinux volledig uit.
Standaardinstellingen bevinden zich in /etc/selinux/config
SELinux-modi wijzigen
Om de huidige modus te controleren, voert u het volgende uit:
$ getenforceOm de modus naar permissive te wijzigen, voert u de volgende opdracht uit:
$ setenforce 0of om de modus van permissive en een werkende opdracht krijgen. enforcing, voert u uit:
$ setenforce 1Als u SELinux volledig wilt uitschakelen, kan dit alleen worden gedaan via het configuratiebestand:
$ vi /etc/selinux/configOm uit te schakelen, wijzigt u de parameter SELINUX als volgt:
SELINUX=disabledSELinux-configuratie
Elk bestand en proces wordt gemarkeerd met een SELinux-context die aanvullende informatie bevat, zoals gebruiker, rol, type, enz. Als u SELinux voor de eerste keer inschakelt, moet u eerst de context en labels configureren. Het proces van labelen en toewijzen van context wordt labeling genoemd. Om met het labelen te beginnen, wijzigen we de modus in het configuratiebestand naar permissive.
$ vi /etc/selinux/config
SELINUX=permissiveNa het instellen van de modus permissive, maken we in de root een lege verborgen bestand met de naam .autorelabel
$ touch /.autorelabelen herstarten we de computer:
$ init 6Opmerking: we gebruiken de modus permissive voor labeling, omdat het gebruik van de modus enforcing kan leiden tot systeemcrashes tijdens het opstarten.
Maak je geen zorgen als het opstarten bij een bepaald bestand vastloopt; labeling duurt enige tijd. Zodra de labeling en het opstarten van uw systeem zijn voltooid, kunt u naar het configuratiebestand gaan en de modus instellen enforcing, en ook uitvoeren:
$ setenforce 1Nu heeft u SELinux succesvol ingeschakeld op uw computer.
Logboeken controleren
Misschien heeft u fouten ondervonden tijdens de labeling of tijdens het functioneren van het systeem. Om te controleren of uw SELinux correct werkt en geen toegang tot een bepaalde poort, applicatie, enz. blokkeert, moet u de logboeken bekijken. Het SELinux-logboek bevindt zich in /var/log/audit/audit.log, maar je hoeft het niet helemaal te lezen om fouten te vinden. Je kunt de tool audit2why gebruiken om fouten te zoeken. Voer de volgende opdracht uit:
$ audit2why < /var/log/audit/audit.logAls resultaat krijg je een lijst met fouten. Als er geen fouten in het logboek stonden, worden er geen berichten weergegeven.
Configuratie van SELinux-beleid
Het SELinux-beleid is een set regels waarmee het beveiligingsmechanisme van SELinux zich richt. Het beleid bepaalt een reeks regels voor een specifieke omgeving. We zullen nu leren hoe we beleidsregels kunnen configureren om toegang tot geblokkeerde services toe te staan.
1. Booleaanse waarden (schakelaars)
Schakelaars (booleans) maken het mogelijk om delen van het beleid tijdens runtime te wijzigen, zonder dat er nieuwe beleidsregels hoeven te worden gemaakt. Ze stellen veranderingen mogelijk zonder herstarten of hersamenstellen van SELinux-beleid.
Voorbeeld
Stel dat we toegang willen geven tot de persoonlijke map van de gebruiker via FTP voor lezen en schrijven, en we hebben deze al gedeeld, maar bij het proberen te benaderen zien we niets. Dit komt omdat het SELinux-beleid de FTP-server verbiedt om te lezen en schrijven in de persoonlijke map van de gebruiker. We moeten het beleid wijzigen zodat de FTP-server toegang kan krijgen tot de persoonlijke mappen. Laten we kijken of er schakelaars zijn om dit te doen door het volgende uit te voeren:
$ semanage boolean -lDeze opdracht geeft een lijst van beschikbare schakelaars met hun huidige status (ingeschakeld/on of uitgeschakeld/off) en beschrijving. Je kunt de zoekopdracht verfijnen door grep toe te voegen om alleen resultaten met betrekking tot ftp te vinden:
$ semanage boolean -l | grep ftpen je vindt het volgende:
ftp_home_dir -> off Sta ftp toe om bestanden te lezen en schrijven in de persoonlijke map van de gebruikerDeze schakelaar is uitgeschakeld, dus we zullen deze inschakelen met: setsebool $ setsebool ftp_home_dir on
Nu kan onze ftp-daemon toegang krijgen tot de persoonlijke map van de gebruiker.
Opmerking: je kunt ook een lijst van beschikbare schakelaars zonder beschrijving krijgen door het volgende uit te voeren: getsebool -a
2. Labels en context
Dit is de meest voorkomende manier om SELinux-beleid te implementeren. Elke bestand, map, proces en poort wordt gelabeld met een SELinux-context:
- Voor bestanden en mappen worden de labels opgeslagen als uitgebreide attributen in het bestandssysteem en kunnen ze worden bekeken met de volgende opdracht:
$ ls -Z /etc/httpd - Voor processen en poorten wordt het labelbeheer door de kernel uitgevoerd, en deze labels kunnen als volgt worden bekeken:
proces
$ ps –auxZ | grep httpdpoort
$ netstat -anpZ | grep httpdVoorbeeld
Laten we nu een voorbeeld bekijken om de labels en context beter te begrijpen. Stel dat we hebben webserver, in plaats van een directory /var/www/html/ использует /home/dan/html/. SELinux beschouwt dit als een schending van het beleid en je kunt je webpagina's niet bekijken. Dit komt omdat we de beveiligingscontext die met HTML-bestanden is verbonden, niet hebben ingesteld. Om de standaard beveiligingscontext te bekijken, gebruik je de volgende opdracht:
$ ls –lz /var/www/html
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/Hier hebben we gekregen httpd_sys_content_t als context voor html-bestanden. We moeten deze beveiligingscontext instellen voor onze huidige directory, die momenteel de volgende context heeft:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/Een alternatieve opdracht om de beveiligingscontext van een bestand of directory te controleren:
$ semanage fcontext -l | grep '/var/www'We zullen ook semanage gebruiken om de context te wijzigen, nadat we de juiste beveiligingscontext hebben gevonden. Om de context van /home/dan/html te wijzigen, voer je de volgende opdrachten uit:
$ semanage fcontext -a -t httpd_sys_content_t '/home/dan/html(/.*)?'
$ semanage fcontext -l | grep '/home/dan/html'
/home/dan/html(/.*)? alle bestanden system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/htmlZodra de context is gewijzigd met semanage, zal de restorecon-opdracht de standaardcontext voor bestanden en directories herstellen. Onze webserver kan nu bestanden uit de map lezen /home/dan/html, aangezien de beveiligingscontext voor deze map is gewijzigd naar httpd_sys_content_t.
3. Lokale beleidsregels maken
Er kunnen situaties ontstaan waarin de bovenstaande methoden voor jou nutteloos zijn, en je foutmeldingen (avc/denial) in audit.log ontvangt. Wanneer dat gebeurt, moet je een lokaal beleid (Local policy) maken. Alle fouten kun je vinden met audit2why, zoals hierboven beschreven.
Om fouten op te lossen, kun je een lokaal beleid creëren. Bijvoorbeeld, als we een fout krijgen die gerelateerd is aan httpd (apache) of smbd (samba), grep'en we de fouten en maken daar een beleid voor:
apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policyHier http_policy en smb_policy — dit zijn de namen van de lokale beleidsregels die we hebben gemaakt. Nu moeten we deze aangemaakte lokale beleidsregels in het huidige SELinux-beleid laden. Dit kan als volgt worden gedaan:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.ppOnze lokale beleidsregels zijn geladen en we zouden geen avc- of denial-fouten meer in audit.log moeten krijgen.
Dit was mijn poging om je te helpen SELinux te begrijpen. Ik hoop dat je je na het lezen van dit artikel straffer voelt over SELinux.
Bron: habr.com
