Usando contêineres LXC mínimos como um chroot avançado e seguro para isolar serviços

3

Primeiro, não sou especialista em segurança e nunca usei o LXC antes.

Estou tentando endurecer o máximo possível um servidor endurecido pelo Gentoo. Para fazer isso, estou pensando em usar o LXC, talvez combinado com o KVM, para isolar o máximo possível de serviços de rede.

Eu li a página de manual unix do LXC, mas ainda é muito obscuro para mim como os containers Linux são configurados. Procurando na internet para obter mais informações, eu encontrei apenas documentação sobre como rodar um sistema inteiro dentro de um container Linux que não é o que eu gostaria de fazer.

O que eu quero usar o LXC para, está executando apenas um aplicativo dentro de um contêiner, incluindo apenas os arquivos / recursos mínimos exigidos pelo aplicativo. Eu não quero executar um sistema inteiro dentro de um contêiner, evitando até mesmo ter busybox.

Por exemplo, eu gostaria de isolar o serviço ntpd , até onde eu saiba ser capaz de sincronizar o relógio do sistema, não posso executá-lo dentro de uma VM. Mas eu poderia executá-lo dentro de um chroot , ou suponho que eu poderia executá-lo dentro de um contêiner Linux para um melhor isolamento e segurança.
Para fazer isso eu teria que:

  1. Identifique quais arquivos o ntpd requer, como quando configura uma cadeia chroot.
  2. Isto é onde não sei o que fazer e como: configuração do LXC, modelo, onde colocar meus arquivos para configurar o container, etc.
  3. Executar com lxc-execute

É algo possível? Quais seriam as várias etapas para criar, executar e gerenciar esse contêiner?

    
por kuroneko 28.01.2014 / 22:14

1 resposta

4

Historicamente, o LXC tem tido muitos problemas de segurança que impedem que ele seja realmente isolado, mas os aprimoramentos de infraestrutura no kernel principal do Linux aliviaram a maioria (se não todos) desses problemas.

Veja aqui para obter uma visão geral dos problemas / aprimoramentos de segurança que foram observados em sucessivas versões do Ubuntu que agregam o LXC.

Achei esta documentação do Oracle Unbreakable Enterprise Kernel a ser particularmente útil para explicar como para fazer contêineres no nível do aplicativo.

Nos documentos:

Application containers are not created by using template scripts. Instead, an application container mounts all or part of the host's root file system to provide access to the binaries and libraries that the application requires. You use the lxc-execute command to invoke lxc-init (a cut-down version of /sbin/init) in the container. lxc-init mounts any required directories such as /proc, /dev/shm, and /dev/mqueue, executes the specified application program, and then waits for it to finish executing. When the application exits, the container instance ceases to exist.

    
por 28.01.2014 / 22:42