3 Novembre 2022

Cos’è SELinux?

Security-Enhanced Linux (SELinux) è un’architettura di sicurezza per sistemi Linux®

SELinux

Security-Enhanced Linux (SELinux) è un’architettura di sicurezza per sistemi Linux® che consente agli amministratori di avere un maggiore controllo su chi può accedere al sistema. È stato originariamente sviluppato dalla National Security Agency (NSA) degli Stati Uniti come una serie di patch per il kernel Linux utilizzando Linux Security Modules (LSM).

SELinux, un acronimo che sta per Security-Enhanced Linux, rappresenta una collezione avanzata di patch di sicurezza sviluppate per il kernel del sistema operativo Linux. Il suo scopo principale è fornire controlli di accesso rafforzati e specifici per una varietà di servizi e applicazioni che operano all’interno del sistema.

La genesi di SELinux risiede nei progetti inizialmente condotti dalla National Security Agency degli Stati Uniti. Dopo il suo rilascio, SELinux è rapidamente emerso come un elemento essenziale e affidabile nel panorama della sicurezza informatica open source. Il principale contributo di SELinux alla sicurezza di un sistema Linux è l’implementazione di un sistema di limitazione dei privilegi. Questo sistema limita l’impatto che una determinata applicazione può avere sul funzionamento generale del sistema, minimizzando quindi i danni complessivi che una potenziale breccia di sicurezza potrebbe causare.

Prima di addentrarsi nel funzionamento specifico di SELinux, è necessario comprendere il concetto di “correttezza” nel contesto dell’informatica. La correttezza è un termine che descrive quanto accuratamente un programma informatico produce risultati attesi in base alle specifiche del sistema. Per illustrare questo concetto, si può pensare ad un’applicazione progettata per aprire file immagine: se tale applicazione riesce ad aprire correttamente il file immagine come progettato, si può affermare che ha un alto grado di correttezza. Questo concetto può essere esteso a qualsiasi programma, applicazione o funzione che opera all’interno di un sistema informatico.

In un sistema che non implementa SELinux, la sicurezza complessiva dipende dalla correttezza del kernel e da quella di qualsiasi applicazione che gode di privilegi. Questo significa che se ci sono errori o guasti nelle applicazioni privilegiate o nelle loro configurazioni, l’intero sistema potrebbe essere messo a rischio. Questo è il motivo per cui non è consigliato utilizzare un kernel Linux privo di moduli di sicurezza, soprattutto quando il dispositivo è connesso a Internet.

Al contrario, i sistemi che implementano SELinux affidano la loro sicurezza non solo alla correttezza del kernel, ma anche alla correttezza della configurazione della politica di sicurezza. Questo permette a un sistema con SELinux di limitare l’effetto di una eventuale applicazione compromessa, proteggendo l’integrità dell’intero sistema e permettendo alle altre applicazioni di continuare a funzionare normalmente. In sostanza, SELinux implementa una politica di sicurezza compartimentata, che impedisce la propagazione di un’applicazione compromessa o di altre potenziali vulnerabilità di sicurezza.

SELinux è stato introdotto alla comunità open source nel 2000 ed è stato integrato direttamente nel kernel Linux nel 2003, sottolineando la sua importanza nel garantire la sicurezza di un sistema Linux.

SELinux, o Security-Enhanced Linux, è un potente strumento di sicurezza che opera sul principio dell’assegnazione di etichette di sicurezza, chiamate anche “contesti”, a diversi elementi all’interno del sistema operativo. Queste etichette vengono attribuite a funzioni, processi, utenti, file, porte di rete e persino hardware.

Ogni etichetta assegnata comprende una stringa di testo che rappresenta un nome utente, un ruolo e un dominio. Di solito, la parte del nome di dominio svolge il ruolo più critico, poiché è utilizzata per determinare i controlli di accesso specifici. Analogamente, i file, le porte di rete e l’hardware hanno un contesto assegnato all’interno di SELinux, e a ciascuno viene dato un nome, un ruolo e un tipo.

Questo processo di assegnazione di etichette di sicurezza ai file viene chiamato “etichettatura” ed è determinato dal file delle politiche utilizzato. Il file delle politiche è costituito da tre file distinti: un file di mappatura, un file di regole e un file di interfaccia. Questi tre file devono essere compilati in un unico file delle politiche mediante l’utilizzo del set di strumenti di SELinux. Questo file delle politiche compilato viene quindi caricato nel kernel del sistema, rendendo la politica attiva.

La creazione del file delle politiche può essere eseguita manualmente o utilizzando un tool di gestione di SELinux. Una volta che il file delle politiche è stato caricato nel kernel del sistema, si può avere la certezza che il sistema è adeguatamente protetto.

La maggior parte dei moderni sistemi operativi Linux, come RHEL, CentOS, AlmaLinux o Rocky Linux hanno SELinux preconfigurato. Questo significa che, nella maggior parte dei casi, gli utenti non si rendono nemmeno conto che SELinux sta lavorando silenziosamente in background per proteggere il loro sistema. In breve, la natura affidabile e non invasiva di SELinux lo rende un componente fondamentale di qualsiasi moderno sistema Linux.

Il ruolo fondamentale di SELinux è la definizione dei controlli di accesso per applicazioni, processi e file all’interno del sistema. A tal fine, SELinux utilizza le politiche di sicurezza, un insieme di regole che guidano l’accesso ai vari elementi del sistema. Queste politiche indicano cosa è permesso o negato ad SELinux.

Quando un’applicazione o un processo, definito come “soggetto”, richiede l’accesso a un “oggetto” (ad esempio, un file), SELinux controlla le autorizzazioni attraverso una struttura chiamata cache del vettore di accesso (AVC – Access Vector Cache). Questa cache mantiene le autorizzazioni per i soggetti e gli oggetti per velocizzare le decisioni di controllo di accesso.

Come configurare SELinux

Ci sono diversi modi in cui puoi configurare SELinux per proteggere il tuo sistema. I più comuni sono i criteri mirati o la sicurezza multilivello (MLS).

La politica mirata è l’opzione predefinita e copre una gamma di processi, attività e servizi. L’MLS può essere molto complicato ed è in genere utilizzato solo dalle organizzazioni governative.

Puoi dire a cosa dovrebbe essere in esecuzione il tuo sistema guardando il file /etc/sysconfig/selinux. Il file avrà una sezione che mostra se SELinux è in modalità permissiva, in modalità di applicazione o disabilitata e quale criterio dovrebbe essere caricato.

Labeling SELinux e Type Enforcing

L’imposizione del tipo e l’etichettatura sono i concetti più importanti per SELinux.

SELinux funziona come un sistema di etichettatura, il che significa che tutti i file, processi e porte in un sistema hanno un’etichetta SELinux ad essi associata. Le Label sono un modo logico di raggruppare le cose. Il kernel gestisce le Label durante l’avvio.

Le Label sono nel formato utente:ruolo:tipo:livello (il livello è facoltativo). Utente, ruolo e livello sono usati nelle implementazioni più avanzate di SELinux, come con MLS. Il tipo di etichetta è il più importante per la politica mirata.

SELinux utilizza l’imposizione del tipo per imporre una politica definita sul sistema. L’imposizione del tipo è la parte di una politica SELinux che definisce se un processo in esecuzione con un certo tipo può accedere a un file etichettato con un certo tipo.

Abilitazione di SELinux

Se SELinux è stato disabilitato nel tuo ambiente, puoi abilitare SElinux modificando /etc/selinux/config e impostando SELINUX=permissive. Dal momento che SELinux non era attualmente abilitato, non si desidera impostarlo immediatamente su enforcing perché è probabile che il sistema abbia elementi etichettati in modo errato che possono impedire l’avvio del sistema.

È possibile forzare il sistema a rietichettare automaticamente il filesystem creando un file vuoto denominato .autorelabel nella directory principale e quindi riavviando. Se il sistema ha troppi errori, è necessario riavviare in modalità permissiva affinché l’avvio abbia esito positivo. Dopo che tutto è stato rietichettato, imposta SELinux su enforcing con /etc/selinux/config e riavvia, oppure esegui setenforce 1.

Se un amministratore di sistema ha meno dimestichezza con la riga di comando, sono disponibili strumenti grafici che possono essere utilizzati per gestire SELinux. 

SELinux fornisce un ulteriore livello di sicurezza per il tuo sistema integrato nelle distribuzioni Linux . Dovrebbe rimanere acceso in modo da poter proteggere il tuo sistema in caso di compromissione.

I sistemi Linux e UNIX tradizionali hanno ampiamente sfruttato il modello di Controllo dell’Accesso Discrezionale (DAC). Questo modello di controllo di accesso, che ha radici nel concetto di proprietà dei file, concede ad un utente proprietario di un file o a un processo la facoltà di determinare chi può accedere ai suoi dati e in che modo. In un sistema DAC, gli utenti possono specificare regole per l’accesso ai loro file, con le regole che possono consentire l’accesso a un altro utente specifico, a un gruppo di utenti o a qualsiasi altro utente del sistema.

L’utente root in un sistema Linux con DAC ha poteri illimitati, con un controllo completo su tutti i file e i processi. Essendo l’amministratore di sistema, l’utente root può accedere, modificare o eliminare i file di qualsiasi altro utente, garantendo una potenziale capacità di alterare tutto il sistema.

SELinux, d’altra parte, implementa un modello di Controllo dell’Accesso Obbligatorio (MAC). A differenza del DAC, dove gli utenti detengono il potere decisionale sulle politiche di accesso, nel MAC, le politiche di accesso sono stabilite a livello amministrativo e non possono essere modificate da utenti non privilegiati. Anche se un utente cambia le impostazioni DAC sulla sua directory home, ad esempio, una politica MAC come quella imposta da SELinux può ancora impedire l’accesso da parte di un altro utente o processo. In questo modo, SELinux mantiene un alto grado di sicurezza indipendentemente dalle azioni dell’utente.

SELinux offre una granularità molto più dettagliata nel controllo dell’accesso rispetto ai tradizionali sistemi DAC. Le politiche di SELinux possono essere estremamente specifiche, consentendo agli amministratori di restringere o consentire l’accesso a specifici file, directory, porte di rete, e altro ancora, per singoli utenti o processi. Questa capacità di apportare modifiche precise è fondamentale per garantire la sicurezza dell’intero sistema.

Quando ti imbatti in un errore in SELinux, esso indica generalmente che qualcosa nel tuo sistema non funziona come dovrebbe e necessita di essere risolto. Esistono quattro problemi comuni che potrebbero essere la causa di un errore in SELinux.

  1. Le etichette sono errate: SELinux utilizza un sistema di etichettatura, o “labelling”, per gestire i controlli di accesso. Se le etichette non sono corrette, potrebbero verificarsi errori. Ad esempio, un file potrebbe non essere accessibile da un’applicazione a causa di un’etichetta errata. In questo caso, puoi utilizzare gli strumenti specifici di SELinux, come “restorecon” o “chcon”, per correggere le etichette.
  2. Una politica necessita di essere aggiustata: Le politiche di SELinux sono una serie di regole che determinano come i processi possono interagire con le varie parti del sistema. Se hai apportato una modifica al sistema che non è stata ancora incorporata nelle politiche di SELinux, potrebbe verificarsi un errore. In questo caso, è possibile risolvere l’errore aggiornando le politiche. Puoi farlo utilizzando i booleani di SELinux, che permettono di abilitare o disabilitare determinate funzionalità, o creando un modulo di politiche personalizzato con lo strumento “audit2allow”.
  3. C’è un bug nella politica: Nonostante il lavoro accurato dei team di sviluppo, le politiche di SELinux possono presentare occasionalmente dei bug. Un bug in una politica potrebbe causare un comportamento inatteso e generare errori. In questo caso, potrebbe essere necessario segnalare il bug alla comunità di sviluppatori di SELinux per farsi aiutare a risolvere il problema.
  4. Il sistema è stato compromesso: Nonostante l’efficacia di SELinux nella protezione dei sistemi, esiste sempre la possibilità che un sistema venga violato. Se sospetti che il tuo sistema sia stato compromesso, è importante agire immediatamente. Il primo passo dovrebbe essere disconnettere il sistema dalla rete per prevenire ulteriori danni. Successivamente, dovresti condurre un’indagine forense per determinare come è avvenuta la violazione e quali misure dovrebbero essere adottate per prevenire incidenti futuri. Ricorda, SELinux è uno strumento di difesa potente, ma la sicurezza informatica richiede un approccio multistrato.

Cosa sono i booleani?

I booleani sono una componente fondamentale di SELinux e rappresentano una caratteristica chiave che consente una personalizzazione flessibile delle politiche di sicurezza del sistema. Essi sono essenzialmente dei controlli di attivazione e disattivazione, o “on/off”, che consentono di regolare le funzionalità specifiche di SELinux.

Questi booleani permettono agli amministratori di sistema di modificare il comportamento di SELinux senza la necessità di scrivere o modificare manualmente le politiche di sicurezza, rendendo quindi l’amministrazione del sistema più agevole e meno soggetta a errori. Questo è particolarmente utile in ambienti complessi o di larga scala, dove la gestione dettagliata delle politiche potrebbe essere eccessivamente onerosa.

boolvalues

Esistono centinaia di booleani disponibili in SELinux, ognuno dei quali controlla un aspetto specifico delle politiche di sicurezza. Ad esempio, esiste un booleano che controlla se gli script Apache possono connettersi alla rete, un altro che controlla se i server DHCP possono scrivere nei file di configurazione, e così via. Molti di questi booleani sono predefiniti per riflettere le migliori pratiche di sicurezza.

Per visualizzare i booleani attualmente impostati nel tuo sistema, puoi utilizzare il comando “getsebool -a”. Questo comando restituirà un elenco di tutti i booleani di SELinux e le loro attuali impostazioni (attivato o disattivato).

È possibile modificare l’impostazione di un booleano utilizzando il comando “setsebool”, seguito dal nome del booleano e dallo stato desiderato. Queste modifiche possono essere temporanee (vale a dire, valide solo fino al prossimo riavvio) o persistenti. La persistenza delle modifiche può essere particolarmente importante per le impostazioni di sicurezza critiche che devono essere mantenute costanti nel tempo.

I booleani di SELinux insomma offrono un modo potente e flessibile per personalizzare le impostazioni di sicurezza del tuo sistema Linux, permettendo di bilanciare le esigenze di sicurezza con quelle operative del tuo ambiente.

Disabilitare SELinux

SELinux è un importante strumento di sicurezza nel mondo Linux, progettato per offrire un controllo preciso sulle attività dei processi nel sistema. Tuttavia, ci sono situazioni in cui un amministratore potrebbe considerare l’opzione di disabilitarlo. Queste situazioni includono casi in cui SELinux interferisce con applicazioni specifiche, complica l’amministrazione del sistema o se l’ambiente di sistema è sufficientemente isolato e protetto da altre misure di sicurezza. Va ricordato, però, che disabilitare SELinux può esporre il sistema a rischi di sicurezza.

Per disabilitare SELinux in sistemi operativi derivati da Red Hat come CentOS, AlmaLinux, RockyLinux, e Oracle Linux, è necessario modificare il file /etc/selinux/config. Troverai una riga che dice “SELINUX=enforcing”. Modifica questa riga in “SELINUX=disabled”. Dopo aver salvato ed uscito dal file, dovrai riavviare il sistema per applicare le modifiche.

Disable-SELinux

Per sistemi operativi basati su Debian o Ubuntu, SELinux non è generalmente installato o abilitato di default, ma se è stato installato e necessita di essere disabilitato, è possibile farlo modificando il file /etc/selinux/config come descritto sopra, se presente. Se non esiste tale file, SELinux potrebbe essere stato abilitato tramite il bootloader GRUB, in tal caso, sarà necessario rimuovere “selinux=1” e “security=selinux” dal file di configurazione di GRUB.

Pro:

  • Maggiore semplicità: SELinux può essere complicato da gestire e da configurare correttamente. Disabilitandolo, si eliminano queste complessità.
  • Compatibilità: Alcune applicazioni possono non funzionare correttamente con SELinux, quindi disabilitarlo può risolvere questi problemi.

Contro:

  • Sicurezza ridotta: SELinux offre un livello di sicurezza molto elevato, quindi disabilitarlo può rendere il sistema più vulnerabile a varie forme di attacchi.
  • Non conformità: Se si lavora in un ambiente che richiede la conformità con determinate normative di sicurezza, la disabilitazione di SELinux potrebbe portare a una non conformità.

La disabilitazione di SELinux dovrebbe essere l’ultima risorsa dopo aver tentato di risolvere i problemi esistenti attraverso la regolazione delle politiche e l’utilizzo dei booleani. Prima di disabilitare SELinux, è importante comprendere le possibili implicazioni per la sicurezza del tuo sistema.

Conclusione

SELinux, abbreviazione di Security-Enhanced Linux, è un potente meccanismo di sicurezza che ha apportato notevoli miglioramenti alla sicurezza del sistema Linux, rendendolo un punto fermo nell’ambiente della sicurezza informatica open source. Implementato originariamente dalla National Security Agency, SELinux impone rigidi controlli di accesso per una vasta gamma di servizi e applicazioni, limitando efficacemente i privilegi e mitigando potenziali danni al sistema.

Attraverso l’uso di politiche di sicurezza, contesti e booleani, SELinux fornisce un controllo granulare sull’accesso alle risorse del sistema. Nonostante la sua complessità e la curva di apprendimento iniziale, l’uso di SELinux può fornire un livello di sicurezza superiore per i sistemi Linux. È importante sottolineare che, sebbene esistano casi in cui potrebbe essere tentata la disabilitazione di SELinux, ciò dovrebbe essere considerato come ultima risorsa, poiché riduce significativamente la sicurezza del sistema.

In conclusione, SELinux è uno strumento essenziale per qualsiasi amministratore di sistema che si preoccupa della sicurezza. Nonostante la sua complessità, con una corretta comprensione e amministrazione, SELinux può fornire un efficace livello aggiuntivo di difesa per i sistemi Linux, aumentando significativamente la robustezza generale della sicurezza del sistema. Alla luce dell’attuale paesaggio delle minacce informatiche, gli strumenti come SELinux si rivelano sempre più vitali per proteggere le nostre infrastrutture informatiche.

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Hetzner Online GmbH detiene i diritti su Hetzner®; OVHcloud è un marchio registrato di OVH Groupe SAS; cPanel®, L.L.C. detiene i diritti su cPanel®; Plesk® è un marchio registrato di Plesk International GmbH; Facebook, Inc. detiene i diritti su Facebook®. Questo sito non è affiliato, sponsorizzato o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello europeo da MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italia.

Torna in alto