En nybegynnerguide til SELinux

En nybegynnerguide til SELinux

Oversettelse av artikkelen utarbeidet for kursstudenter "Linux-sikkerhet"

SELinux eller Security Enhanced Linux er en forbedret tilgangskontrollmekanisme utviklet av US National Security Agency (NSA) for å forhindre ondsinnede inntrengninger. Den implementerer en tvungen (eller obligatorisk) tilgangskontrollmodell (English Mandatory Access Control, MAC) på toppen av den eksisterende diskresjonære (eller selektive) modellen (English Discretionary Access Control, DAC), det vil si tillatelser til å lese, skrive, utføre.

SELinux har tre moduser:

  1. håndheving — tilgangsnektelse basert på politiske regler.
  2. Tillatende — føre en logg over handlinger som bryter med retningslinjene, som ville være forbudt i håndhevingsmodus.
  3. Deaktivert — fullstendig deaktivering av SELinux.

Som standard er innstillingene inne /etc/selinux/config

Endre SELinux-moduser

For å finne ut gjeldende modus, kjør

$ getenforce

For å endre modusen til permissive, kjør følgende kommando

$ setenforce 0

eller for å endre modus fra givendehåndheving, henrette

$ setenforce 1

Hvis du trenger å deaktivere SELinux fullstendig, kan dette bare gjøres gjennom konfigurasjonsfilen

$ vi /etc/selinux/config

For å deaktivere, endre SELINUX-parameteren som følger:

SELINUX=disabled

Sette opp SELinux

Hver fil og prosess er merket med en SELinux-kontekst, som inneholder tilleggsinformasjon som bruker, rolle, type osv. Hvis dette er første gang du aktiverer SELinux, må du først konfigurere konteksten og etikettene. Prosessen med å tildele etiketter og kontekst er kjent som tagging. For å begynne å markere, i konfigurasjonsfilen endrer vi modus til givende.

$ vi /etc/selinux/config
SELINUX=permissive

Etter innstilling av modus givende, opprett en tom skjult fil i roten med navnet autorelabel

$ touch /.autorelabel

og start datamaskinen på nytt

$ init 6

Merk: Vi bruker modusen givende for merking, siden bruken av modusen håndheving kan føre til at systemet krasjer under omstart.

Ikke bekymre deg hvis nedlastingen blir sittende fast på en fil, merking tar litt tid. Når merkingen er fullført og systemet er startet opp, kan du gå til konfigurasjonsfilen og angi modus håndhevingog kjører også:

$ setenforce 1

Du har nå aktivert SELinux på datamaskinen din.

Overvåking av loggene

Du kan ha støtt på noen feil under merking eller mens systemet kjører. For å sjekke om din SELinux fungerer som den skal og om den ikke blokkerer tilgang til noen port, applikasjon osv., må du se på loggene. SELinux-loggen er plassert i /var/log/audit/audit.log, men du trenger ikke å lese hele greia for å finne feil. Du kan bruke audit2why-verktøyet til å finne feil. Kjør følgende kommando:

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

Som et resultat vil du motta en liste over feil. Hvis det ikke var noen feil i loggen, vil ingen meldinger vises.

Konfigurering av SELinux-policy

En SELinux-policy er et sett med regler som styrer SELinux-sikkerhetsmekanismen. En policy definerer et sett med regler for et spesifikt miljø. Nå skal vi lære hvordan du konfigurerer retningslinjer for å tillate tilgang til forbudte tjenester.

1. Logiske verdier (brytere)

Brytere (booleaner) lar deg endre deler av en policy under kjøring, uten å måtte opprette nye policyer. De lar deg gjøre endringer uten å starte på nytt eller kompilere SELinux-policyer på nytt.

Eksempel
La oss si at vi ønsker å dele en brukers hjemmekatalog via FTP lese/skrive, og vi har allerede delt den, men når vi prøver å få tilgang til den, ser vi ingenting. Dette er fordi SELinux-policy forhindrer FTP-serveren fra å lese og skrive til brukerens hjemmekatalog. Vi må endre policyen slik at FTP-serveren kan få tilgang til hjemmekataloger. La oss se om det er noen brytere for dette ved å gjøre

$ semanage boolean -l

Denne kommandoen viser de tilgjengelige bryterne med gjeldende tilstand (på eller av) og beskrivelse. Du kan avgrense søket ved å legge til grep for å finne ftp-bare resultater:

$ semanage boolean -l | grep ftp

og du vil finne følgende

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

Denne bryteren er deaktivert, så vi vil aktivere den med setsebool $ setsebool ftp_home_dir on

Nå vil ftp-demonen vår kunne få tilgang til brukerens hjemmekatalog.
Merk: Du kan også få en liste over tilgjengelige brytere uten beskrivelse ved å gjøre getsebool -a

2. Etiketter og kontekst

Dette er den vanligste måten å implementere SELinux-policyen på. Hver fil, mappe, prosess og port er merket med SELinux-konteksten:

  • For filer og mapper lagres etiketter som utvidede attributter på filsystemet og kan vises med følgende kommando:
    $ ls -Z /etc/httpd
  • For prosesser og porter administreres merkingen av kjernen, og du kan se disse etikettene som følger:

prosess

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Eksempel
La oss nå se på et eksempel for å bedre forstå etiketter og kontekst. La oss si at vi har en webserver som, i stedet for en katalog /var/www/html/ использует /home/dan/html/. SELinux vil anse dette som et brudd på retningslinjene, og du vil ikke kunne se nettsidene dine. Dette er fordi vi ikke har angitt sikkerhetskonteksten knyttet til HTML-filene. For å se standard sikkerhetskontekst, bruk 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 har vi httpd_sys_content_t som kontekst for html-filer. Vi må angi denne sikkerhetskonteksten for vår nåværende katalog, som for øyeblikket har følgende kontekst:

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

En alternativ kommando for å sjekke sikkerhetskonteksten til en fil eller katalog:

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

Vi vil også bruke semanage for å endre konteksten når vi har funnet riktig sikkerhetskontekst. For å endre konteksten til /home/dan/html, kjør 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

Etter at konteksten er endret ved hjelp av semanage, vil kommandoen restorecon laste standardkonteksten for filer og kataloger. Vår webserver vil nå kunne lese filer fra mappen /home/dan/htmlfordi sikkerhetskonteksten for denne mappen er endret til httpd_sys_content_t.

3. Lag lokale retningslinjer

Det kan være situasjoner der metodene ovenfor ikke er til nytte for deg og du får feil (avc/denial) i audit.log. Når dette skjer, må du lage en lokal policy. Du kan finne alle feil ved å bruke audit2why, som beskrevet ovenfor.

Du kan opprette en lokal policy for å løse feil. For eksempel får vi en feil relatert til httpd (apache) eller smbd (samba), vi grep feilene og lager en policy 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 retningslinjene vi har laget. Nå må vi laste disse opprettede lokale retningslinjene inn i gjeldende SELinux-policy. Dette kan gjøres som følger:

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

Våre lokale retningslinjer er lastet ned, og vi bør ikke lenger motta noen avc eller denail i audit.log.

Dette var mitt forsøk på å hjelpe deg å forstå SELinux. Jeg håper at etter å ha lest denne artikkelen vil du føle deg mer komfortabel med SELinux.

Kilde: www.habr.com

Legg til en kommentar