Cómo evitar adjuntar o ejecutar en un contenedor acoplable

9

¿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:

  1. Crea y ejecuta tu contenedor acoplable

  2. Exporta tu contenedor

    docker export [nombre del contenedor] | gzip -c> mycontainer.tar.gz

  3. Importe su contenedor en un sistema externo

    gzip -dc mycontainer.tar.gz | importación de acoplador - [nombre del contenedor]

  4. Ejecute el contenedor

  5. 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

Paul Gregoire
fuente
1
Si está tratando de proteger la información dentro de su contenedor, Docker no es la tecnología que desea. Incluso si pudo restringir el acceso a la shell, hay una miríada de otros medios triviales para obtener acceso al sistema de archivos dentro del contenedor.
EEAA
Lamentablemente tengo que usar Docker en este caso; Soy muy consciente de que no es lo ideal en este caso.
Paul Gregoire
Hola @EEAA, ¿podrías señalarme una lista de esos "medios triviales"? ¿Qué sugerirías en lugar de docker entonces?
nils petersohn

Respuestas:

5

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 eche, pero los usuarios aún pueden usar el shcomando.

José Roberto García Chico
fuente
3

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 ú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/

Dr.Knowitall
fuente
Esto funciona perfectamente para mis propósitos, ¡gracias! Aunque creo que el comando correcto es:docker exec -it 'container-id' /bin/rm -R /bin/*
ty01
Esto no funciona para mí 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 directorypara todos los filenames en /bin. La respuesta por@Dr. Knowitall devoluciones Error: No such container: :id. Incluso si lo reemplazo idpor CONTAINER_IDfrom docker ps, sigue dando el mismo mensaje de error.
edesz
0

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.

Donny Kurnia
fuente
... entonces el secreto para proteger se convierte en la clave de cifrado, y debe protegerlo con una clave de cifrado. Y proteger esa llave con una llave y proteger esa llave con una llave y ...
Marque el