Una guia per a principiants a SELinux

Una guia per a principiants a SELinux

Traducció de l'article preparat per als estudiants del curs "Seguretat de Linux"

SELinux o Security Enhanced Linux és un mecanisme de control d'accés millorat desenvolupat per l'Agència de Seguretat Nacional (NSA) dels EUA per evitar intrusions malicioses. Implementa un model de control d'accés forçat (o obligatori (English Mandatory Access Control, MAC) a sobre del model discrecional (o selectiu) existent (English Discretionary Access Control, DAC), és a dir, permisos per llegir, escriure, executar.

SELinux té tres modes:

  1. Enfortiment — denegació d'accés basat en les regles de la política.
  2. Permisiu — mantenir un registre de les accions que infringeixen la política, que estaria prohibida en el mode d'execució.
  3. Discapacitat - desactivació completa de SELinux.

Per defecte, la configuració està en /etc/selinux/config

Canvi de modes de SELinux

Per esbrinar el mode actual, executeu

$ getenforce

Per canviar el mode a permissiu, executeu l'ordre següent

$ setenforce 0

o, per canviar de mode permissiu en aplicant, executar

$ setenforce 1

Si necessiteu desactivar completament SELinux, això només es pot fer mitjançant el fitxer de configuració

$ vi /etc/selinux/config

Per desactivar-lo, canvieu el paràmetre SELINUX de la següent manera:

SELINUX=disabled

Configuració de SELinux

Cada fitxer i procés està marcat amb un context SELinux, que conté informació addicional com ara usuari, rol, tipus, etc. Si és la primera vegada que activeu SELinux, primer haureu de configurar el context i les etiquetes. El procés d'assignació d'etiquetes i context es coneix com a etiquetatge. Per començar a marcar, al fitxer de configuració canviem el mode a permissiu.

$ vi /etc/selinux/config
SELINUX=permissive

Després de configurar el mode permissiu, creeu un fitxer ocult buit a l'arrel amb el nom autorelabel

$ touch /.autorelabel

i reinicieu l'ordinador

$ init 6

Nota: fem servir el mode permissiu per marcar, des de l'ús del mode aplicant pot provocar que el sistema es bloquegi durant el reinici.

No us preocupeu si la descàrrega s'encalla en algun fitxer, el marcatge triga una estona. Un cop s'hagi completat el marcatge i s'hagi arrencat el sistema, podeu anar al fitxer de configuració i establir el mode aplicanti també executar:

$ setenforce 1

Ara heu habilitat correctament SELinux al vostre ordinador.

Seguiment dels registres

És possible que hàgiu trobat alguns errors durant el marcatge o mentre el sistema s'està executant. Per comprovar si el vostre SELinux funciona correctament i si no bloqueja l'accés a cap port, aplicació, etc., heu de mirar els registres. El registre de SELinux es troba a /var/log/audit/audit.log, però no cal llegir-ho tot per trobar errors. Podeu utilitzar la utilitat audit2why per trobar errors. Executeu l'ordre següent:

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

Com a resultat, rebreu una llista d'errors. Si no hi ha errors al registre, no es mostrarà cap missatge.

Configuració de la política SELinux

Una política de SELinux és un conjunt de regles que regeixen el mecanisme de seguretat de SELinux. Una política defineix un conjunt de regles per a un entorn específic. Ara aprendrem a configurar polítiques per permetre l'accés als serveis prohibits.

1. Valors lògics (interruptors)

Els commutadors (booleans) us permeten canviar parts d'una política en temps d'execució, sense haver de crear noves polítiques. Us permeten fer canvis sense reiniciar ni recompilar les polítiques de SELinux.

Exemple
Suposem que volem compartir el directori d'inici d'un usuari mitjançant FTP de lectura/escriptura i ja l'hem compartit, però quan intentem accedir-hi, no veiem res. Això es deu al fet que la política SELinux impedeix que el servidor FTP llegeix i escrigui al directori inicial de l'usuari. Hem de canviar la política perquè el servidor FTP pugui accedir als directoris d'inici. Anem a veure si hi ha algun interruptor per a això fent

$ semanage boolean -l

Aquesta ordre enumerarà els interruptors disponibles amb el seu estat actual (activat o desactivat) i la descripció. Podeu refinar la cerca afegint grep per trobar resultats només per ftp:

$ semanage boolean -l | grep ftp

i trobareu el següent

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

Aquest interruptor està desactivat, així que l'habilitarem amb setsebool $ setsebool ftp_home_dir on

Ara el nostre dimoni ftp podrà accedir al directori inicial de l'usuari.
Nota: també podeu obtenir una llista dels interruptors disponibles sense descripció fent getsebool -a

2. Etiquetes i context

Aquesta és la forma més habitual d'implementar la política SELinux. Cada fitxer, carpeta, procés i port està marcat amb el context SELinux:

  • Per a fitxers i carpetes, les etiquetes s'emmagatzemen com a atributs ampliats al sistema de fitxers i es poden veure amb l'ordre següent:
    $ ls -Z /etc/httpd
  • Per als processos i els ports, l'etiquetatge el gestiona el nucli i podeu veure aquestes etiquetes de la següent manera:

procés

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Exemple
Vegem ara un exemple per entendre millor les etiquetes i el context. Suposem que tenim un servidor web que, en lloc d'un directori /var/www/html/ использует /home/dan/html/. SELinux considerarà això una violació de la política i no podreu veure les vostres pàgines web. Això es deu al fet que no hem establert el context de seguretat associat als fitxers HTML. Per veure el context de seguretat predeterminat, utilitzeu l'ordre següent:

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

Aquí tenim httpd_sys_content_t com a context per als fitxers html. Hem d'establir aquest context de seguretat per al nostre directori actual, que actualment té el context següent:

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

Una ordre alternativa per comprovar el context de seguretat d'un fitxer o directori:

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

També utilitzarem semanage per canviar el context un cop hem trobat el context de seguretat correcte. Per canviar el context de /home/dan/html, executeu les ordres següents:

$ 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

Després de canviar el context mitjançant semanage, l'ordre restorecon carregarà el context predeterminat per a fitxers i directoris. El nostre servidor web ara podrà llegir fitxers de la carpeta /home/dan/htmlperquè el context de seguretat d'aquesta carpeta s'ha canviat a httpd_sys_content_t.

3. Crear polítiques locals

Pot haver-hi situacions en què els mètodes anteriors no us serveixen de res i obtingueu errors (avc/denial) a audit.log. Quan això succeeix, heu de crear una política local. Podeu trobar tots els errors mitjançant audit2why, tal com es descriu anteriorment.

Podeu crear una política local per resoldre errors. Per exemple, obtenim un error relacionat amb httpd (apache) o smbd (samba), analitzem els errors i creem una política per a ells:

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

Aquí http_policy и smb_policy són els noms de les polítiques locals que vam crear. Ara hem de carregar aquestes polítiques locals creades a la política SELinux actual. Això es pot fer de la següent manera:

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

Les nostres polítiques locals s'han baixat i ja no hauríem de rebre cap avc o denail a audit.log.

Aquest va ser el meu intent d'ajudar-vos a entendre SELinux. Espero que després de llegir aquest article us sentiu més còmodes amb SELinux.

Font: www.habr.com

Afegeix comentari