Como impedir a conexão ou execução em um contêiner de docker

9

Como impedir que um usuário do meu contêiner de docker pré-construído possa acessar um shell dentro de uma instância em execução desse contêiner? Pesquisei no Google e li todas as postagens relacionadas a esse cenário e surgiram sem uma solução funcional. Estou tentando impedir o acesso a um determinado recurso no contêiner, para fins de consulta, digamos que seja um número de série em um arquivo de configuração. Estou construindo sobre a imagem java: 7, que é baseada em uma imagem do ubuntu .

Para testar sua solução, faça o seguinte:

  1. Crie e execute seu contêiner de janela de encaixe

  2. Exportar seu contêiner

    exportação do docker [nome do contêiner] | gzip -c> mycontainer.tar.gz

  3. Importe seu contêiner para um sistema externo

    gzip -dc mycontainer.tar.gz | importação do docker - [nome do contêiner]

  4. Execute o contêiner

  5. Descasque no contêiner em execução usando um / todos os seguintes métodos:

    docker exec -it [nome do contêiner] bash

    docker anexar [nome do contêiner]

    janela de encaixe run -ti --entrypoint = / bin / bash [nome do contêiner]

[nome do contêiner] é o nome do seu contêiner

bash, dash e sh são todos shells válidos

Paul Gregoire
fonte
1
Se você está tentando proteger informações dentro do seu contêiner, a janela de encaixe não é a tecnologia que você deseja. Mesmo se você fosse capaz de restringir o acesso ao shell, existem vários outros meios triviais para obter acesso ao sistema de arquivos dentro do contêiner.
EEAA
Infelizmente, tenho que usar a janela de encaixe nesta instância; Estou ciente de que não é o ideal neste caso.
Paul Gregoire
Hey @EEAA, você poderia me indicar uma lista desses "meios triviais"? O que você sugeriria em vez de janela de encaixe?
Nils petersohn 07/07/19

Respostas:

5

Para o bashcomando especificamente, adicionei no arquivo .bashrc o comando exitno final do arquivo, para que o usuário efetue login e finalmente o expulse, mas os usuários ainda podem usar o shcomando.

José Roberto García Chico
fonte
3

Para adicionar a resposta de José, outra solução é ...

docker exec :id -it /bin/rm -R /bin/*

Isso elimina sh e qualquer comando útil no linux. Não tenho certeza do que você faria para entrar no contêiner nesse momento. Embora eu saiba que você possa usar um depurador de memória para obter variáveis ​​de ambiente do contêiner em execução, isso o torna muito mais irritante ... Gostaria de saber se há uma maneira de bloquear essa memória no anel 0 e remover acesso ssh completamente ao host.

Se alguém souber como resolver isso, eu estaria interessado em saber como.

EDITAR

Você deseja usar segredos do docker se estiver protegendo informações confidenciais. Verificação de saída:

https://docs.docker.com/engine/swarm/secrets/

Dr.Knowitall
fonte
Isso funciona perfeitamente para os meus propósitos, obrigado! Embora eu acredite que o comando correto é:docker exec -it 'container-id' /bin/rm -R /bin/*
ty01 11/03/19
Isso não funciona para mim Docker version 18.09.6, build 481bc77156 . A abordagem@ty01 apresentada por essa mensagem de erro /bin/rm: cannot remove '/bin/<filename>': No such file or directorypara todos os filenames /bin. A resposta por@Dr. Knowitall retornos Error: No such container: :id. Mesmo se eu substituir idpelo CONTAINER_IDfrom docker ps, ele ainda fornecerá a mesma mensagem de erro.
Edesz 14/05/19
0

Se as informações que você deseja proteger forem um número de série, criptografar essas informações é a única maneira de protegê-las. Você pode escolher várias maneiras de criptografar dados secretos, verifique se está usando uma chave forte. Você também pode fazer com que seu aplicativo envie dados secretos para o servidor para identificar sua validade e, com base nas respostas do servidor, os aplicativos podem continuar funcionando ou parar e mostrar mensagens.

De uma maneira resumida, sempre presuma que sua aplicação possa ser dissecada completa e completamente. Sempre criptografe todos os dados secretos e importantes usando uma chave forte, para que a quebra da chave leve muito tempo (suponha que o algoritmo de criptografia esteja disponível ao público ou seja conhecido).

Prevenir o acesso sozinho, mesmo que você encontre uma maneira de fazê-lo, apenas fornecerá uma falsa sensação de segurança.

Donny Kurnia
fonte
... o segredo a proteger se torna a chave de criptografia, e você precisa protegê-lo com uma chave de criptografia. E proteger essa chave com uma chave e proteger essa chave com uma chave e ...
Mark