En begynderguide til SELinux

En begynderguide til SELinux

Oversættelse af artiklen udarbejdet til kursister "Linux sikkerhed"

SELinux eller Security Enhanced Linux er en forbedret adgangskontrolmekanisme udviklet af US National Security Agency (NSA) for at forhindre ondsindet indtrængen. Den implementerer en tvungen (eller obligatorisk) adgangskontrolmodel (English Mandatory Access Control, MAC) oven på den eksisterende diskretionære (eller selektive) model (English Discretionary Access Control, DAC), det vil sige læse, skrive, udføre tilladelser.

SELinux har tre tilstande:

  1. Håndhævelse — adgangsforbud baseret på politiske regler.
  2. Tilladende — føre en log over handlinger, der overtræder politikken, hvilket ville være forbudt i håndhævelsestilstand.
  3. handicappet — fuldstændig deaktivering af SELinux.

Som standard er indstillingerne i /etc/selinux/config

Ændring af SELinux-tilstande

Kør for at finde ud af den aktuelle tilstand

$ getenforce

For at ændre tilstanden til permissive, kør følgende kommando

$ setenforce 0

eller for at skifte tilstand fra eftergivendehåndhæve, udføre

$ setenforce 1

Hvis du har brug for at deaktivere SELinux fuldstændigt, så kan dette kun gøres gennem konfigurationsfilen

$ vi /etc/selinux/config

For at deaktivere skal du ændre SELINUX-parameteren som følger:

SELINUX=disabled

Opsætning af SELinux

Hver fil og proces er markeret med en SELinux-kontekst, som indeholder yderligere information såsom bruger, rolle, type osv. Hvis det er første gang, du aktiverer SELinux, skal du først konfigurere konteksten og etiketterne. Processen med at tildele etiketter og kontekst er kendt som tagging. For at begynde at markere, i konfigurationsfilen ændrer vi tilstanden til eftergivende.

$ vi /etc/selinux/config
SELINUX=permissive

Efter indstilling af tilstanden eftergivende, opret en tom skjult fil i roden med navnet autorelabel

$ touch /.autorelabel

og genstart computeren

$ init 6

Bemærk: Vi bruger tilstanden eftergivende til mærkning, siden brugen af ​​tilstanden håndhæve kan få systemet til at gå ned under genstart.

Bare rolig, hvis overførslen sætter sig fast på en fil, markering tager et stykke tid. Når markeringen er fuldført, og dit system er startet, kan du gå til konfigurationsfilen og indstille tilstanden håndhæveog køre også:

$ setenforce 1

Du har nu med succes aktiveret SELinux på din computer.

Overvågning af logfiler

Du er muligvis stødt på nogle fejl under markeringen, eller mens systemet kører. For at kontrollere, om din SELinux fungerer korrekt, og om den ikke blokerer adgang til nogen port, applikation osv., skal du se på loggene. SELinux-loggen er placeret i /var/log/audit/audit.log, men du behøver ikke læse det hele for at finde fejl. Du kan bruge værktøjet audit2why til at finde fejl. Kør følgende kommando:

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

Som et resultat vil du modtage en liste over fejl. Hvis der ikke var nogen fejl i loggen, vil der ikke blive vist nogen meddelelser.

Konfiguration af SELinux-politik

En SELinux-politik er et sæt regler, der styrer SELinux-sikkerhedsmekanismen. En politik definerer et sæt regler for et specifikt miljø. Nu vil vi lære, hvordan du konfigurerer politikker for at tillade adgang til forbudte tjenester.

1. Logiske værdier (afbrydere)

Switches (booleaner) giver dig mulighed for at ændre dele af en politik under kørsel uden at skulle oprette nye politikker. De giver dig mulighed for at foretage ændringer uden at genstarte eller genkompilere SELinux-politikker.

Eksempel
Lad os sige, at vi vil dele en brugers hjemmemappe via FTP læse/skrive, og vi har allerede delt det, men når vi forsøger at få adgang til det, ser vi intet. Dette skyldes, at SELinux-politikken forhindrer FTP-serveren i at læse og skrive til brugerens hjemmemappe. Vi er nødt til at ændre politikken, så FTP-serveren kan få adgang til hjemmemapper. Lad os se, om der er nogen kontakter til dette ved at gøre

$ semanage boolean -l

Denne kommando viser de tilgængelige kontakter med deres aktuelle tilstand (til eller fra) og beskrivelse. Du kan forfine din søgning ved at tilføje grep for at finde ftp-only resultater:

$ semanage boolean -l | grep ftp

og du finder følgende

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

Denne kontakt er deaktiveret, så vi aktiverer den med setsebool $ setsebool ftp_home_dir on

Nu vil vores ftp-dæmon være i stand til at få adgang til brugerens hjemmemappe.
Bemærk: Du kan også få en liste over tilgængelige kontakter uden beskrivelse ved at gøre getsebool -a

2. Etiketter og kontekst

Dette er den mest almindelige måde at implementere SELinux-politikken på. Hver fil, mappe, proces og port er markeret med SELinux-konteksten:

  • For filer og mapper gemmes etiketter som udvidede attributter på filsystemet og kan ses med følgende kommando:
    $ ls -Z /etc/httpd
  • For processer og porte administreres mærkningen af ​​kernen, og du kan se disse etiketter som følger:

proces

$ ps –auxZ | grep httpd

havn

$ netstat -anpZ | grep httpd

Eksempel
Lad os nu se på et eksempel for bedre at forstå etiketter og kontekst. Lad os sige, at vi har en webserver, der i stedet for en mappe /var/www/html/ использует /home/dan/html/. SELinux vil betragte dette som en overtrædelse af politik, og du vil ikke være i stand til at se dine websider. Dette skyldes, at vi ikke har indstillet den sikkerhedskontekst, der er knyttet til HTML-filerne. For at se standardsikkerhedskonteksten skal du bruge følgende kommando:

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

Her fik vi httpd_sys_content_t som kontekst for html-filer. Vi skal indstille denne sikkerhedskontekst for vores nuværende mappe, som i øjeblikket har følgende kontekst:

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

En alternativ kommando til at kontrollere sikkerhedskonteksten for en fil eller et bibliotek:

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

Vi vil også bruge semanage til at ændre konteksten, når vi har fundet den korrekte sikkerhedskontekst. For at ændre konteksten af ​​/home/dan/html skal du køre følgende kommandoer:

$ 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

Efter at konteksten er ændret ved hjælp af semanage, vil kommandoen restorecon indlæse standardkonteksten for filer og mapper. Vores webserver vil nu kunne læse filer fra mappen /home/dan/htmlfordi sikkerhedskonteksten for denne mappe er blevet ændret til httpd_sys_content_t.

3. Opret lokale politikker

Der kan være situationer, hvor ovenstående metoder ikke nytter dig, og du får fejl (avc/denial) i audit.log. Når dette sker, skal du oprette en lokal politik. Du kan finde alle fejl ved hjælp af audit2why, som beskrevet ovenfor.

Du kan oprette en lokal politik for at løse fejl. For eksempel får vi en fejl relateret til httpd (apache) eller smbd (samba), vi grep fejlene og opretter en politik for dem:

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

Her http_policy и smb_policy er navnene på de lokale politikker, som vi har oprettet. Nu skal vi indlæse disse oprettede lokale politikker i den nuværende SELinux-politik. Dette kan gøres på følgende måde:

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

Vores lokale politikker er blevet downloadet, og vi bør ikke længere modtage nogen avc eller denail i audit.log.

Dette var mit forsøg på at hjælpe dig med at forstå SELinux. Jeg håber, at du efter at have læst denne artikel vil føle dig mere komfortabel med SELinux.

Kilde: www.habr.com

Tilføj en kommentar