Ghid pentru începători în SELinux

Ghid pentru începători în SELinux

Articolul este tradus pentru studenții cursului „Securitatea Linux”

SELinux sau Security Enhanced Linux este un mecanism îmbunătățit de gestionare a accesului, dezvoltat de Agenția de Securitate Națională a SUA (NSA) pentru a preveni intruziunile malițioase. Acesta implementează un model mandatoriu de gestionare a accesului (Mandatory Access Control, MAC) pe deasupra modelului discreționar existent (Discretionary Access Control, DAC), adică a permisiunilor de citire, scriere și execuție.

SELinux are trei moduri:

  1. Enforcing — interzice accesul pe baza regulilor politicii.
  2. Permissive — înregistrează acțiunile care încalcă politica, care în modul enforcing ar fi fost interzise.
  3. Disabled — dezactivează complet SELinux.

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

Schimbarea modurilor SELinux

Pentru a verifica modul curent, rulați

$ getenforce

Pentru a schimba modul în permissive, rulați următoarea comandă

$ setenforce 0

sau, pentru a schimba modul din permissive pe înenforcing

, executați

$ setenforce 1

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

$ vi /etc/selinux/config

Pentru a dezactiva, modificați parametrul SELINUX astfel:

SELINUX=disabled

Configurarea SELinux permissive.

Fiecare fișier și proces este etichetat cu un context SELinux, care conține informații suplimentare, cum ar fi utilizatorul, rolul, tipul etc. Dacă activați SELinux pentru prima dată, trebuie mai întâi să configurați contextul și etichetele. Procesul de atribuire a etichetelor și contextului este cunoscut sub numele de etichetare. Pentru a începe etichetarea, în fișierul de configurare, schimbați modul în

$ vi /etc/selinux/config SELINUX=permissive permissiveDupă setarea modului , creați în rădăcină un fișier ascuns, gol, numit

$ touch /.autorelabel

și reporniți computerul

$ init 6

Notă: folosim modul permissive pentru etichetare, deoarece utilizarea modului în poate duce la prăbușirea sistemului în timpul repornirii.

Nu vă faceți griji dacă încărcarea se blochează pe un anumit fișier, etichetarea durează ceva timp. După finalizarea etichetării și a încărcării sistemului dumneavoastră, puteți să accesați fișierul de configurare și să setați modul în, precum și să rulați:

, executați

Acum ați activat cu succes SELinux pe computerul dumneavoastră.

Monitorizăm jurnalele

Este posibil să fi întâmpinat anumite erori în timpul marcării sau în timpul funcționării sistemului. Pentru a verifica dacă SELinux funcționează corect și nu blochează accesul la vreun port, aplicație etc., trebuie să consultați jurnalele. Jurnalul SELinux se află în /var/log/audit/audit.log, dar nu trebuie să-l citiți în întregime pentru a găsi erori. Puteți folosi utilitarul audit2why pentru a căuta erori. Rulați următoarea comandă:

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

Ca rezultat, veți obține o listă de erori. Dacă nu au fost erori în jurnal, atunci nu vor apărea mesaje.

Configurarea politicii SELinux

Politica SELinux este un set de reguli conform cărora funcționează mecanismul de securitate SELinux. Politica definește un set de reguli pentru un anumit mediu. Acum vom studia cum să configurăm politicile pentru a permite accesul la servicii interzise.

1. Valori logice (comutatoare)

Comutatoarele (booleans) permit modificarea părților politicii în timpul funcționării, fără a fi necesară crearea de politici noi. Ele permit efectuarea modificărilor fără repornirea sau recompilarea politicii SELinux.

Exemplu
Să presupunem că dorim să oferim acces la directorul personal al utilizatorului prin FTP, în regim de citire și scriere, și deja l-am partajat, dar când încercăm să accesăm, nu vedem nimic. Acest lucru se datorează faptului că politica SELinux interzice serverului FTP să citească și să scrie în directorul personal al utilizatorului. Trebuie să modificăm politica astfel încât serverul FTP să poată accesa directoarele personale. Să vedem dacă există vreo comutare pentru aceasta, rulând

$ semanage boolean -l

Această comandă va returna o listă de comutatoare disponibile cu starea lor actuală (activat/on sau dezactivat/off) și o descriere. Puteți rafina căutarea adăugând grep pentru a găsi rezultate legate numai de ftp:

$ semanage boolean -l | grep ftp

și veți găsi următoarele

ftp_home_dir        -> off       Permite ftp să citească și să scrie fișiere în directorul personal al utilizatorului

Acest comutator este oprit, așa că îl vom activa folosind setsebool ftp_home_dir on

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

2. Etichete și context

Aceasta este cea mai comună modalitate de implementare a politicii SELinux. Fiecare fișier, folder, proces și port este etichetat cu un context SELinux:

  • Pentru fișiere și foldere, etichetele sunt stocate ca atribute extinse în sistemul de fișiere și pot fi vizualizate cu următoarea comandă:
    $ ls -Z /etc/httpd
  • Pentru procese și porturi, marcarea este gestionată de nucleu și putem vizualiza aceste etichete astfel:

un proces

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Exemplu
Acum să luăm un exemplu pentru a înțelege mai bine etichetele și contextul. Să presupunem că avem server web, care în loc de director /var/www/html/ использует /home/dan/html/. SELinux va considera acest lucru o încălcare a politicii și nu veți putea accesa paginile web. Acest lucru se datorează faptului că nu am setat contextul de securitate asociat cu fișierele 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 obținut httpd_sys_content_t ca context pentru fișierele html. Trebuie să setăm acest context de securitate pentru directorul nostru curent, care acum are următorul context:

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

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, după ce găsim contextul de securitate corect. Pentru a schimba contextul /home/dan/html, executaț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 a fost modificat cu semanage, comanda restorecon va reîncărca contextul implicit pentru fișiere și foldere. Serverul nostru web va putea acum să citească fișiere din folderul /home/dan/html, deoarece contextul de securitate pentru acest folder a fost schimbat în httpd_sys_content_t.

3. Crearea politicilor locale

Pot apărea situații în care metodele menționate mai sus sunt inutile pentru tine și primești erori (avc/denial) în audit.log. Când se întâmplă acest lucru, trebuie să creezi o politică locală (Local policy). Toate erorile le poți găsi cu ajutorul audit2why, așa cum a fost descris mai sus.

Pentru a remedia erorile, poți crea o politică locală. De exemplu, dacă primim o eroare legată de httpd (apache) sau smbd (samba), căută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 și smb_policy — acestea sunt denumirile politicilor locale pe care le-am creat. Acum trebuie să încarcăm aceste politici locale în politica curentă SELinux. Acest lucru se poate face astfel:

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

Politicile noastre locale au fost încărcate și nu ar trebui să mai primim niciun avc sau denial î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, veți fi mai confortabili cu SELinux.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster