Cómo evitar adjuntar o ejecutar en un contenedor acoplable

Cómo evitar adjuntar o ejecutar en un contenedor acoplable

¿Cómo puedo evitar que un usuario de mi contenedor acoplable prediseñado 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 no encontré una solución que funcionara. Estoy intentando impedir el acceso a un recurso determinado 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 eljava:7imagen que se basa en unaubuntuimagen.

Para probar su solución, haga lo siguiente:

  1. Crea y ejecuta tu contenedor acoplable

  2. Exporta tu contenedor

    exportación de Docker [nombre del contenedor] | gzip -c > micontenedor.tar.gz

  3. Importe su contenedor en un sistema externo

    gzip -dc micontenedor.tar.gz | importación de ventana acoplable - [nombre del contenedor]

  4. Ejecute el contenedor

  5. Shell en el contenedor en ejecución utilizando cualquiera o todos los métodos siguientes:

    docker exec -it [nombre del contenedor] bash

    adjuntar ventana 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

Respuesta1

Para agregar a la respuesta de José, otra solución es...

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

Eso elimina sh y cualquier comando bin útil en Linux. No estoy seguro de qué harías para entrar al contenedor en ese momento. Aunque sé que es posible que puedas usar un depurador de memoria para obtener variables de entorno del contenedor en ejecución, pero eso 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 utilizar los secretos de Docker si está protegiendo información confidencial. Verificar:

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

Respuesta2

Para el bashcomando específicamente, agregué en el archivo .bashrc el comando exital final del archivo, para que el usuario inicie sesión y finalmente lo expulse, pero los usuarios aún pueden usar shel comando.

Respuesta3

Si la información que desea proteger es un número de serie, cifrarla 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, según las respuestas de su servidor, las aplicaciones pueden continuar funcionando o detenerse y mostrar mensajes.

En resumen, asuma siempre que su aplicación se puede analizar completa y exhaustivamente. Cifre siempre 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).

Impedir el acceso por sí solo, incluso si encuentra una manera de hacerlo, solo dará una falsa sensación de seguridad.

información relacionada