Para o comando bash
especificamente, adicionei no arquivo .bashrc o comando exit
no final do arquivo, para que o usuário efetue login e finalmente efetue o kickout, mas os usuários ainda podem usar o comando sh
.
Como impedir que um usuário do meu contêiner do Docker pré-compilado acesse um shell em uma instância em execução desse contêiner? Eu pesquisei e li todas as postagens relacionadas a esse cenário e acabei sem uma solução de trabalho. Eu estou tentando impedir o acesso a um determinado recurso no contêiner, por causa desta consulta, digamos que é um número de série em um arquivo de configuração. Eu estou construindo sobre a imagem java: 7 que é baseada em uma imagem ubuntu .
Para testar sua solução, faça o seguinte:
Crie e execute seu contêiner do Docker
Exportar seu contêiner
exportação do docker [nome do contêiner] | gzip -c > mycontainer.tar.gz
Importe seu contêiner em um sistema externo
gzip -dc mycontainer.tar.gz | importação do docker - [nome do contêiner]
Executar o contêiner
Conecte-se ao contêiner em execução usando qualquer um dos métodos a seguir:
docker exec -it [nome do contêiner] bash
anexar janela de encaixe [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
Para o comando bash
especificamente, adicionei no arquivo .bashrc o comando exit
no final do arquivo, para que o usuário efetue login e finalmente efetue o kickout, mas os usuários ainda podem usar o comando sh
.
Para adicionar a resposta de José, outra solução é ...
docker exec :id -it /bin/rm -R /bin/*
Isso elimina sh e qualquer comando útil do bin no linux. Não tenho certeza do que você faria para entrar no contêiner naquele momento. Embora eu saiba que você pode ser capaz de usar um depurador de memória para obter variáveis de ambiente do contêiner em execução, mas isso torna muito mais chato ... Eu me pergunto se há uma maneira de bloquear essa memória no anel 0 e tirar acesso ssh completamente ao host.
Se alguém souber como quebrar isso, eu estaria interessado em saber como.
EDITAR
Você deseja usar os segredos do docker se estiver protegendo informações confidenciais. Confira:
Se as informações que você deseja proteger forem um número de série, criptografar essas informações é a única maneira segura de protegê-las. Você pode escolher várias maneiras de criptografar dados secretos, verifique se está usando uma chave strong. Você também pode fazer com que seu aplicativo envie dados secretos para seu servidor para identificar sua validade e, com base nas respostas de seu servidor, os aplicativos podem continuar trabalhando ou parar e mostrar mensagens.
Em um curto espaço de tempo, sempre presuma que seu aplicativo pode ser completamente dissecado e completo. Sempre criptografe todos os dados importantes e secretos usando uma chave strong para que a chave demore muito tempo (suponha que o algoritmo de criptografia esteja disponível publicamente ou seja bem conhecido).
Evitar o acesso sozinho, mesmo se você encontrar uma maneira de fazê-lo, apenas dará uma falsa sensação de segurança.
Tags docker