NSA Security-Enhanced Linux (SELinux) este o unealtă folosită pentru a proteja calculatoarele cu Linux de eventualele atacuri provenite din Internet. A fost cerut și dezvoltat, cel puțin în perioada sa de început, de către National Security Agency (NSA). Prima versiune a fost oferită de către NSA comunității open source pe 22 decembrie 2000. SELinux a fost inculs în kernelul Linux în 2003, începând cu versiunea de kernel 2.6.0-test3. Este prezent și pe telefoanele mobile începând cu versiunea Android 4.3.
Există o mulțime de programe care, după instalare, își creează propriul cont de utilizator; un cont de utilizator numit "apache" este creat ca parte a procesului de instalare a pachetului httpd (pentru a vizualiza toți userii din sistem, inclusiv userul apache, rulați sudo cat /etc/passwd
). Persoanele rău intenționate pot găsi o cale de a prelua controlul asupra acestui cont și, prin urmare, pot să obțină acces la alte fișiere sau directoare de pe mașină. În această situație, clasicele permisiuni ugo+rwx nu mai oferă nicio o protecție. Și aici apare SELinux care, cu ajutorul magiei din spatele său, poate salva sistemul.
În principal, SELinux efectuează controlul distrugerilor. Astfel, dacă software-ul apache/httpd dat ca exemplu mai sus este compromis, atunci atacatorul poate fi limitat la a accesa doar fișierele și directoarele pe care contul de utilizator apache le-ar accesa în mod normal; atacatorul, mascat ca utilizator apache, nu va fi capabil să scrie sau să citească nimic din directorul /etc, chiar dacă serviciul apache are privilegiile necesare de scriere/citire/execuție pe acesta.
Într-un articol viitor voi prezenta cum gestionează SELinux acest tip de control granular al accesului.
Straturi de securitate
Pentru ca un computer cu Linux să fie securizat, pot fi adăugate straturi (layers) de securitate. Dintre aceste straturi de securitate pot fi menționate: firewall-urile, permisiunile udo+rwx, politici pentru parole, criptare, autentificare, etc. Oricum, toate aceste modalități de a securiza un sistem nu acționează la nivelul cel mai de jos al unui sistem de operare. Din această cauză, aceste metode de securitate sunt considerate Discretionary Access Control (sau DAC - controlul discreționar al accesului).
Dar SELinux, care face și el parte din aceste straturi de securitate, acționează la nivelul cel mai de jos al sistemului de operare, fiind, de fapt, inclus în kernelul Linux. Din această cauză, SELinux este denumit Mandatory Access Control (sau MAC - control obligatoriu al accesului).
Dar cum acționează împreună toate aceste metode de securizare a sistemului? Dacă, spre exemplu, un proces vrea să acceseze un fișier de configurare, acesta cere întâi aprobare de la straturile de securitate DAC, după care va obține și aprobarea stratului de securitate MAC (SELinux). În final, accesul este permis doar dacă are aprobarea tuturor straturilor de securitate (DAC și MAC).
Instrumente pentru SELinux
Chiar dacă pe sistemele Red Hat și derivate (CentOS, Fedora, etc.) SELinux vine preinstalat, pe alte distribuții (Ubuntu, Gentoo, etc.) poate fi instalat și activat ulterior. Sunt anumite pachete care pot face mai ușoară gestionarea acestuia:
- policycoreutils-python – pachetul furnizează comanda
semanage
- policycoreutils – oferă multe comenzi importante, cum ar fi
sestatus
,restorecon
,setsebool
- policycoreutils-gui - utilitar grafic de configurare pentru SELinux
- setools-console – furnizează comanda
sesearch
- setools-gui - instrument grafic de analiză a politicilor pentru SELinux
- setroubleshoot - permite vizualizarea mesajelor setroubleshoot-server
- setroubleshoot-server - instrumente de diagnoză a problemelor SELinux. Când un mesaj AVC (Access Vector Cache - voi vorbi în alt articol despre AVC) este generat, se generează și o alertă care poate da informații despre problema apărută și poate oferi ajutor în rezolvarea ei
- selinux-policy-doc - documentație politici SELinux
Instalarea acestora în CentOS sau Fedora se poate face cu comanda yum
sau dnf
:
sudo yum install policycoreutils-python policycoreutils-gui setools-console setools-gui setroubleshoot setroubleshoot-server
Mai multe informații generale despre SELinux pot fi aflate folosind comanda man:
man selinux
De asemenea, este interesant de citit și FAQ-ul oferit de NSA.
În articolele viitoare vom învăța despre modurile de funcționare ale SELinux, despre contexte, politici, atribute de securitate, AVC (Active Vector Cache), probleme și rezolvarea lor.
[…] instrumentul sesearch (parte a pachetului setools-console, așa cum am menționat în primul articol despre SELinux). Comanda de mai jos caută prin toate politicile SELinux și afișează pe o singură linie […]