AppArmor

AppArmor è un'implementazione del «Linux Security Module» per il controllo degli accessi vincolante basato sul nome. AppArmor racchiude individualmente i programmi in un insieme di file e capacità posix 1003.1e draft.

AppArmor è installato e caricato in modo predefinito e utilizza i profili di un'applicazione per determinare quali file e permessi siano necessari all'applicazione. Alcuni pacchetti installano i propri profili e ulteriori profili possono essere trovati nel pacchetto apparmor-profiles.

Per installare il pacchetto apparmor-profiles, in un terminale digitare:

sudo apt-get install apparmor-profiles

I profili di AppArmor dispongono di due modalità di esecuzione:

  • Apprendimento (complaining/learning): le violazioni del profilo sono consentite e vengono registrate. Utile per verificare e sviluppare nuovi profili.

  • Esecutiva (enforced/confined): obbliga a rispettare la politica del profilo e registra le violazioni.

Utilizzare AppArmor

Il pacchetto apparmor-utils contiene utilità a riga di comando che è possibile usare per modificare la modalità di esecuzione di AppArmor, trovare lo stato di un profilo, creare nuovi profili, ecc...

  • apparmor_status è utilizzata per visualizzare lo stato attuale dei profili AppArmor.

    sudo apparmor_status
    
  • aa-complain posiziona un profilo nella modalità apprendimento.

    sudo aa-complain /percorso/al/binario
    
  • aa-enforce posiziona un profilo nella modalità esecutiva.

    sudo aa-enforce /percorso/al/bianrio
    
  • Nella directory /etc/apparmor.d sono archiviati tutti i profili di AppArmor ed è possibile, da qui, modificare la modalità di tutti i profili.

    Usare il seguente comando per impostare tutti i profili nella modalità apprendimento:

    sudo aa-complain /etc/apparmor.d/*
    

    Per impostare tutti i profili nella modalità esecutiva:

    sudo aa-enforce /etc/apparmor.d/*
    
  • apparmor_parser è utilizzata per caricare un profilo all'interno del kernel. Può essere usata anche per ricaricare profili attraverso l'opzione -r. Per caricare un profilo:

    cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
    

    Per ricaricare un profilo:

    cat /etc/apparmor.d/profile.name | sudo apparmor_parser -r
    
  • /etc/init.d/apparmor può essere usato per ricaricare tutti i profili:

    sudo /etc/init.d/apparmor reload
    
  • La directory /etc/apparmor.d/disable può essere usata con l'opzione apparmor_parser -R per disabilitare un profilo.

    sudo ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable/
    sudo apparmor_parser -R /etc/apparmor.d/profile.name
    

    Per riabilitare un profilo disabilitato, rimuovere il collegamento simbolico al profilo in /etc/apparmor.d/disable/, quindi caricare il profilo usando l'opzione -a.

    sudo rm /etc/apparmor.d/disable/profile.name
    cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
    
  • È possibile disabilitare AppArmor e scaricare il modulo del kernel attraverso i seguenti comandi:

    sudo /etc/init.d/apparmor stop
    sudo update-rc.d -f apparmor remove
    
  • Per riabilitare AppArmor:

    sudo /etc/init.d/apparmor start
    sudo update-rc.d apparmor defaults
    
[Nota]

Sostituire profile.name con il nome del profilo da modificare e sostituire anche /percorso/eseguibile/ con il percorso all'eseguibile. Per esempio, per il comando ping, usare /bin/ping

Profili

I profili di AppArmor sono dei semplici file di testo posizionati in /etc/apparmor.d/. Questi file vengono nominati con il percorso completo all'eseguibile del profilo, sostituendo «/» con «.». Per esempio, /etc/apparmor.d/bin.ping è il profilo AppArmor del comando /bin/ping.

Esistono due principali tipologie di regole usate nei profili:

  • Voci di percorso: specificano a quali file nel file system un'applicazione può accedere.

  • Voci di capacità: determinano quali privilegi un processo può utilizzare.

Per un esempio, consultare /etc/apparmor.d/bin.ping:

#include <tunables/global>
/bin/ping flags=(complain) {
  #include <abstractions/base>
  #include <abstractions/consoles>
  #include <abstractions/nameservice>

  capability net_raw,
  capability setuid,
  network inet raw,
  
  /bin/ping mixr,
  /etc/modules.conf r,
}
  • #include <tunables/global>: asserzioni di inclusione da altri file. Consente di usare un file comune con le asserzioni di inclusione per molteplici applicazioni.

  • /bin/ping flags=(complain): percorso al programma con profilo, impostandone la modalità ad apprendimento.

  • capability net_raw,: consente all'applicazione di accedere alla capacità CAP_NET_RAW Posix.1e.

  • /bin/ping mixr,: consente all'applicazione accesso in lettura e in esecuzione al file.

[Nota]

Dopo aver modificato un profilo, è necessario ricaricarlo. Per maggiori informazioni, consultare la sezione chiamata «Utilizzare AppArmor».

Creare un profilo

  • Progettare un piano di verifica: cercare di pensare a come l'applicazione dovrebbe essere eseguita. Il piano di verifica dovrebbe essere diviso in tanti piccoli casi d'uso, ognuno dei quali dovrebbe avere una breve descrizione e un elenco dei passi da compiere.

    Alcuni casi standard da verificare sono:

    • Avvio del programma.

    • Arresto del programma.

    • Ricaricamento del programma.

    • Verifica di tutti i comandi supportati dallo script init.

  • Generare il nuovo profilo: usare aa-genprof per generare un nuovo profilo. Da un terminale:

    sudo aa-genprof eseguibile
    

    Per esempio:

    sudo aa-genprof slapd
    
  • Affinché il proprio nuovo profilo venga incluso nel pacchetto apparmor-profiles, segnalare un bug su Launchpad riguardo il pacchetto AppArmor:

    • Includere la pianificazione e le casistiche del test.

    • Allegare il nuovo profilo al bug.

Aggiornare i profili

Quando il programma si comporta stranamente, messaggi di audit vengono inviati ai file di registro. Il programma aa-logprof può essere usato per analizzare i file di registro per i messaggi di audit di AppArmor, per controllarli e per aggiornare i profili. Da un terminale:

sudo aa-logprof

Riferimenti

  • Un buon posto per chiedere assistenza riguardo AppArmor, e per partecipare nella comunità di Ubuntu Server, è il canale IRC #ubuntu-server su freenode.