Contêineres LXC como ambiente sandbox

Contêineres LXC como ambiente sandbox

Atualmente estou iniciando um projeto avaliando programas não confiáveis ​​(tarefas de alunos) em um ambiente sandbox seguro. A ideia principal é criar um aplicativo web para GlassFish e Java wrapper em torno de lxc-utils para gerenciar contêineres LXC. Ele terá uma fila de programas em espera e um wrapper Java manterá um número fixo (pool) de contêineres LXC, atribuindo a cada programa um contêiner (não utilizado).

Cada contêiner deve ser protegido com SELinux para proteger o sistema host.

Minha pergunta é: é uma boa ideia criar tal mecanismo para um ambiente sandbox ou existe alguma solução mais adequada para esse problema? Deve ser leve e seguro contra a criatividade dos alunos.

Responder1

Você não escreveu por que escolheu o LXC, pois não é a solução de virtualização mais segura. Sou usuário pesado de KVM/XEN e também de LXC e posso dizer uma coisa: quando se trata de segurança, nunca uso containers Linux (não importa se LXC/OpenVZ/VServer). É apenas mais fácil (e mais confiável) com KVM/XEN.

Se for uma questão de desempenho ou requisitos de hardware, tudo bem - você pode tentar com o LXC, mas existem algumas regras que você deve seguir:

  • libvirt garante confinamento estrito de contêineres ao usar SELinux (graças ao LXC_driver) - não tenho certeza se é apenas o caso RHEL/Centos/Fedora (eu não uso muito Ubuntu/Debian)https://www.redhat.com/archives/libvir-list/2012-January/msg01006.html- então usar o SELinux é uma boa ideia (na minha opinião é "obrigatório" em tais circunstâncias)
  • Defina regras rígidas de cgroups para que seus convidados não congelem seu host ou afetem outros contêineres
  • Prefiro usar contêineres baseados em LVM - é sempre mais uma camada de "segurança"
  • Pense na solução e arquitetura de rede. Esses contêineres precisam se comunicar entre si?

Comece lendoesse- é bastante antigo, mas ainda assim - há muito conhecimento ali. E também - conheçanamespaces de usuário

E depois de tudo isso, pense novamente: você realmente tem tanto tempo para brincar com a segurança do LXC? KVM é muito mais simples...

Responder2

Para executar programas não confiáveis, os namespaces do Linux ainda são a melhor solução. É mais fácil de configurar que o KVM e requer menos recursos. Você pode experimentar o LXC, mas o LXC foi criado como uma sandbox mais genérica para executar imagens completas de distribuição do Linux. Dois outros sandboxes de namespaces do Linux vêm à mente:

  • Google Chromesandbox, distribuído atualmente com Google Chrome/Chromium
  • Cadeia de Fogo, uma sandbox de segurança criada para executar o Mozilla Firerfox e qualquer outro programa GUI.

informação relacionada