Cos'è SELinux?
Security-Enhanced Linux (SELinux) è un'architettura di sicurezza per i sistemi Linux®, che offre agli amministratori un livello di controllo superiore sugli utenti autorizzati ad accedere al sistema. Tale sistema di controllo, che utilizza i moduli di sicurezza Linux (LSM, Linux Security Modules), è stato originariamente sviluppato dall'Agenzia di sicurezza nazionale (NSA) statunitense come serie di patch per il kernel Linux.
SELinux è stato condiviso con la community open source nel 2000 e integrato nel kernel Linux upstream nel 2003.
Come funziona SELinux?
SELinux definisce i controlli degli accessi alle applicazioni, ai processi e ai file di un sistema tramite le policy di sicurezza: si tratta di un insieme di regole che indicano a quali elementi è consentito accedere in base a una data policy.
Quando un'applicazione o un processo, ovvero un soggetto, richiede di accedere a un oggetto (es. un file), SELinux verifica dove sono state salvate le autorizzazioni per i soggetti e gli oggetti tramite un'Access Vector Cache (AVC).
Se non è in grado di prendere una decisione sull'accesso in base alle autorizzazioni salvate nella cache, SELinux invia la richiesta al server di sicurezza, che verifica il file e il contesto di sicurezza dell'app o del processo. Tale contesto viene applicato a partire dal database delle policy di SELinux, e l'autorizzazione viene quindi concessa o negata.
In quest'ultimo caso, in /var/log.messages comparirà un messaggio "avc: denied".
Come configurare SELinux
Per proteggere il sistema è possibile scegliere tra diverse opzioni di configurazione di SELinux; le più comuni sono la policy mirata e la sicurezza multilivello (MLS).
La policy mirata è l'opzione predefinita e si può utilizzare con numerosi processi, attività e servizi, mentre l'MLS può essere molto complicata e solitamente viene impiegata solo dalle organizzazioni governative.
È possibile stabilire quale sia la soluzione migliore per un sistema consultando /etc/sysconfig/selinux: questo file include una sezione che indica se SELinux è disattivato oppure impostato sulla modalità enforcing o permissive, e quale policy deve essere caricata.
Etichettatura e type enforcement in SELinux
L'etichettatura e il type enforcement sono i concetti più importanti in SELinux.
SELinux funziona come un sistema di etichettatura: ciò significa che tutti i file, i processi e le porte di un sistema sono associati a un'etichetta SELinux. Le etichette sono un modo logico per raggruppare gli elementi, e vengono gestite dal kernel durante la fase di avvio.
Seguono il formato user:role:type:level ("level" è opzionale). "User", "role" e "level" vengono utilizzati nelle implementazioni più avanzate di SELinux, come l'MLS, mentre il "type" dell'etichetta è l'elemento più importante per la policy mirata.
SELinux adopera il type enforcement per applicare una policy definita sul sistema. Il type enforcement è la componente di una policy SELinux che stabilisce se un processo in esecuzione di un tipo specifico può accedere a un file etichettato di un tipo specifico.
Come attivare SELinux
Se SELinux è stato disattivato nel tuo ambiente, è possibile abilitarlo modificando /etc/selinux/config e selezionando l'opzione SELINUX=permissive. Quando riattiviamo SELinux, è preferibile non selezionare subito la modalità enforcing, poiché è probabile che il sistema applichi le etichette in modo errato, con conseguenti problemi all'avvio del sistema.
Per forzare la rietichettatura automatica del filesystem da parte del sistema, è necessario creare nella directory principale un file vuoto denominato .autorelabel e poi eseguire il riavvio. Se il sistema presenta troppi errori, il riavvio deve essere effettuato in modalità permissive affinché vada a buon fine. Una volta che la rietichettatura è stata completata, bisogna impostare SELinux in modalità enforcing con /etc/selinux/config e procedere con il riavvio, oppure si deve eseguire setenforce 1.
Nel caso in cui un amministratore di sistema non abbia molta familiarità con la riga di comando, sono disponibili alcuni strumenti grafici per la gestione di SELinux.
SELinux offre un livello di sicurezza aggiuntivo per il sistema, già integrato nelle distribuzioni Linux. È consigliabile mantenerlo attivo, in modo che possa proteggere il sistema in caso di compromissione.
Quanto conosci Linux?
Testa le tue conoscenze e ottieni i badge Legends of Linux trivia.
Controllo degli accessi discrezionale (DAC) e vincolato (MAC) a confronto
In passato, i sistemi Linux e UNIX hanno utilizzato il DAC, ma SELinux è un esempio di un sistema MAC per Linux.
Con il DAC, i file e i processi hanno dei proprietari. Un utente, un gruppo o un qualunque altro soggetto può possedere un file e modificarne le autorizzazioni.
Con un sistema DAC, l'utente root ha il controllo totale degli accessi. L'accesso root consente di accedere ai file di qualunque altro utente o eseguire qualsiasi tipo di azione sul sistema.
Nei sistemi MAC come SELinux, invece, è impostata una policy amministrativa relativa all'accesso. Anche se le impostazioni DAC nella home directory vengono modificate, è possibile proteggere il sistema attivando una policy SELinux che impedisca ad altri utenti o processi di accedere alla directory.
Le policy SELinux consentono di essere specifici e trattare un ampio numero di processi. Con SELinux si possono implementare modifiche per limitare l'accesso tra utenti, file, directory e altro ancora.
Come gestire gli errori di SELinux
La segnalazione di un errore in SELinux indica la presenza di un problema da risolvere. Le quattro tipologie più comuni sono le seguenti:
- Le etichette non sono corrette. In caso di etichettatura errata, è possibile utilizzare gli strumenti di correzione appositi.
- Una policy deve essere modificata. Ciò può significare che bisogna informare SELinux di una modifica effettuata, oppure che è necessario correggere una policy utilizzando i moduli specifici o i valori booleani.
- La policy presenta un bug. Potrebbe trattarsi di un bug da correggere all'interno della policy.
- Si è verificata una violazione del sistema. Malgrado SELinux sia in grado di offrire protezione in molte situazioni, può comunque succedere che un sistema venga compromesso. In caso di sospetta violazione è necessario prendere immediatamente provvedimenti.
Cosa sono i valori booleani?
I valori booleani sono impostazioni che consentono di attivare e disattivare le funzioni in SELinux. Esistono centinaia di impostazioni per abilitare e disabilitare le funzionalità di SELinux, molte delle quali sono già predefinite. Per scoprire i valori booleani preimpostati nel sistema è necessario eseguire getsebool -a.
Sicurezza e compliance secondo Red Hat: obiettivi in primo piano
Le soluzioni open source di Red Hat offrono strumenti e piattaforme per superare le problematiche relative a sicurezza e compliance, grazie alle capacità di sicurezza integrate. Guarda il video per sapere di più. (Sottotitoli in italiano disponibili.)
Perché scegliere Red Hat?
Red Hat Enterprise Linux è la piattaforma Linux open source leader mondiale, che consente di mitigare i rischi, applicare configurazioni e policy di sicurezza e ottimizzare la tua strategia di conformità.
I ruoli di sistema di Red Hat Enterprise Linux sono un insieme di ruoli Ansible® supportati che forniscono flussi di lavoro coerenti e semplificano l'esecuzione delle attività manuali. I ruoli di sistema supportano i team nell'automazione della sicurezza dei flussi di lavoro e nella manutenzione in modo scalabile, riducendo al minimo l'uso delle risorse e semplificando i requisiti di gestione e conformità. Con il ruolo di sistema SELinux è possibile automatizzare il deployment e la gestione di SELinux. Tra i vantaggi che offre:
- attivazione di SELinux attraverso le modalità enforcing o permissive per garantire controlli coerenti;
- personalizzazione dei valori booleani, dei file context, delle porte e dei login in SELinux al fine di soddisfare i requisiti;
- utilizzo del ruolo di sistema per riconciliare i file context su file o directory specifici.