Un ghid pentru începători pentru SELinux

Un ghid pentru începători pentru SELinux

Traducerea articolului pregătit pentru cursanții „Securitate Linux”

SELinux sau Security Enhanced Linux este un mecanism îmbunătățit de control al accesului dezvoltat de Agenția Națională de Securitate a SUA (NSA) pentru a preveni intruziunile rău intenționate. Implementează un model de control al accesului forțat (sau obligatoriu) (English Mandatory Access Control, MAC) pe lângă modelul discreționar (sau selectiv) existent (English Discretionary Access Control, DAC), adică permisiuni de citire, scriere, execuție.

SELinux are trei moduri:

  1. aplicarea — refuzul accesului pe baza regulilor politicii.
  2. Permisiv — păstrarea unui jurnal al acțiunilor care încalcă politica, care ar fi interzisă în modul de aplicare.
  3. Invalid — dezactivarea completă a SELinux.

În mod implicit, setările sunt în /etc/selinux/config

Schimbarea modurilor SELinux

Pentru a afla modul curent, rulați

$ getenforce

Pentru a schimba modul în permisiv, executați următoarea comandă

$ setenforce 0

sau, pentru a schimba modul de la permisiv pe aplicarea, a executa

$ setenforce 1

Dacă trebuie să dezactivați complet SELinux, atunci acest lucru se poate face numai prin fișierul de configurare

$ vi /etc/selinux/config

Pentru a dezactiva, modificați parametrul SELINUX după cum urmează:

SELINUX=disabled

Configurarea SELinux

Fiecare fișier și proces este marcat cu un context SELinux, care conține informații suplimentare, cum ar fi utilizator, rol, tip etc. Dacă este prima dată când activați SELinux, mai întâi va trebui să configurați contextul și etichetele. Procesul de atribuire a etichetelor și a contextului este cunoscut sub numele de etichetare. Pentru a începe marcarea, în fișierul de configurare schimbăm modul în permisiv.

$ vi /etc/selinux/config
SELINUX=permissive

După setarea modului permisiv, creați un fișier ascuns gol în rădăcină cu numele autorelabel

$ touch /.autorelabel

și reporniți computerul

$ init 6

Notă: folosim modul permisiv pentru marcare, de la utilizarea modului aplicarea poate cauza blocarea sistemului în timpul repornirii.

Nu vă faceți griji dacă descărcarea se blochează pe un fișier, marcarea durează ceva timp. Odată ce marcarea este completă și sistemul dvs. este pornit, puteți merge la fișierul de configurare și puteți seta modul aplicareași, de asemenea, rulați:

$ setenforce 1

Acum ați activat cu succes SELinux pe computer.

Monitorizarea jurnalelor

Este posibil să fi întâlnit unele erori în timpul marcarii sau în timpul funcționării sistemului. Pentru a verifica dacă SELinux-ul tău funcționează corect și dacă nu blochează accesul la niciun port, aplicație etc., trebuie să te uiți la jurnalele. Jurnalul SELinux se află în /var/log/audit/audit.log, dar nu trebuie să citiți totul pentru a găsi erori. Puteți utiliza utilitarul audit2why pentru a găsi erori. Rulați următoarea comandă:

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

Ca urmare, veți primi o listă de erori. Dacă nu au existat erori în jurnal, atunci nu vor fi afișate mesaje.

Configurarea politicii SELinux

O politică SELinux este un set de reguli care guvernează mecanismul de securitate SELinux. O politică definește un set de reguli pentru un anumit mediu. Acum vom învăța cum să configuram politicile pentru a permite accesul la serviciile interzise.

1. Valori logice (comutatoare)

Comutatoarele (booleani) vă permit să schimbați părți ale unei politici în timpul execuției, fără a fi nevoie să creați noi politici. Acestea vă permit să faceți modificări fără a reporni sau recompila politicile SELinux.

Exemplu
Să presupunem că vrem să partajăm directorul principal al unui utilizator prin citire/scriere FTP și l-am partajat deja, dar când încercăm să-l accesăm, nu vedem nimic. Acest lucru se datorează faptului că politica SELinux împiedică serverul FTP să citească și să scrie în directorul principal al utilizatorului. Trebuie să schimbăm politica, astfel încât serverul FTP să poată accesa directoarele de acasă. Să vedem dacă există vreun comutator pentru asta făcând

$ semanage boolean -l

Această comandă va lista comutatoarele disponibile cu starea lor curentă (pornit sau oprit) și descrierea. Vă puteți rafina căutarea adăugând grep pentru a găsi rezultate numai ftp:

$ semanage boolean -l | grep ftp

și veți găsi următoarele

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

Acest comutator este dezactivat, așa că îl vom activa cu setsebool $ setsebool ftp_home_dir on

Acum, demonul nostru ftp va putea accesa directorul principal al utilizatorului.
Notă: puteți obține și o listă de comutatoare disponibile fără descriere făcând getsebool -a

2. Etichete și context

Acesta este cel mai comun mod de a implementa politica SELinux. Fiecare fișier, folder, proces și port este marcat cu contextul SELinux:

  • Pentru fișiere și foldere, etichetele sunt stocate ca atribute extinse pe sistemul de fișiere și pot fi vizualizate cu următoarea comandă:
    $ ls -Z /etc/httpd
  • Pentru procese și porturi, etichetarea este gestionată de nucleu și puteți vizualiza aceste etichete după cum urmează:

proces

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Exemplu
Acum să ne uităm la un exemplu pentru a înțelege mai bine etichetele și contextul. Să presupunem că avem un server web care, în loc de un director /var/www/html/ использует /home/dan/html/. SELinux va considera acest lucru o încălcare a politicii și nu veți putea vizualiza paginile dvs. web. Acest lucru se datorează faptului că nu am setat contextul de securitate asociat fișierelor HTML. Pentru a vizualiza contextul de securitate implicit, utilizați următoarea comandă:

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

Aici am ajuns httpd_sys_content_t ca context pentru fișierele html. Trebuie să setăm acest context de securitate pentru directorul nostru curent, care are în prezent următorul context:

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

O comandă alternativă pentru a verifica contextul de securitate al unui fișier sau director:

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

De asemenea, vom folosi semanage pentru a schimba contextul odată ce am găsit contextul de securitate corect. Pentru a schimba contextul /home/dan/html, rulați următoarele comenzi:

$ 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

După ce contextul este schimbat folosind semanage, comanda restorecon va încărca contextul implicit pentru fișiere și directoare. Serverul nostru web va putea acum să citească fișierele din folder /home/dan/htmldeoarece contextul de securitate pentru acest folder a fost schimbat în httpd_sys_content_t.

3. Creați politici locale

Pot exista situații în care metodele de mai sus nu vă sunt de folos și obțineți erori (avc/denial) în audit.log. Când se întâmplă acest lucru, trebuie să creați o politică locală. Puteți găsi toate erorile folosind audit2why, așa cum este descris mai sus.

Puteți crea o politică locală pentru a rezolva erorile. De exemplu, primim o eroare legată de httpd (apache) sau smbd (samba), grepăm erorile și creăm o politică pentru ele:

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

Aici http_policy и smb_policy sunt numele politicilor locale pe care le-am creat. Acum trebuie să încărcăm aceste politici locale create în politica SELinux actuală. Acest lucru se poate face după cum urmează:

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

Politicile noastre locale au fost descărcate și nu ar trebui să mai primim nicio avc sau denail în audit.log.

Aceasta a fost încercarea mea de a vă ajuta să înțelegeți SELinux. Sper că după ce ați citit acest articol vă veți simți mai confortabil cu SELinux.

Sursa: www.habr.com

Adauga un comentariu