Eu tenho um contêiner Docker (LXC) que executa o MySQL. Como a idéia por trás do Docker é geralmente "um processo em execução por contêiner", se eu definir perfis do AppArmor direcionados ao binário do MySQL, eles serão aplicados? Existe uma maneira de eu testar isso?
11
cgroups
, mas não tanto . É melhor prevenir do que remediar, eu prefiro ter o MySQL bloqueado do que um dia zero do MySQL encontrar uma maneira de sair de um cgroup.Respostas:
Primeiro, os cgroups não são usados para isolar um aplicativo de outros em um sistema. Eles são usados para gerenciar o uso de recursos e o acesso ao dispositivo. São os vários namespaces (PID, UTS, montagem, usuário ...) que fornecem algum isolamento (limitado).
Além disso, um processo iniciado dentro de um contêiner do Docker provavelmente não poderá gerenciar o perfil do AppArmor em que está sendo executado. A abordagem atualmente adotada é configurar um perfil específico do AppArmor antes de iniciar o contêiner.
Parece que o driver de execução libcontainer no Docker suporta a configuração de perfis do AppArmor para contêineres , mas não consigo encontrar nenhum exemplo ou referência no documento.
Aparentemente, o AppArmor também é suportado com LXC no Ubuntu .
Você deve escrever um perfil do AppArmor para o seu aplicativo e garantir que o LXC / libcontainer / Docker / ... o carregue antes de iniciar os processos dentro do contêiner.
Os perfis usados dessa maneira devem ser aplicados e, para testá-lo, tente um acesso ilegal e verifique se ele falha.
Não há link entre o perfil binário e o perfil realmente aplicado nesse caso. Você precisa informar explicitamente ao Docker / LXC para usar esse perfil para seu contêiner. Escrever um perfil para o binário do MySQL somente o aplicará no host, não no contêiner.
fonte
A resposta é muito provável: não.
O tópico do guia Ubuntu Server LXC discute praticamente sua pergunta exata e faz a seguinte declaração:
Uma opção melhor para evitar explorações com efeitos indesejados é limitar o usuário que está executando o contêiner e usar contêineres LXC do espaço do usuário que aproveitam o recurso de usuários do kernel. No entanto,
docker
atualmente - que eu saiba - não suportauserns
.Nesse caso, o MySQL - sob a perspectiva de hosts - seria executado como usuário não privilegiado, enquanto dentro do contêiner poderia ser executado como
root
. Você pode usariptables
para ligar o MySQL a uma porta externa do host, se necessário.fonte