Een beginnershandleiding voor SELinux

Een beginnershandleiding voor SELinux

Vertaling van het artikel voorbereid voor cursisten "Linux-beveiliging"

SELinux of Security Enhanced Linux is een verbeterd toegangscontrolemechanisme ontwikkeld door de Amerikaanse National Security Agency (NSA) om kwaadaardige inbraken te voorkomen. Het implementeert een geforceerd (of verplicht) toegangscontrolemodel (Engels Mandatory Access Control, MAC) bovenop het bestaande discretionaire (of selectieve) model (Engels Discretionary Access Control, DAC), dat wil zeggen machtigingen om te lezen, schrijven en uitvoeren.

SELinux heeft drie modi:

  1. Handhaving van — ontzegging van toegang op basis van beleidsregels.
  2. Toegeeflijk — het bijhouden van een logboek van acties die in strijd zijn met het beleid, wat in de handhavingsmodus verboden zou zijn.
  3. invalide — volledige uitschakeling van SELinux.

Standaard staan ​​de instellingen erin /etc/selinux/config

SELinux-modi veranderen

Om de huidige modus te achterhalen, voert u uit

$ getenforce

Om de modus te wijzigen in tolerant, voert u de volgende opdracht uit

$ setenforce 0

of, om van modus te veranderen toegeeflijk op afdwingen, uitvoeren

$ setenforce 1

Als je SELinux volledig moet uitschakelen, dan kan dit alleen gedaan worden via het configuratiebestand

$ vi /etc/selinux/config

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

SELINUX=disabled

SELinux instellen

Elk bestand en proces is gemarkeerd met een SELinux-context, die aanvullende informatie bevat, zoals gebruiker, rol, type, enz. Als dit de eerste keer is dat je SELinux inschakelt, zul je eerst de context en labels moeten configureren. Het proces van het toewijzen van labels en context staat bekend als taggen. Om te beginnen met markeren, veranderen we in het configuratiebestand de modus naar toegeeflijk.

$ vi /etc/selinux/config
SELINUX=permissive

Na het instellen van de modus toegeeflijk, maak een leeg verborgen bestand in de root met de naam autorelabel

$ touch /.autorelabel

en start de computer opnieuw op

$ init 6

Opmerking: we gebruiken de modus toegeeflijk voor markering, sinds het gebruik van de modus afdwingen kan ervoor zorgen dat het systeem crasht tijdens het opnieuw opstarten.

Maak je geen zorgen als de download vastloopt op een bepaald bestand; het markeren duurt even. Zodra het markeren is voltooid en uw systeem is opgestart, kunt u naar het configuratiebestand gaan en de modus instellen afdwingenen ook uitvoeren:

$ setenforce 1

Je hebt nu met succes SELinux op je computer ingeschakeld.

Het monitoren van de logboeken

Mogelijk bent u fouten tegengekomen tijdens het markeren of terwijl het systeem actief was. Om te controleren of jouw SELinux correct werkt en of het de toegang tot geen enkele poort, applicatie, etc. blokkeert, moet je naar de logs kijken. Het SELinux-logboek bevindt zich in /var/log/audit/audit.log, maar u hoeft niet het hele artikel te lezen om fouten te vinden. U kunt het hulpprogramma audit2why gebruiken om fouten te vinden. Voer de volgende opdracht uit:

$ audit2why < /var/log/audit/audit.log

Als gevolg hiervan ontvangt u een lijst met fouten. Als er geen fouten in het log staan, worden er geen berichten weergegeven.

SELinux-beleid configureren

Een SELinux-beleid is een set regels die het SELinux-beveiligingsmechanisme besturen. Een beleid definieert een reeks regels voor een specifieke omgeving. Nu zullen we leren hoe we beleid kunnen configureren om toegang tot verboden services toe te staan.

1. Logische waarden (schakelaars)

Met schakelaars (Booleans) kunt u delen van een beleid tijdens runtime wijzigen, zonder dat u nieuw beleid hoeft te maken. Ze stellen je in staat veranderingen aan te brengen zonder het SELinux-beleid opnieuw op te starten of opnieuw te compileren.

Voorbeeld
Laten we zeggen dat we de thuismap van een gebruiker willen delen via FTP lezen/schrijven, en we hebben deze al gedeeld, maar als we er toegang toe proberen te krijgen, zien we niets. Dit komt omdat het SELinux-beleid verhindert dat de FTP-server leest en schrijft naar de thuismap van de gebruiker. We moeten het beleid wijzigen zodat de FTP-server toegang heeft tot de thuismappen. Laten we eens kijken of hier schakelaars voor zijn

$ semanage boolean -l

Met deze opdracht worden de beschikbare schakelaars weergegeven met hun huidige status (aan of uit) en beschrijving. Je kunt je zoekopdracht verfijnen door grep toe te voegen om alleen ftp-resultaten te vinden:

$ semanage boolean -l | grep ftp

en je vindt het volgende

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Deze schakelaar is uitgeschakeld, dus we zullen deze inschakelen met setsebool $ setsebool ftp_home_dir on

Nu heeft onze ftp-daemon toegang tot de thuismap van de gebruiker.
Opmerking: U kunt ook een lijst met beschikbare schakelaars zonder beschrijving krijgen door te doen getsebool -a

2. Etiketten en context

Dit is de meest gebruikelijke manier om SELinux-beleid te implementeren. Elk bestand, map, proces en poort wordt gemarkeerd met de SELinux-context:

  • Voor bestanden en mappen worden labels opgeslagen als uitgebreide attributen op het bestandssysteem en kunnen worden bekeken met de volgende opdracht:
    $ ls -Z /etc/httpd
  • Voor processen en poorten wordt de labeling beheerd door de kernel, en je kunt deze labels als volgt bekijken:

procede

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Voorbeeld
Laten we nu naar een voorbeeld kijken om labels en context beter te begrijpen. Laten we zeggen dat we een webserver hebben die, in plaats van een directory /var/www/html/ использует /home/dan/html/. SELinux zal dit als een overtreding van het beleid beschouwen en u zult uw webpagina's niet kunnen bekijken. Dit komt omdat we de beveiligingscontext die aan de HTML-bestanden is gekoppeld, niet hebben ingesteld. Gebruik de volgende opdracht om de standaardbeveiligingscontext te bekijken:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Hier zijn we httpd_sys_content_t als context voor html-bestanden. We moeten deze beveiligingscontext instellen voor onze huidige map, die momenteel de volgende context heeft:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Een alternatief commando om de beveiligingscontext van een bestand of map te controleren:

$ semanage fcontext -l | grep '/var/www'

We zullen semanage ook gebruiken om de context te veranderen zodra we de juiste beveiligingscontext hebben gevonden. Om de context van /home/dan/html te wijzigen, voert u 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(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Nadat de context is gewijzigd met behulp van semanage, zal het herstelcon commando de standaardcontext voor bestanden en mappen laden. Onze webserver kan nu bestanden uit de map lezen /home/dan/htmlomdat de beveiligingscontext voor deze map is gewijzigd in httpd_sys_content_t.

3. Creëer lokaal beleid

Er kunnen zich situaties voordoen waarin de bovenstaande methoden voor u geen nut hebben en u fouten (avc/denial) krijgt in audit.log. Wanneer dit gebeurt, moet u een lokaal beleid maken. Alle fouten kun je vinden met audit2why, zoals hierboven beschreven.

U kunt een lokaal beleid maken om fouten op te lossen. We krijgen bijvoorbeeld een fout gerelateerd aan httpd (apache) of smbd (samba), we grep de fouten en maken er 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 и smb_policy zijn de namen van het lokale beleid dat we hebben gemaakt. Nu moeten we deze gemaakte lokale beleidsregels in de huidige SELinux-beleid laden. Dit kan als volgt worden gedaan:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Ons lokale beleid is gedownload en we zouden geen avc of denail meer moeten ontvangen in audit.log.

Dit was mijn poging om je te helpen SELinux te begrijpen. Ik hoop dat je na het lezen van dit artikel je meer op je gemak zult voelen met SELinux.

Bron: www.habr.com

Voeg een reactie