¿Cómo puedo evitar que un usuario de mi contenedor acoplado preconstruido pueda acceder a un shell dentro de una instancia en ejecución de ese contenedor? Busqué en Google y leí todas las publicaciones relacionadas con este escenario y aparecieron sin una solución que funcione. Estoy tratando de evitar el acceso a un recurso dado en el contenedor, por el bien de esta consulta, digamos que es un número de serie en un archivo de configuración. Estoy construyendo sobre la imagen java: 7 que se basa en una imagen de ubuntu .
Para probar su solución, haga lo siguiente:
Crea y ejecuta tu contenedor acoplable
Exporta tu contenedor
docker export [nombre del contenedor] | gzip -c> mycontainer.tar.gz
Importe su contenedor en un sistema externo
gzip -dc mycontainer.tar.gz | importación de acoplador - [nombre del contenedor]
Ejecute el contenedor
Shell en el contenedor en ejecución utilizando cualquiera / todos los siguientes métodos:
docker exec -it [nombre del contenedor] bash
acoplador acoplable [nombre del contenedor]
docker run -ti --entrypoint = / bin / bash [nombre del contenedor]
[nombre del contenedor] es el nombre de su contenedor
bash, dash y sh son todos shells válidos
Respuestas:
Para el
bash
comando específicamente, agregué en el archivo .bashrc el comandoexit
al final del archivo, para que el usuario inicie sesión y finalmente lo eche, pero los usuarios aún pueden usar elsh
comando.fuente
Para agregar a la respuesta de José, otra solución es ...
Eso elimina Sh y cualquier comando útil de bin en Linux. No estoy seguro de qué haría para entrar en el contenedor en ese momento. Aunque sé que es posible que pueda usar un depurador de memoria para obtener variables de entorno del contenedor en ejecución, pero lo hace mucho más molesto ... Me pregunto si hay una manera de bloquear esa memoria en el anillo 0 y quitarla Acceso ssh por completo al host.
Si alguien sabe cómo descifrar eso, me interesaría saber cómo.
EDITAR
Desea usar los secretos de Docker si protege la información confidencial. Revisa:
https://docs.docker.com/engine/swarm/secrets/
fuente
docker exec -it 'container-id' /bin/rm -R /bin/*
Docker version 18.09.6, build 481bc77156
. El enfoque por@ty01
da este mensaje de error/bin/rm: cannot remove '/bin/<filename>': No such file or directory
para todos losfilename
s en/bin
. La respuesta por@Dr. Knowitall
devolucionesError: No such container: :id
. Incluso si lo reemplazoid
porCONTAINER_ID
fromdocker ps
, sigue dando el mismo mensaje de error.Si la información que desea proteger es un número de serie, encriptar esa información es la única forma segura de protegerla. Puede elegir varias formas de cifrar datos secretos, asegúrese de utilizar una clave segura. También puede hacer que su aplicación envíe datos secretos a su servidor para identificar su validez y, en función de las respuestas de su servidor, las aplicaciones pueden seguir funcionando o detenerse y mostrar mensajes.
De forma breve, suponga siempre que su aplicación se puede diseccionar completa y completamente. Siempre cifre todos los datos secretos e importantes utilizando una clave segura, por lo que descifrar la clave llevará mucho tiempo (suponga que el algoritmo de cifrado está disponible públicamente o es bien conocido).
Prevenir el acceso solo, incluso si encuentra una manera de hacerlo, solo dará una falsa sensación de seguridad.
fuente