Profili AppArmor in Docker / LXC


11

Ho un container Docker (LXC) che esegue MySQL. Poiché l'idea alla base di Docker è generalmente "un processo in esecuzione per contenitore", se definisco i profili AppArmor destinati al binario MySQL, verranno applicati? C'è un modo per provare questo?


perché vuoi usare apparmor all'interno del contenitore?
c4f4t0r,

3
Nel caso in cui un exploit zero-day o altro venga eseguito sul database per impedirgli di accedere a qualsiasi altra cosa . Mi fido di Linux cgroups, ma non molto . È meglio essere sicuri che dispiaciuti, preferirei che MySQL fosse bloccato piuttosto che un giorno zero di MySQL trovasse il modo di uscire da un cgroup.
Naftuli Kay,

Risposte:


8

Innanzitutto, i cgroup non vengono utilizzati per isolare un'applicazione dagli altri su un sistema. Sono utilizzati per gestire l'utilizzo delle risorse e l'accesso al dispositivo. Sono i vari spazi dei nomi (PID, UTS, mount, utente ...) che forniscono un certo (limitato) isolamento.

Inoltre, un processo avviato all'interno di un contenitore Docker probabilmente non sarà in grado di gestire il profilo AppArmor in cui è in esecuzione. L'approccio attualmente adottato consiste nell'impostare un profilo AppArmor specifico prima di avviare il contenitore.

Sembra che il driver di esecuzione libcontainer in Docker supporti l' impostazione dei profili AppArmor per i contenitori , ma non riesco a trovare alcun esempio o riferimento nel documento.

Apparentemente AppArmor è supportato anche con LXC in Ubuntu .

Dovresti scrivere un profilo AppArmor per la tua applicazione e assicurarti che LXC / libcontainer / Docker / ... lo carichi prima di avviare i processi all'interno del contenitore.

I profili utilizzati in questo modo dovrebbero essere applicati e per testarlo dovresti provare un accesso illegale e assicurarti che fallisca.

In questo caso non esiste alcun collegamento tra il profilo binario e quello effettivamente applicato. Devi dire esplicitamente a Docker / LXC di utilizzare questo profilo per il tuo contenitore. La scrittura di un profilo per il binario MySQL lo imporrà solo sull'host, non nel contenitore.


Finora questa è stata la mia (limitata) esperienza. Ho avuto problemi a generare un profilo dall'interno di un contenitore Docker, ma se un profilo è stato generato all'esterno del contenitore e quindi copiato, dovrebbe semplicemente funzionare ™, a condizione che avvii AppArmor nel contenitore prima di eseguire l'eseguibile.
Naftuli Kay,

@Siosm: LCX! = Libcontainer. La domanda riguardava il driver LXC.
0xC0000022L

@ 0xC0000022L: il modello di applicazione del profilo AppArmor è lo stesso per qualsiasi strumento utilizzato per confinare i processi in contenitori.
Siosm,

3

La risposta è molto probabile: no.

L' argomento della guida di Ubuntu Server LXC discute praticamente la tua domanda esatta e fa la seguente dichiarazione:

I programmi in un contenitore non possono essere ulteriormente limitati, ad esempio MySQL funziona sotto il profilo del contenitore (proteggendo l'host) ma non sarà in grado di inserire il profilo MySQL (per proteggere il contenitore).

Un'opzione migliore per evitare exploit con effetti indesiderati è quella di limitare l'utente che esegue il contenitore e utilizzare i contenitori LXC dello utente che sfruttano la funzionalità del kernel. Tuttavia, dockerattualmente - per quanto ne so - non supporta userns.

In tal caso MySQL - dal punto di vista degli host - verrebbe eseguito come utente non privilegiato, mentre all'interno del contenitore potrebbe essere eseguito come root. È quindi possibile utilizzare iptablesper associare MySQL a una porta esterna dell'host, se necessario.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.