Capitolo 3. Generazione di profili Novell AppArmor

Sommario

3.1. Componenti e sintassi di un profilo
3.2. Generazione e gestione di profili Novell AppArmor
3.3. Generazione di profili Novell AppArmor con la GUI di YaST
3.4. Creazione di profili Novell AppArmor mediante l'interfaccia a riga di comando
3.5. Due metodi di definizione di un profilo
3.6. Nomi di percorsi e glob
3.7. Modalità di accesso autorizzazioni file

In questo capitolo viene illustrato come creare e gestire i profili Novell® AppArmor. Per definire i profili Novell AppArmor, selezionare i programmi di cui si desidera creare i profili. Per ulteriori informazioni su questo argomento, vedere il Capitolo 2, Selezione dei programmi da immunizzare (↑Guida all'amministrazione di Novell AppArmor 2.0).


3.1. Componenti e sintassi di un profilo

In questa sezione viene illustrata la sintassi o la costruzione dei profili Novell AppArmor. Un esempio della sintassi è contenuto nella Sezione 3.1.1, "Divisione di un profilo Novell AppArmor in più parti" (↑Guida all'amministrazione di Novell AppArmor 2.0).

3.1.1. Divisione di un profilo Novell AppArmor in più parti

I componenti di un profilo Novell AppArmor sono chiamati regole Novell AppArmor. Esistono attualmente due tipi principali di voci di funzione, percorso e regole AppArmor. Le voci di percorso specificano il contenuto a cui può accedere il processo nel file system mentre quelle di funzione forniscono un controllo più preciso sulle operazioni consentite a un processo limitato tramite chiamate di altre sistemi che richiedono autorizzazioni. Le istruzioni Include sono un tipo di meta regole o direttive che raccolgono le voci di percorso e di funzione da altri file.

La visualizzazione dei dettagli di un profilo di esempio rappresenta il miglior metodo per spiegare la struttura di un profilo e come crearne uno. Si osservi il profilo seguente per il programma /sbin/klogd:

# profile to confine klogd1
/sbin/klogd 2
{3
#include <abstractions/base>4
  capability sys_admin,5
  /boot/* r6,
  /proc/kmsg r,
  /sbin/klogd r,
  /var/run/klogd.pid lw,
}
1

Commento che nomina il programma limitato dal profilo. Ai commenti di questo tipo aggiungere sempre il segno #.

2

Percorso assoluto del programma limitato.

3

Le parentesi graffe {} servono da contenitore per racchiudere le istruzioni di altri profili oltre che le voci di percorso e di funzione.

4

Questa direttiva raccoglie i componenti dei profili Novell AppArmor per semplificarli.

5

Le istruzioni delle voci di funzione abilitano tutte le funzioni bozza di 29 POSIX.1e.

6

Voce di percorso che specifica le aree accessibili da parte del file system. La prima parte di una voce di percorso specifica il percorso assoluto di un file (incluso il glob di espressioni regolari) mentre la seconda parte indica le modalità di accesso consentite (r per lettura, w per scrittura e x per esecuzione). Uno spazio bianco di qualsiasi tipo (spazi o tabulazioni) può precedere i nomi dei percorsi o separare il nome del percorso dalle modalità di accesso. Lo spazio bianco tra la modalità di accesso e la virgola finale è facoltativo.

Quando si crea un profilo per un programma, quest'ultimo può accedere solo ai file, alle modalità e alle funzioni POSIX specificate nel profilo. Queste limitazioni si aggiungono ai controlli di accessi nativi di Linux.

Esempio: .  Per accedere alla funzionalità CAP_CHOWN, il programma deve disporre dell'accesso a CAP_CHOWN nei controlli di accesso Linux convenzionali (generalmente un processo root) e contenere la funzionalità chown nel proprio profilo. In modo simile, per poter scrivere nel file /foo/bar, il programma deve disporre dell'ID utente corretto, i bit di modalità devono essere impostati negli attributi dei file (vedere le pagine man chmod e chown) e inoltre deve contenere /foo/bar w nel proprio profilo.

I tentativi di violazione delle regole Novell AppArmor vengono registrati nel syslog. In molti casi, le regole Novell AppArmor impediscono l'esecuzione di un attacco perché i file necessari non sono accessibili e, in tutti i casi, la limitazione di Novell AppArmor riduce l'entità del danno provocato dall'aggressore al gruppo di file accessibili da Novell AppArmor.

3.1.2. #include

Le istruzioni #include sono direttive che raccolgono i componenti di altri profili Novell AppArmor per semplificarli. I file Include recuperano le autorizzazioni di accesso per i programmi. L'utilizzo di un'istruzione Include consente al programma di accedere ai percorsi o ai file di directory richiesti da altri programmi. Le istruzioni Include consentono inoltre di ridurre le dimensioni di un profilo.

Per impostazione predefinita, l'istruzione #include aggiunge /etc/apparmor.d/ all'inizio del nome del percorso, ovvero il percorso in cui prevede di trovare i file include. A differenza di altre istruzioni di profilo, ma come i programmi C, le righe #include non terminano con una virgola.

Per semplificare la definizione dei profili per le applicazioni, in Novell AppArmor sono disponibili due classi di #include, astrazioni e porzioni di programmi.

3.1.2.1. Astrazioni

Le astrazioni sono istruzioni #include raggruppate dalle comuni attività dell'applicazione. Queste attività includono l'accesso ai sistemi di autenticazione, l'accesso alle routine del servizio dei nomi, i comuni requisiti grafici e la contabilità di sistema. I file inclusi in queste astrazioni sono specifici dell'attività menzionata. I programmi che richiedono uno di questi file generalmente necessitano di altri file disponibili nel file delle astrazioni (in base alla configurazione locale e ai specifici requisiti del programma). Le astrazioni sono incluse in /etc/apparmor.d/abstractions/.

3.1.2.2. Porzioni di programma

Le porzioni di programma sono controlli di accesso per programmi specifici che può essere opportuno vengano controllati dall'amministratore del sistema in base alle norme locali. Ciascuna porzione viene utilizzata da un solo programma. Queste porzioni semplificano le modifiche locali e gli aggiornamenti alle norme forniti da Novell AppArmor. Gli amministratori possono modificare le norme in questi file secondo le proprie esigenze e lasciare i profili dei programmi invariati semplificando l'operazione di unione degli aggiornamenti alle norme di Novell AppArmor con le norme applicate a ciascun sito.

Le limitazioni di accesso nelle porzioni di programma sono generalmente molto liberali e progettate per consentire agli utenti di accedere ai propri file nel modo meno invadente possibile e continuando a garantire la protezione delle risorse di sistema. Un'eccezione a questa regola è costituita dalla serie di porzioni di programma postfix*. Questi profili vengono utilizzati per semplificare l'estrazione del percorso dei binari postfix. Tuttavia, può essere non necessario ridurre le autorizzazioni nella serie postfix*. Le porzioni di programma sono disponibili in /etc/apparmor.d/program-chunks/.

3.1.3. Voci di funzione (POSIX.1e)

Le istruzioni di funzione sono costituite dalla parola "funzionalità" seguita dal nome della funzione POSIX.1e, come specificato nella pagina man capabilities(7).