Lavorare con SELinux

Selinux3

Nel post di oggi impareremo a lavorare un po' su SELinux, capendo un po' meglio come funziona questo fantastico programma.

 

 


TARGETED POLICY
La suddetta policy è impostata di default su Fedora 20. Quando è impostata assegna a ogni processo un target, a seconda del suo valore SELinux assegnerà un dominio che può essere Confined o Unconfined.
Entrambi i domini sono soggetti a periodici controlli per il check dei permessi di lettura, scrittura edesecuzione.
Per intenderci, i processi che vengono eseguiti in un dominio Confined, non possono scrivere su parti di memoria etichettata come scrivibile e poi eseguirla. Questo riduce la possibilità di attacchi buffer overflow.

 

 

CONFINED PROCESS
In Fedora, per esempio, ogni processo che è un ascoltatore sulle reti network ha un dominio Confined. Come abbiamo detto, SELinux impedisce di leggere e scrivere all'infuori del proprio dominio.
Giusto per fare un esempio, prendiamo il processo httpd. Questo programma è un listener del sistema network all'interno del sistema operativo. In quanto listener, è etichettato da SELinux come confined process. Questo perché httpd, manovrato a dovere, può accedere a file che possono avere una certa sensibilità.
Per questo motivo SELinux gli assegna un dominio (abbiamo visto che cosa è in questo post) e se httpd accede a un file all'infuori di esso, il sistema di sicurezza indicherà al sistema operativo di applicare un kill al suddetto processo.

 

 

UNCONFINED PROCESS
I processi etichettati come Unconfined sono, ovviamente, eseguiti in domini Unconfined_t.
Per questi processi le regole di SELinux sono comunque attive. L'unica differenza è che, essendo il loro dominio non confinato, possono accedere a tutti i file che sono previsti al sistema di sicurezza DAC (Quello dei permessi classici, ne abbiamo parlato qua).
Quindi se un processo etichettato come Unconfined è compromesso, SELinux non potrà intervenire in quanto il sistema di sicurezza agisce al di sopra del sistema DAC, non al suo livello.

 

 

BOOLEANI
Come abbiamo visto SELinux segue una specifica policy per proteggerci. Una policy è un insieme di regole determinano il comportamento del programma rispetto agli altri processi.
Le policy che sono implementate, e che sono disponibili sulle maggiori distribuzioni Linux, sono poche e definite dallo sviluppatore. Le principali sono:

  • Targeted;
  • MLS

Ok, ma qual'è la conseguenza di tutto ciò?
Semplicemente, è che il processo di decisione è troppo rigido. Se ci serve che SELinux non blocchi un processo o viceversa, si dovrebbe  modificare e ricompilare la policy.
Proprio per ovviare a questa estrema rigidità, ci vengono in aiuto i booleani. Grazie a loro possiamo modificare la policy anche in fase di runtime.
Per capire meglio cosa sono diamo:

semanage boolean -l

Avremo un listato di tutti i booleani a nostra disposizione.

 

booleani

 

Il listato è diviso in colonne. La prima riguarda il nome del processo. La seconda il valore del booleano e poi una piccola descrizione.
Ora proviamo  a modificare il valore di uno di questi booleani. Per farlo diamo da terminale:

setsebool nome_processo X

dove al posto di X dovremo inserire on oppure off a seconda se vogliamo abilitarlo o no. Ovviamente questi cambiamenti dureranno solamente fino al primo reboot.

Per mantenere permanentemente i valori settati da noi, ci basta aggiungere l'opzione -P, che sta per Permanent, e quindi:

setsebool -P nome_processo X

 

 

SELINUX LABELED
- Type:
Come abbiamo detto, nei sistemi con SELinux installato, i file sono classificati grazie a delle label. Le possiamo vedere dando:

ls -Z file

Tutte queste label, per SELinux rappresentano i contesti dei file. Per cambiare il type temporaneamente usiamo il comando:

chon -t type file_da_modificare

dove al posto di type dovremo inserire il tipo del contesto da assegnargli.
Se però vogliamo modificare il tipo di una cartella e tutti i file da essa contenuti, gli passiamo anche il parametro -R.

Per applicare definitivamente i cambiamenti daremo lo stesso comando, però con il parametro -v.

- Context:
Per modificare il contensto dovremo affidarci ad un altro comando:

semanage fcontext
Tutti i cambiamenti che andremo a fare saranno confrontati con il file:
  /etc/selinux/targeted/contexts/files/file_contexts;

Se i cambiamenti saranno accettati, allora sarà aggiornato anche il file stesso e il file_context.
Si modificheranno i file o le directory con il comando:

semanage fcontext -a options file-name oppure directory-name

Attenzione: al posto di file-name o directory-name vi andrà il path assoluto del file.
Successivamente, se saremo soddisfatti del lavoro fatto, renderemo permanenti le modifiche con:

restorecon -v file-name oppure directory-name

 

 

CONCLUSIONE
Con quest'ultima carrellata di comandi, termina questa mini serie su SELinux. Abbiamo imparato che cosa è, a che cosa serve, come installarlo e infine come usarlo.
Ovviamente il noi vi abbiamo fornito una piccola infarinatura riguardo SELinux, molto altro potrete trovarlo sul sito ufficiale o sulla documentazione ufficiale.

 

Link alle altre puntate:

 

 

FONTI:

Dottore in Informatica. Appassionato di computer fin dal primo PC Olivetti con Windows 95 e la bellezza di 8 MB di RAM.
Utilizzatore Linux da 5 anni, credo profondamente nella filosofia open source.
Dopo tante distro provate sul mio fidato Toshiba, uso Fedora per lo studio e il divertimento.

Lascia un commento