Contêineres LXC como um ambiente sandbox

9

Atualmente, estou iniciando um projeto avaliando programas não confiáveis ​​(tarefas dos alunos) em um ambiente seguro de área restrita. A idéia principal é criar um aplicativo Web para o wrapper GlassFish e Java em torno do 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 o SELinux para proteger o sistema host.

Minha pergunta é: É uma boa idéia criar esse mecanismo para um ambiente sandbox ou há alguma solução melhor para esse problema? Deve ser leve e seguro contra a criatividade dos alunos.

eXPi
fonte

Respostas:

6

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

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

  • A libvirt garante o confinamento rigoroso dos contêineres ao usar o SELinux (graças ao LXC_driver) - embora não seja apenas o caso do RHEL / Centos / Fedora (eu não uso muito o Ubuntu / Debian) https://www.redhat.com/archives /libvir-list/2012-January/msg01006.html - portanto, seguir com o SELinux é uma boa ideia (na minha opinião, é "obrigatório" nessas circunstâncias)
  • Defina regras estritas do cgroups para que seus convidados não congelem ou afetem outros contêineres
  • Prefiro usar contêineres baseados em LVM - é sempre mais uma camada de "segurança"
  • Pense em arquitetura e solução de rede. Esses contêineres precisam se comunicar?

Comece lendo isso - é bastante antigo, mas ainda assim - há muito conhecimento lá. E também - conheça os espaços de nome de usuário

E depois de tudo isso pensar novamente - você realmente tem muito tempo para brincar com a segurança LXC? KVM é muito mais simples ...

Maciej Lasyk
fonte
Primeiro de tudo, obrigado pela resposta. Escolho o LXC porque preciso de algo leve e ele será executado dentro do KVM. É possível executar o KVM dentro do KVM?
expi
1

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

  • Sandbox do Google Chrome , distribuído atualmente com o Google Chrome / Chromium
  • Firejail , uma sandbox de segurança criada para executar o Mozilla Firerfox e qualquer outro programa da GUI.
netblue
fonte