Onde estão as fronteiras de segurança dos contêineres lxc?

8

Minha pergunta é sobre a segurança de um contêiner LXC.

Se eu estiver executando vários contêineres na minha caixa e conceder aos usuários um acesso ssh separado ao contêiner de propriedade, algum desses contêineres pode invadir os outros contêineres dessa caixa ou até a máquina host?

Onde estão as fronteiras de segurança dos contêineres lxc?

iCode
fonte
você sabe que precisa se preocupar com isso, o AppArmor cuidará disso.
rɑːdʒɑ

Respostas:

8

Como já vi no LXC, ele armazena informações de contêiner e (com o armazenamento de backup padrão) sistemas de arquivos raiz em / var / lib / lxc. Os modelos de criação de contêiner também tendem a armazenar informações de distribuição em cache em / var / cache / lxc.

Portanto, geralmente o acesso ao sistema de arquivos raiz só é permitido ao administrador, a menos que haja um uso indevido ou perfis de usuário de configuração incorretos ao criá-los.

Mas os desenvolvedores do Ubuntu já podem ter chegado a esse ponto e forneceram uma solução segura com a ajuda do AppArmor.

O LXC é enviado com um perfil Apparmor destinado a proteger o host contra uso indevido acidental de privilégios dentro do contêiner. Por exemplo, o contêiner não poderá gravar /proc/sysrq-triggerna maioria dos /sysarquivos.

O perfil usr.bin.lxc-start é inserido executando lxc-start. Esse perfil evita principalmente que o lxc-start monte novos sistemas de arquivos fora do sistema de arquivos raiz do contêiner. Antes de executar o init do contêiner, o LXC solicita uma opção para o perfil do contêiner. Por padrão, esse perfil é a política lxc-container-default definida em /etc/apparmor.d/lxc/lxc-default. Esse perfil impede que o contêiner acesse muitos caminhos perigosos e monte a maioria dos sistemas de arquivos.

Se você achar que o lxc-start está falhando devido a um acesso legítimo que está sendo negado por sua política do Apparmor, você pode desativar o perfil do lxc-start fazendo o seguinte:

sudo apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start
sudo ln -s /etc/apparmor.d/usr.bin.lxc-start /etc/apparmor.d/disabled/

Isso fará com que o lxc-start seja executado sem limites, mas continuará confinando o próprio contêiner. Se você também deseja desativar o confinamento do contêiner, além de desativar o usr.bin.lxc-startperfil, você deve adicionar:

lxc.aa_profile = unconfined

para o arquivo de configuração do contêiner. Se você deseja executar um contêiner em um perfil personalizado, é possível criar um novo perfil em /etc/apparmor.d/lxc/. Seu nome deve começar com lxc- para que o lxc-start possa fazer a transição para esse perfil. Após criar a política, carregue-a usando:

sudo apparmor_parser -r /etc/apparmor.d/lxc-containers

O perfil será carregado automaticamente após uma reinicialização, porque é originado pelo arquivo /etc/apparmor.d/lxc-containers. Por fim, para fazer com que o container CN use esse novo lxc-CN-profile, adicione a seguinte linha ao seu arquivo de configuração:

lxc.aa_profile = lxc-CN-profile

lxc-execute não entra no perfil do Apparmor, mas o contêiner que gera será confinado.

rɑːdʒɑ
fonte
Muito obrigado pela sua resposta. Então, você está dizendo que é seguro se eu usar o AppArmor?
iCode 7/09/13
@iCode, sim appArmor projetado para proteger aplicativos Ubuntu e LXC, além de obter ótimo suporte em termos de segurança se você usar o AppArmor.
rɑːdʒɑ
O AppArmor não é tudo, por exemplo, descobri que dmesgpode ser chamado de qualquer contêiner (pelo menos na configuração padrão). Tenho medo de que não é o único risco de segurança ...
Daniel Alder