Panoramica
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. Originariamente sviluppato dall'Agenzia di sicurezza nazionale statunitense (NSA) come serie di patch per il kernel Linux, tale sistema di controllo utilizza i moduli di sicurezza Linux (LSM).
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 di accesso per le applicazioni, i processi e i file su un sistema. Si basa su controlli di sicurezza, ovvero una serie di regole che indicano a SELinux gli elementi a cui è possibile accedere o meno, in modo da applicare il criterio di accesso consentito.
Quando un'applicazione o un processo, che prende il nome di soggetto, effettua una richiesta di accesso a un oggetto, ad esempio un file, SELinux consulta una cache dei vettori di accesso (AVC) in cui sono memorizzate le autorizzazioni per soggetti e oggetti.
Se, basandosi sulle autorizzazioni nella cache, non è possibile determinare l'accesso, SELinux invia la richiesta al server di sicurezza che verifica il contesto di sicurezza dell'app o del processo e quello del file. Il contesto di sicurezza applicato è quello disponibile nel database dei criteri di SELinux e, a questo punto, l'autorizzazione viene concessa o negata.
Se l'autorizzazione è negata, in /var/log.messages viene registrato un messaggio "avc: denied".
Configurazione di SELinux
Puoi configurare SELinux in vari modi per proteggere il sistema. I più comuni sono costituiti da criteri mirati e dalla sicurezza multilivello (MLS).
I criteri mirati costituiscono l'opzione predefinita, che copre una vasta gamma di processi, attività e servizi. La sicurezza multilivello può essere complessa e in genere viene utilizzata solamente dalle organizzazioni governative.
Per determinare le applicazioni che il sistema è autorizzato a eseguire, puoi consultare il file /etc/sysconfig/selinux, che include una sezione in cui è specificato se SELinux è in modalità permissive, enforcing, o disabilitato, indicando anche i criteri caricati.
Etichettatura e applicazione del tipo di etichetta in SELinux
L'assegnazione di etichette e l'applicazione del tipo di etichetta sono i due concetti cardine in SELinux.
SELinux opera come sistema di etichettatura, associando un'etichetta SELinux a ciascun file, processo e porta di un sistema. Le etichette costituiscono un metodo logico per raggruppare gli oggetti e vengono gestite dal kernel durante la fase di avvio.
Le etichette sono in formato utente:ruolo:tipo:livello (livello è facoltativo). Utente, ruolo e livello vengono utilizzati nelle implementazioni più avanzate di SELinux, ad esempio quelle che utilizzano la sicurezza multilivello. Per i criteri mirati, il tipo di etichetta è l'elemento imprescindibile.
Sulla base dell'applicazione del tipo di etichetta, SELinux applica un criterio definito nel sistema. L'applicazione del tipo è la parte di un criterio SELinux che specifica se un processo in esecuzione con un determinato tipo può accedere a un file etichettato con un altrettanto tipo specifico.
Abilitazione di SELinux
Se nel tuo ambiente SELinux è stato disabilitato, puoi abilitarlo modificando /etc/selinux/config e impostando SELINUX=permissive. Dal momento che SELinux al momento non è abilitato, non è consigliabile impostare subito la modalità enforcing, perché probabilmente le etichette degli oggetti nel sistema non sono corrette e questo potrebbe impedirne l'avvio.
Puoi imporre al sistema di riapplicare le etichette nel file system automaticamente, creando un file vuoto denominato .autorelabel nella directory radice e riavviando il sistema. Se nel sistema sono presenti troppi errori, devi eseguire un riavvio mentre è attiva la modalità permissive, al fine di completare correttamente la procedura di avvio. Terminata la riapplicazione di tutte le etichette, imposta SELinux sulla modalità enforcing tramite /etc/selinux/config, quindi riavvia il sistema o esegui setenforce 1.
Gli amministratori di sistema che non hanno familiarità con la riga di comando possono utilizzare vari strumenti grafici per gestire SELinux.
SELinux garantisce un ulteriore livello di sicurezza del sistema, integrato nelle distribuzioni di Linux, che dovrebbe rimanere sempre attivo per proteggere il sistema qualora venga compromesso.
Differenza fra controllo d'accesso discrezionale (DAC) e controllo d'accesso vincolato (MAC)
Mentre i sistemi Linux e UNIX usano da sempre DAC, SELinux è un esempio di sistema MAC per Linux.
Con il controllo DAC, i file e i processi hanno un proprietario. Un file può appartenere a un utente, a un gruppo o a qualsiasi altra entità. Gli utenti hanno la possibilità di modificare le autorizzazioni dei propri file.
Con il sistema DAC, l'utente root ha il controllo completo dell'accesso e, con questo tipo di privilegi, può accedere ai file di qualsiasi altro utente o eseguire qualunque altra operazione nel sistema.
Invece nei sistemi di controllo MAC, come SELinux, l'accesso è gestito da criteri impostati a livello di amministratore. Anche se le impostazioni DAC della home directory vengono modificate, i criteri SELinux impostati per impedire ad altri utenti o processi di accedere alla directory garantiscono la protezione del sistema.
I criteri SELinux consentono di configurare impostazioni specifiche per numerosi processi. Puoi modificare le impostazioni con SELinux in modo da limitare l'accesso fra utenti, file, directory e altri elementi.
Gestione degli errori in SELinux
Se in SELinux si verificano degli errori, generalmente indicano uno dei quattro problemi comuni riportati di seguito, che occorre risolvere:
- Le etichette sono sbagliate. Se l'etichettatura applicata non è corretta, puoi utilizzare gli strumenti disponibili per correggere le etichette.
- È necessario correggere un criterio. Potrebbe essere necessario comunicare a SELinux una modifica che hai apportato oppure correggere un determinato criterio. Per apportare la correzione puoi usare i moduli booleani o quelli dei criteri.
- Il criterio contiene un bug. Il criterio potrebbe presentare un bug che deve essere corretto.
- Si è verificata una violazione del sistema. Anche se SELinux può proteggere i tuoi sistemi in molti scenari, esiste comunque la possibilità che un sistema venga compromesso. Se sospetti una violazione, devi intervenire immediatamente.
Cosa sono i valori booleani?
I valori booleani sono impostazioni di tipo On/Off per le funzioni di SELinux. Esistono centinaia di impostazioni che consentono di attivare o disattivare le funzionalità di SELinux, e molte sono già predefinite. Per identificare i valori booleani già impostati nel sistema, puoi eseguire getsebool -a.
Le soluzioni sicure di Red Hat
Red Hat Enterprise Linux è leader mondiale tra le piattaforme Linux open source. Consente di mitigare i rischi, applicare configurazioni e policy di sicurezza e ottimizzare le strategie per soddisfare i requisiti 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.