Não importa o nome sofisticado usado aqui, ambas são soluções para um problema específico: uma solução de segregação melhor do que o chroot clássico do Unix . Virtualização no nível do sistema operacional, contêineres, zonas ou mesmo "chroot with steroids" são nomes ou títulos comerciais que definem o mesmo conceito de separação do espaço do usuário, mas com recursos diferentes.
O Chroot foi introduzido em 18 de março de 1982, meses antes do lançamento do 4.2 BSD , como uma ferramenta para testar sua instalação e construção do sistema, mas hoje ainda possui suas falhas. Como o primeiro objetivo do chroot era apenas fornecer um caminho de nova raiz , outros aspectos do sistema que precisavam ser isolados ou controlados foram descobertos (rede, exibição de processo, taxa de transferência de E / S). É aqui que os primeiros contêineres (virtualização no nível do usuário) aparecem.
Ambas as tecnologias (FreeBSD Jails e LXC) fazem uso do isolamento do espaço do usuário para fornecer outra camada de segurança. Essa compartimentação garantirá que um determinado processo se comunique apenas com outros processos no mesmo contêiner no mesmo host e, se estiver usando algum recurso de rede para obter uma comunicação "fora do mundo", tudo será encaminhado para a interface / canal atribuído ao qual esse contêiner tem.
Recursos
Cadeias do FreeBSD:
- Considerada tecnologia estável, já que é um recurso do FreeBSD desde 4.0;
- É preciso o melhor do sistema de arquivos ZFS no ponto em que você pode clonar cadeias e criar modelos de prisão para implantar facilmente mais cadeias. Um pouco mais de loucura do ZFS ;
- Bem documentado e em evolução ;
- Cadeias hierárquicas permitem que você crie cadeias dentro de uma prisão (precisamos ir mais fundo!). Combine com
allow.mount.zfs
para obter mais potência, e outras variáveis como children.max
definem cadeias máximas de filhos.
- O rctl (8) manipulará os limites de recursos das cadeias (memória, CPU, disco, ...);
- As cadeias do FreeBSD lidam com o espaço do usuário do Linux ;
- Isolamento de rede com
vnet
, permitindo que cada prisão tenha sua própria pilha de rede, interfaces, tabelas de endereçamento e roteamento;
nullfs
para ajudar a vincular pastas àquelas localizadas no servidor real e dentro de uma prisão;
- utilitário ezjail para ajudar implementações em massa e gerenciamento de cadeias;
- Muitos ajustáveis do kernel (
sysctl
). security.jail.allow.*
Os parâmetros limitarão as ações do usuário raiz dessa prisão.
- Talvez, as cadeias do FreeBSD estendam alguns dos recursos do projeto VPS, como a migração ao vivo em um futuro próximo.
- Há algum esforço na integração do ZFS e do Docker em execução. Ainda experimental.
- O FreeBSD 12 suporta bhyve dentro de uma prisão e PF dentro de uma prisão, criando mais isolamento para essas ferramentas
- Muitas ferramentas interessantes foram desenvolvidas nos últimos anos. Alguns deles estão indexados nesta postagem do blog .
- Alternativas: projeto VPS do FreeBSD
Contentores Linux (LXC):
- Nova tecnologia "no kernel", mas sendo endossada pelas grandes (especialmente Canonical);
- Contêineres sem privilégios a partir do LXC 1.0 dão um grande passo na segurança dentro de contêineres;
- Mapeamento de UID e GID dentro de contêineres;
- Namespaces do kernel, para fazer a separação do IPC, montagem, pid, rede e usuários. Esses namespaces podem ser tratados de maneira desanexada, onde um processo que usa um namespace de rede diferente não será necessariamente isolado em outros aspectos, como armazenamento;
- Grupos de Controle (cgroups) para gerenciar recursos e agrupá-los. CGManager é o cara para conseguir isso.
- Perfis Apparmor / SELinux e recursos do Kernel para aplicar melhor os recursos do Kernel acessíveis por contêineres. O Seccomp também está disponível nos contêineres lxc para filtrar as chamadas do sistema. Outros aspectos de segurança aqui .
Funcionalidade de migração ao vivo em desenvolvimento. É realmente difícil dizer quando estará pronto para uso na produção, pois o docker / lxc terá que lidar com a pausa do processo no espaço do usuário, capturar instantâneos, migrar e consolidar - ref1 , ref2 .A migração ao vivo está funcionando com contêineres básicos (nenhum dispositivo passa nem serviços de rede complexos nem configurações especiais de armazenamento).
- Ligações de APIs para permitir o desenvolvimento em python3 e 2, lua, Go, Ruby e Haskell
- Área centralizada "O que há de novo". Bastante útil sempre que você precisar verificar se algum bug foi corrigido ou se um novo recurso foi confirmado. Aqui .
- Uma alternativa interessante poderia ser o lxd , que funciona sob o capô, mas possui alguns recursos interessantes, como uma API REST, integração do OpenStack, etc.
- Outra coisa interessante é que o Ubuntu parece estar enviando o zfs como o sistema de arquivos padrão para contêineres no 16.04 . Para manter os projetos alinhados, o lxd lançou a versão 2.0 e alguns dos recursos estão relacionados ao zfs .
- Alternativas : OpenVZ , Docker
- Docker . Observe aqui que o Docker usa namespaces, cgroups criando isolamento "por aplicativo" / "por software". Principais diferenças aqui . Enquanto o LXC cria contêineres com vários processos, o Docker reduz um contêiner o máximo possível para um único processo e, em seguida, gerencia isso pelo Docker.
- Esforço para integrar o Docker ao SELinux e reduzir os recursos dentro de um contêiner para torná-lo mais seguro - Docker e SELinux, Dan Walsh
- Qual é a diferença entre Docker, LXD e LXC
O Docker não usa mais o lxc. Agora eles têm uma lib específica chamada libcontainer que lida com a integração com o namespace de baixo nível do Kernel e os recursos do cgroups diretamente.
Nenhuma das tecnologias é uma panacéia de segurança, mas ambas são maneiras muito boas de isolar um ambiente que não requer virtualização completa devido à infraestrutura mista de sistemas operacionais. A segurança virá após muita documentação, leitura e implementação de ajustáveis do kernel, MAC e isolamentos que essas virtidades no nível do sistema operacional oferecem a você.
Veja também: