
¿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:
Crea y ejecuta tu contenedor acoplable
Exporta tu contenedor
exportación de Docker [nombre del contenedor] | gzip -c > micontenedor.tar.gz
Importe su contenedor en un sistema externo
gzip -dc micontenedor.tar.gz | importación de ventana acoplable - [nombre del contenedor]
Ejecute el contenedor
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:
Respuesta2
Para el bash
comando específicamente, agregué en el archivo .bashrc el comando exit
al final del archivo, para que el usuario inicie sesión y finalmente lo expulse, pero los usuarios aún pueden usar sh
el 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.