SELinux vs AppArmor: confronto per i server Linux
15 min di lettura - 21 maggio 2026

Confronto tra SELinux e AppArmor per la sicurezza dei server Linux: Scoprite come funziona ogni framework MAC, le differenze principali e quale scegliere per la vostra configurazione di hosting.
SELinux vs AppArmor: quale framework MAC è più adatto al tuo server?
Sia SELinux che AppArmor applicano il controllo di accesso obbligatorio (MAC) su Linux, limitando ciò che i processi possono fare anche se ottengono i privilegi di root. La differenza sta nel modo in cui lo fanno. SELinux assegna etichette persistenti a ogni file e processo. AppArmor utilizza invece regole relative al percorso dei file. Questa scelta di progettazione determina tutto il resto: complessità, livello di sicurezza e quale distribuzione include quale strumento di default.
Come funziona SELinux
SELinux è stato originariamente sviluppato dalla NSA ed è preinstallato su RHEL, CentOS, Fedora e Rocky Linux. Assegna a ogni oggetto del sistema, inclusi file, processi, porte e socket, un contesto di sicurezza nel formato user:role:type:level. Il type campo svolge la maggior parte del lavoro tramite un meccanismo chiamato Type Enforcement (TE).
Ad esempio, il server web Apache viene eseguito come httpd_t. I file di contenuto web hanno un tipo diverso. Se nessuna regola di policy consente esplicitamente httpd_t l'accesso a quel tipo di contenuto, la richiesta viene negata. Si tratta di un modello "deny-by-default". Nulla è consentito a meno che una regola non indichi il contrario.
SELinux supporta anche la sicurezza multilivello (MLS) e la sicurezza multicategoria (MCS), che classificano i dati in base al livello di sensibilità e ne limitano l’accesso di conseguenza. L’MCS è ciò che conferisce a SELinux il suo forte isolamento dei container, mantenendo i container separati l’uno dall’altro e dall’host. Questo è importante negli ambienti Kubernetes e OpenShift in cui i pod condividono un nodo.
Il compromesso è la complessità. SELinux ha una curva di apprendimento ripida. Risolvere i problemi relativi ai rifiuti di accesso significa leggere i log di audit, comprendere i contesti di sicurezza e, a volte, generare moduli di policy personalizzati con audit2allow. Per i team privi di personale dedicato alla sicurezza, questo onere è reale.
Come funziona AppArmor
AppArmor adotta un approccio diverso. Anziché etichettare gli oggetti, associa profili di sicurezza alle applicazioni in base ai loro percorsi di file. Un profilo per /usr/sbin/nginx definisce quali directory Nginx può leggere, a quali porte può collegarsi e di quali funzionalità ha bisogno. I profili sono file di testo semplice memorizzati in /etc/apparmor.d/.
AppArmor è il framework MAC predefinito su Ubuntu, Debian e SUSE. Fa parte del kernel Linux dalla versione 2.6.36. Le applicazioni senza un profilo ricorrono ai permessi DAC standard di Linux.
AppArmor funziona in due modalità per ogni profilo: Enforce (blocca e registra le violazioni) e Complain (registra le violazioni senza bloccarle). Questo rende pratico implementare nuovi profili in modo graduale. Iniziate in modalità Complain, esaminate i log, rendete il profilo più restrittivo, quindi passate a Enforce.
Strumenti come aa-genprof e aa-logprof aiutano a creare profili in modo interattivo osservando ciò che fa un'applicazione e generando regole dal suo comportamento. Rispetto ai moduli di policy SELinux, la sintassi è molto più facile da leggere e modificare manualmente.
Lo svantaggio è che le regole basate sul percorso non seguono i file quando questi vengono spostati. Un collegamento fisico o un mount bind può, in teoria, aggirare una restrizione basata sul percorso. AppArmor manca inoltre del supporto nativo MLS/MCS, quindi può isolare i container dall’host ma non l’uno dall’altro come fa SELinux.
Confronto affiancato
| Caratteristica | SELinux | AppArmor |
|---|---|---|
| Modello di controllo degli accessi | Basato su etichette (contesti di sicurezza) | Basato sul percorso (posizioni del file system) |
| Impostazione predefinita | Nulla | Consenti tutto (restrizioni per profilo) |
| Spostamento dei file | Le etichette seguono il file | Sicurezza legata al percorso |
| Supporto MLS/MCS | Sì | No |
| Isolamento dei container | Da container a container e da container a host | Solo da container a host |
| Formato delle policy | Moduli binari compilati | File di testo leggibili dall'utente |
| Distribuzioni predefinite | RHEL, Fedora, CentOS, Rocky Linux | Ubuntu, Debian, SUSE |
| Curva di apprendimento | Ripida | Moderata |
Configurazione di base
SELinux
Verifica lo stato attuale:
sestatus
getenforceAvviare in modalità Permissive per registrare le violazioni senza bloccare nulla:
setenforce 0Utilizzare la policy "targeted" per la maggior parte dei server. Essa limita i servizi ad alto rischio come i server web e i database, lasciando tutto il resto senza restrizioni. Renderla permanente in /etc/selinux/config:
SELINUX=enforcing
SELINUXTYPE=targetedControlla i contesti di sicurezza su file e processi:
ls -Z /var/www/html
ps -eZ | grep httpdSe un servizio utilizza una porta non standard, aggiornare la policy:
semanage port -a -t ssh_port_t -p tcp 9999Per le applicazioni personalizzate che generano negazioni di accesso, crea un modulo di policy dal log di audit:
ausearch -m avc -ts recent | audit2allow -M my_custom_policy
semodule -i my_custom_policy.ppAppArmor
Verifica quali profili sono caricati:
sudo aa-statusInstallare il pacchetto di utilità se sono necessari strumenti di gestione dei profili:
sudo apt install apparmor-utilsGenera un profilo in modo interattivo mentre l'applicazione è in esecuzione:
sudo aa-genprof /path/to/binaryPerfeziona il profilo analizzando i registri alla ricerca di violazioni:
sudo aa-logprofCambia la modalità di un profilo:
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
sudo aa-complain /etc/apparmor.d/usr.sbin.nginxQuale dovresti usare?
La risposta pratica per la maggior parte degli amministratori: usa quello che viene fornito con la tua distribuzione. RHEL, CentOS, Fedora e Rocky Linux sono dotati di SELinux. Ubuntu, Debian e SUSE sono dotati di AppArmor. Entrambi i framework dispongono di strumenti e politiche maturi per le loro piattaforme native. Passare all'opzione non predefinita su qualsiasi distribuzione aggiunge lavoro e riduce il supporto della comunità.
Oltre a ciò, lasciate che siano le vostre esigenze a decidere:
- Scegliete SELinux se avete bisogno di conformità con PCI DSS, HIPAA o DISA-STIG. Se eseguite carichi di lavoro container multi-tenant su Kubernetes o OpenShift. Se avete bisogno di isolamento da container a container su host condivisi. Se il vostro ambiente gestisce dati classificati o con livelli di sensibilità.
- Scegliete AppArmor se utilizzate Ubuntu o Debian e desiderate la protezione MAC senza un'implementazione complessa. Se la vostra configurazione è un singolo server o un piccolo cluster che esegue servizi web standard. Se la rapidità di implementazione è più importante del controllo granulare a livello di etichetta.
Entrambi i framework aggiungono un overhead di runtime minimo. SELinux memorizza le decisioni di accesso nella sua Access Vector Cache. Il caricamento delle policy di AppArmor può aggiungere un piccolo ritardo all'avvio, ma ha un impatto trascurabile durante l'esecuzione. Per la maggior parte dei carichi di lavoro di hosting, nessuno dei due sarà un collo di bottiglia.
Se hai bisogno di una base di hosting affidabile con pieno accesso root per configurare entrambi i framework, i server dedicati o i VPS di FDC ti offrono il controllo necessario per configurare SELinux o AppArmor in base alle esigenze del tuo ambiente.

Processi zombie in Linux: Trovare, rimuovere, prevenire
Imparate a identificare, rimuovere e prevenire i processi zombie in Linux. Comandi, correzioni di codice e suggerimenti per il monitoraggio per gli amministratori di server.
15 min di lettura - 19 maggio 2026
Lista di controllo per l'irrigidimento del server Linux
15 min di lettura - 8 maggio 2026

Avete domande o avete bisogno di una soluzione personalizzata?
Opzioni flessibili
Portata globale
Distribuzione immediata
Opzioni flessibili
Portata globale
Distribuzione immediata