
Como evitar que um usuário do meu contêiner docker pré-construído consiga 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 não encontrei uma solução funcional. Estou tentando impedir o acesso a um determinado recurso no contêiner. Para esta investigação, digamos que seja um número de série em um arquivo de configuração. Estou construindo sobre ojava:7imagem baseada em umaUbuntuimagem.
Para testar sua solução, faça o seguinte:
Crie e execute seu contêiner docker
Exporte seu contêiner
exportação do docker [nome do contêiner] | gzip -c > meucontainer.tar.gz
Importe seu contêiner em um sistema externo
gzip -dc meucontainer.tar.gz | importação do docker - [nome do contêiner]
Execute o contêiner
Shell no contêiner em execução usando qualquer um/todos os seguintes métodos:
docker exec -it [nome do contêiner] bash
docker anexar [nome do contêiner]
docker 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
Responder1
Para complementar a resposta de José, outra solução é...
docker exec :id -it /bin/rm -R /bin/*
Isso elimina sh e qualquer comando bin útil no Linux. Não tenho certeza do que você faria para entrar no contêiner nesse ponto. Embora eu saiba que você pode usar um depurador de memória para obter variáveis de ambiente do contêiner em execução, isso torna tudo muito mais irritante ... Gostaria de saber se existe uma maneira de bloquear essa memória no anel 0 e retirar acesso ssh completamente ao host.
Se alguém souber como decifrar isso, eu estaria interessado em saber como.
EDITAR
Você deseja usar docker secrets se estiver protegendo informações confidenciais. Confira:
Responder2
Especificamente para o bash
comando, adicionei no arquivo .bashrc o comando exit
no final do arquivo, para que o usuário faça login e finalmente seja expulso, mas os usuários ainda podem usar sh
o comando.
Responder3
Se as informações que você deseja proteger forem um número de série, criptografar essas informações será a única maneira segura de protegê-las. Você pode escolher várias maneiras de criptografar dados secretos, certifique-se de usar uma chave forte. Você também pode fazer com que seu aplicativo envie dados secretos ao seu servidor para identificar sua validade e com base nas respostas do seu servidor os aplicativos podem continuar funcionando ou parar e mostrar mensagens.
Resumindo, sempre presuma que sua aplicação pode ser dissecada completa e minuciosamente. Sempre criptografe todos os dados secretos e importantes usando uma chave forte, portanto, a quebra da chave levará muito tempo (suponha que o algoritmo de criptografia esteja disponível publicamente ou seja bem conhecido).
Impedir o acesso por si só, mesmo que você encontre uma maneira de fazê-lo, apenas dará uma falsa sensação de segurança.