Chroot, Container e Virtualização

Esta seção documenta características técnicas, vantagens e desvantagens de cada uma das respectivas tecnologias.

Versão em vídeo desta seção pode estar disponível no canal do Guia Foca no YouTube: Entenda Chroot, Container e Virtualização.

Chroot

Chroot é uma das tecnologias mais antigas entre todas, veio inspirada no BSD Jail.

Vantagens

  1. O programa executa em um espaço separado do sistema de arquivos principal da máquina.
  2. Não possui perda de performance, pois é como uma pasta local no sistema
  3. Possibilita testes mais arriscados na máquina, inclusive testes com versões diferentes do SO (ou até de arquiteturas retro-compatíveis com o kernel, como testar um sistema i386 em um x86_64).
  4. Possibilita testes mais arriscados na máquina

Desvantagens

  1. O espaço do kernel é o mesmo da máquina física (não possui qualquer isolamento)
  2. Usa a mesma memória RAM (podendo lotar a memória)
  3. Separação de dispositivos físicos é deficiente, com isso o disco raíz pode ser acessado pelo chroot (escapar da jaula).

Container

Container é o que há de mais performático em termo de isolação de privilégios. Basicamente é um Chroot que deu certo :-D

Vantagens

  1. Permite isolar totalmente os recursos de CPU, memória, disco da máquina host

  2. Atachar isoladamente placas de redes do host físico direto para o container

  3. Alta performance de funcionamento, identico a máquina física

  4. Não 'perde' espaço em disco, devido a alocação prévia de disco ou memória. Apenas o espaço requerido ou sendo executado serão efetivamente utilizados em máquina física.

  5. Inicialização muito rápida. É possível iniciar 250 containers em questão de segundos em uma máquina razoável.

Desvantagens

  1. Somente é possível utilizar o kernel da máquina hospedeira. A virtualização permite utilizar kernels de diferentes versões

  2. Como executa no mesmo espaço de memória do kernel da máquina física, existe a possibilidade de alguns tipos de vulnerabilidades escalarem privilégios para a máquina host (um pouco raras hoje em dia, mas já ocorreu no passado).

Exemplos de tecnologias de containers: lxc,vserver, openvz, containerd, Docker.

Vantagens da Virtualização

Virtualização consiste em emular totalmente uma máquina (com memória RAM, disco, processador, video, arquitetura) com recursos alocados para sua máquina.

Vantagens da Virtualização

  1. Mesmas vantagens do chroot, exceto perda de performance (pode perder até 5% de performance da máquina, mesmo nos melhores sistemas de virtualização via hardware)
  2. Separação de kernel: O sistema host (o que roda a virtualização) pode rodar um kernel 5.4 e a máquina virtual (convidado) um kernel 6.0.
  3. Separação de Memória
  4. Separação de CPU
  5. Separação de Rede
  6. Permite emular outra arquiteturas (para desenvolvimento, homologação, testes, etc)

Desvantagens

  1. Disco e Memória precisam ser pré-alocados
  2. Perda de performance em comparação com chroot
  3. Pode haver grnade competição de recursos levando a máquina virtual a um starvation

Além de virtualização full, temos sistemas chamados Para-virtualização, que carrega todas as vantagens e desvantagens da virtualização tradicional acima, mas utiliza um kernel específicado pelo host (podendo ser ou não a mesma versão ou arquitetura executada no host de virtualização). Um exemplo de sistema que suporta para-virtualização é o XEN.

Exemplos de sistema de virtualização convencional/para-virtualização: KVM, XEN, Vmware, Hyperv.