SELinux Fedora – Guida base, descrizione,utilizzo

Sab, 10/09/2011 - 15:42

SELinux Fedora – Guida base, descrizione,utilizzo

Inviato da sagitter 1 commento

SELinux (Security-Enhanced Linux)

SELinux non è:

- un software antivirus
- un’alternativa alle password, ai firewall o altri sistemi di sicurezza
- una completa soluzione per la sicurezza del sistema

Molti S.O. (incluso Linux) usano un sistema DAC (Discretionary Access Control) che controlla come i soggetti (utenti, programmi, processi) interagiscono con gli oggetti (files, dispositivi) e come soggetti interagiscono con altri soggetti; in un sistema come questo gli utenti controllano i permessi dei propri file (oggetti). Ad esempio, nei sistemi Linux, ogni user può creare la propria home directory interamente leggibile, dando accesso ad altri utenti o processi (soggetti).
Un sistema DAC tuttavia risulta particolarmente inadeguato per una forte sicurezza, in quanto ogni sua regola è basata sull’identità dell’utente, ignorando altre informazioni rilevanti per la sicurezza, come il “ruolo” dello specifico utente, le funzioni e l’affidabilità dei programmi, sensibilità e integrità dei dati. Inoltre, qualsiasi programma avviato dall’utente ne eredita i permessi ed è libero di cambiare le regole di accesso ai file, così da esporre a minacce da software malevole.

Di seguito un esempio di permessi usati in un sistema Linux nel quale non è abilitato SElinux:

$ ls -l file1
-rwxrw-r-- 1 user1 group1 0 2009-04-30 15:42 file1

Le prime tre lettere -rwx (read/write/execute) indicano i permessi dello user1 sul file indicato, le successive rw- indicano i permessi del gruppo1, gli ultimi r– indica i permessi di chiunque altro.

Security-Enhanced Linux (SELinux) integra il sistema MAC (Mandatory Access Control) nel Linux Kernel, abilitato in default in Fedora.
Tale sistema “obbliga” a seguire le indicazioni delle security policy(regole di sicurezza) riguardo a tutti i processi e i file di sistema, basandosi sulle informazioni contenute nelle etichette (labels). Quando giustamente implementato, permette un adeguata protezione del sistema e offre supporto sulla sicurezza delle applicazioni; il MAC provvede all’isolamento delle applicazioni inaffidabili e ne limita i potenziali danni.

Verifica attività SELinux

Da terminale:

$ /usr/sbin/getenforce
 

oppure

# /usr/bin/system-config-selinux

Modalità enforcing (forzata): è la modalità in default di Fedora; prevede che SELinux agisca in base alle regole di sicurezza fornitegli con gli aggiornamenti selinux-policy rpm e selinux-policy-targeted rpm. Gli accessi negati sono listati e visualizzabili dal comando

# grep "denied" /var/log/messages

Modalità permissive (permissiva): nella modalità permissiva gli accessi non verranno negati, ma comunque ne rimarrà traccia come se lo fossero.

Modalità disabled : SELinux è disabilitato.

BENEFICI PRINCIPALI DI SELinux

—>Tutti i processi e i file sono etichettati come tipi. Ogni tipo definisce un “dominio” per processi ed uno per i file. Processi avviati dal proprio dominio sono separati da tutti gli altri e le policy rules definiscono come i processi interagiscono con i file o con altri processi. Un accesso è permesso solo se esiste una regola di sicurezza che lo specifica.

—>Controllo specifico degli accessi: amplia il tradizionale sistema di permessi UNIX® basato sugli user e i group; SELinux regola gli accessi sulla base di informazioni disponibili quali SELinux-user, ruolo, tipo e livello.

—>Riduce vulnerabilità dovute all’escalation dei privilegi.

Di seguito un esempio di etichetta che contiene informazioni sulla sicurezza usate da un processo, Linux-user o file, in un sistema Linux con SElinux abilitato; queste informazioni sono chiamate SELinux context e sono visualizzabili con il comando ls -Z:

$ ls -Z file1
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1

Nell’esempio, SELinux prevede un SELinux-user (unconfined_u), un ruolo ( rules ovvero l’insieme dei permessi garantiti, objet_r), un tipo o dominio (user_home_t) ed un livello (s0).
Con il DAC, l’accesso è controllato solo in base allo user Linux e all’ID group; le regole SELinux vengono controllate dopo le regole DAC: se queste ultime negano l’accesso, le regole SELinux non vengono usate.

Come detto, in un sistema con SELinux, tutti i processi e i file sono etichettati e controllati sulla base dei SELinux context; se queste informazioni fossero state errate o cambiate, potrebbe essere negato l’accesso a tali file o compromesso l’utizzo di software, con relativo avviso dal setroubleshoot.

Problemi di etichettatura.
Rientrano in questo caso, ad esempio, le etichettature di directory non-standard per un determinato servizio: ammettiamo che invece di usare /var/www/html/ per un sito web, un amministratore voglia usare la directory personalizzata /srv/myweb/; in Fedora, la directory /srv e tutte le relative sottocartelle sono del tipo “var_t”, inoltre tutte le nuove directory di alto livello (ad esempio /myserver/) vengono etichettate come “default_t”, di conseguenza SELinux impedirà al server HTTP Apache (httpd) l’accesso a questo tipo di directory. Per “regolarizzarle”, bisogna dire a SELinux che le directory /srv/myweb/ e /myserver/ sono di tipo httpd:

# /usr/sbin/semanage fcontext -a -t httpd_sys_content_t \ "/srv/myweb(/.*)?"
# /sbin/restorecon -R -v /srv/myweb

il primo comando configura il file-context e il secondo ne applica i cambiamenti.

Verifica “SELinux context”

$ /usr/sbin/matchpathcon -V /var/www/html/*
 
 
/var/www/html/index.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
 
/var/www/html/page1.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0

Il comando matchpathcon controlla il context del percorso indicato (in questo caso /var/www/html/), confrontandolo con quello in default fornitogli dalle SELinux-policy; l’esempio di output ottenuto dice che i file index.html e page1.html sono di tipo user_home_t, mentre dovrebbero essere di tipo httpd_sys_content_t; per correggere il context di un singolo file usiamo il comando restorecon:

# /sbin/restorecon -v /var/www/html/index.html
 
restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0

per correggere quello dell’intera directory usiamo l’opzione -R

# /sbin/restorecon -R -v /var/www/html/
 
restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
 
restorecon reset /var/www/html/index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0

Articolo estratto da fedora-os.org e liberamente tradotto dalla documentazione ufficiale del Fedoraproject.





Commenti

Ritratto di fdaluisio
#1

Inviato da fdaluisio il Sab, 10/09/2011 - 19:37.

Re: SELinux Fedora – Guida base, descrizione,utilizzo

bello davvero, complimenti!