Linux SELinux

Da Andreabont's Wiki.

SELinux è un sistema di sicurezza implementato in Linux di tipo MAC (mandatory access control).
In Linux prima vengono controllati i permessi standard, se questi danno esito positivo allora passa a controllare eventuali regole SELinux.

Modalità

Per visualizzare l'attuale stato si SELinux si più usare il comando sestatus, se è abilitato lo possiamo trovare in due modalità:

  • Enforcing: Le regole vengono fatte rispettare.
  • Permissive: Le regole vengono controllate e gli eventi negativi loggati, ma non ci sono limitazioni nell'uso del sistema.
[root@pc ~]# getenforce 
Enforcing
[root@pc ~]# setenforce 
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]

Contesto

ls -Z file1
-rw-rw-r--. user1 group1 unconfined_u:object_r:user_home_t:s0 fil

In SELinux ogni file, processo e utente è trattato come un "oggetto" avente un contesto. Questo contesto è una stringa formata da 4 sezioni separate da un ":".

Nell'esempio SELinux fornisce un utente (unconfined_u), un ruolo (object_r), un tipo (user_home_t), ed un livello (s0)

Sezione Spiegazione
Utente E' una identità nota a SELinux, non corrisponde con gli utenti del PC, essa è associata ad un certo numero di ruoli. Per permettere il funzionamento del controllo, ogni utente del PC viene associato ad un'utenza SELinux, secondo regole definibili. La lista degli utenti è salvata in /etc/selinux/targeted/seusers
Ruolo SELinux implementa il controllo d'accesso basato sui ruoli (Role-Based Access Control - RBAC). Un ruolo è associato ai domini a cui può accedere. Questo valore fa da intermediario tra l'Utente e il Dominio.
Tipo/Dominio Tipo (per i file) o Dominio (per i processi) indicano un particolare gruppo di oggetti che sono logicamente legati. Le policy di SELinux definiscono le interazioni tra domini.
Livello Il livello implementa la MLS (Multi-Level Security) e la MCS (Multi-Category Security). La sintassi è di tipo "sensibilità-categoria", se i valori sono identici è possibile scriverlo una volota sola per abbreviare. La lista dei livelli disponibili nel sistema la si può trovare sotto /etc/selinux/targeted/setrans.conf

Per modificare un contesto di un file è possibile usare il comando chcon.

Per visualizzare tutti i contesti presenti nel sistema usare:

semanage fcontext -l

Booleane

Sono una serie di flag che possono essere on oppure off per gestire a runtime una serie di permessi standard, senza dover settare SELinux da zero.

E' possibile vedere una lista di tutte le booleane disponibili nel sistema tramite il comando semanage boolean -l eseguito da root.

Per visualizzare le booleane attive e il loro valore è possibile usare il comando getsebool –a.

Per settare una booleana si usa getsebool <nome> <true/false>

[root@pc ~]# semanage boolean -l
SELinux boolean                State  Default Description

ftp_home_dir                   (off  ,  off)  Allow ftp to read and write files in the user home directories
...