Breve guida su SElinux

Premesso che per i server esposti direttamente su Internet la sicurezza non è mai troppa, è sempre buona norma abilitare, lato sistema operativo, dei meccanismi stringenti per il coltrollo degli accessi.
In particolare, le principali tecniche di questo tipo sono 3, ovvero: 1) DAC (Discretionary Access Control), in cui è l'owner (proprietario) del file o della directory a decidere chi (e come) può averne accesso; 2) RBAC (Role Based Access Control), in cui i permessi associati a ciascun utente sono strettamente correlati al loro ruolo (ne sono un tipico esempio le view della CLI relativa ai dispositivi Cisco, oppure i meccanismi di AAA previsti nell'ambito del protocollo TACACS+); 3) MAC (Mandatory Access Control), in cui è il sistema operativo stesso a decidere chi (e come) può avere accesso ad un file o ad una directory (tale concetto, nel caso dei sistemi *nix, è estendibile anche a thread e processi, poichè in Unix everything is a file).
SElinux fa parte di questa categoria.
Logica di funzionamento SElinux non fa altro che associare un security context  a ciascun elemento che compone il sistema operativo.
Il security context presenta il seguente formato: user:role:domain:level e l'interazione è consentita (di default) solo tra gli elementi appartenenti al medesimo contesto.
Inoltre, il file di log in cui vengono salvati gli eventi generati da SElinux è audit.log, presente all'interno della directory /var/log/audit.
Analizzando questo file è possibile capire se un determinato processo (o utente) che cerca di accedere ad un determinato file (o directory) è stato autorizzato o bloccato.
Un esempio di accesso bloccato è il seguente: type=AVC msg=audit(1443184099.487:4197): avc:  denied  { open } for  pid=15608 comm="submit_check_re" name="nagios.cmd" dev=dm-0 ino=394145 scontext=system_u:system_r:snmpd_t:s0 tcontext=system_u:object_r:nagios_spool_t:s0 tclass=fifo_file type=SYSCALL msg=audit(1443184099.487:4197): arch=c000003e syscall=2 success=no exit=-13 a0=1b8f490 a1=401 a2=1b6 a3=76 items=0 ppid=15607 pid=15608 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="submit_check_re" exe="/bin/bash" subj=system_u:system_r:snmpd_t:s0 key=(null) Analizzando il suddetta entry si possono notare alcuni elementi distintivi: type=AVC ovvero l'azione bloccata è stata effettuata a livello di kernel (AVC) e non di user space (USER-AVC) msg=audit(1443184099.487:4197): che rappresenta lo Unix timestamp associato all'evento; avc:  denied  { open } in cui viene indicata [...]

Leggi tutto l'articolo