Beginner's gids voor SELinux

Beginner's gids voor SELinux

De vertaling van het artikel is voorbereid voor studenten van de cursus Veiligheid van Linux

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:

  1. Enforcing — blokkeert toegang op basis van beleidsregels.
  2. Permissive — houdt een log bij van acties die het beleid schenden, die in de enforced modus verboden zouden zijn.
  3. 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:

$ getenforce

Om de modus naar permissive te wijzigen, voert u de volgende opdracht uit:

$ setenforce 0

of om de modus van permissive en een werkende opdracht krijgen. enforcing, voert u uit:

$ setenforce 1

Als u SELinux volledig wilt uitschakelen, kan dit alleen worden gedaan via het configuratiebestand:

$ vi /etc/selinux/config

Om uit te schakelen, wijzigt u de parameter SELINUX als volgt:

SELINUX=disabled

SELinux-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=permissive

Na het instellen van de modus permissive, maken we in de root een lege verborgen bestand met de naam .autorelabel

$ touch /.autorelabel

en herstarten we de computer:

$ init 6

Opmerking: 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 1

Nu 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.log

Als 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 -l

Deze 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 ftp

en je vindt het volgende:

ftp_home_dir        -> off       Sta ftp toe om bestanden te lezen en schrijven in de persoonlijke map van de gebruiker

Deze 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 httpd

poort

$ netstat -anpZ | grep httpd

Voorbeeld
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/html

Zodra 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_policy

Hier 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.pp

Onze 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

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster