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:
Crie e execute seu contêiner de janela de encaixe
Exportar seu contêiner
exportação do docker [nome do contêiner] | gzip -c> mycontainer.tar.gz
Importe seu contêiner para um sistema externo
gzip -dc mycontainer.tar.gz | importação do docker - [nome do contêiner]
Execute o contêiner
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
Respostas:
Para o
bash
comando especificamente, adicionei no arquivo .bashrc o comandoexit
no final do arquivo, para que o usuário efetue login e finalmente o expulse, mas os usuários ainda podem usar osh
comando.fonte
Para adicionar a resposta de José, outra solução é ...
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/
fonte
docker exec -it 'container-id' /bin/rm -R /bin/*
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 directory
para todos osfilename
s/bin
. A resposta por@Dr. Knowitall
retornosError: No such container: :id
. Mesmo se eu substituirid
peloCONTAINER_ID
fromdocker ps
, ele ainda fornecerá a mesma mensagem de erro.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.
fonte