Usuario en Docker

Andrey Kopylov , nuestro director técnico, ama, usa y promueve activamente Docker. En un nuevo artículo, habla sobre cómo crear usuarios en Docker. Corrija el trabajo con ellos, por qué los usuarios no pueden quedarse con privilegios de root y cómo resolver el problema de la falta de coincidencia de identificadores en el Dockerfile.


Todos los procesos en el contenedor se ejecutarán como root, a menos que se especifique de manera especial. Parece muy conveniente, porque este usuario no tiene restricciones. Es por eso que trabajar desde la raíz está mal desde un punto de vista de seguridad. Si en la computadora local nadie en su sano juicio trabaja con derechos de root, entonces muchos inician procesos bajo la raíz en contenedores.


Siempre hay errores que permiten que el malware salga del contenedor y llegue a la computadora host. Suponiendo lo peor, debemos asegurarnos de que los procesos se inicien dentro del contenedor de un usuario que no tiene ningún derecho en la máquina host.


Creación de usuario


Crear un usuario en un contenedor no es diferente de crearlo en distribuciones de Linux. Sin embargo, para diferentes imágenes básicas, los equipos pueden variar.


Para distribuciones basadas en Debian en el Dockerfile, debe agregar:



RUN groupadd --gid 2000 node \ && useradd --uid 2000 --gid node --shell /bin/bash --create-home node 

Para alpino:


 RUN addgroup -g 2000 node \ && adduser -u 2000 -G node -s /bin/sh -D node 

Iniciar procesos desde el usuario


Para iniciar todos los procesos posteriores de un usuario con UID 2000, ejecute:


 USER 2000 

Para iniciar todos los procesos posteriores desde el nodo de usuario, ejecute:


 USER node 

Más detalles en la documentación .


Montar volúmenes


Cuando monte volúmenes dentro de un contenedor, brinde al usuario la capacidad de leer y / o escribir archivos. Para esto, el UID (GID) del usuario en el contenedor y el usuario fuera del contenedor que tiene los derechos de acceso apropiados al archivo debe corresponder. Al mismo tiempo, los nombres de usuario no importan.


A menudo, en una computadora Linux, el UID y GID del usuario son 1000. Estos identificadores se asignan al primer usuario de la computadora.


Obtener sus identificadores es fácil:


 id 

Recibirá información completa sobre su usuario.
Reemplace 2000 de los ejemplos con su identificador y todo estará bien.


Asignar usuario UID y GID


Si el usuario se creó antes, pero es necesario cambiar los identificadores, puede hacerlo así:


 RUN usermod -u 1000 node \ && groupmod -g 1000 node 

Si está utilizando la imagen alpina básica, debe instalar el paquete sombra:


 RUN apk add —no-cache shadow 

Pasar la ID de usuario dentro del contenedor al construir la imagen


Si su identificador y los identificadores de todas las personas que trabajan en el proyecto son iguales, simplemente especifique este identificador en el Dockerfile. Sin embargo, a menudo los identificadores de usuario no coinciden.


Cómo realizar lo deseado no está claro de inmediato. Para mí fue lo más difícil en el proceso de dominar docker. Muchos usuarios de Docker no creen que haya diferentes etapas en la vida de una imagen. Primero, la imagen se recopila para esto usando el Dockerfile. Al iniciar un contenedor desde una imagen de Dockerfile, ya no se usa.


La creación de usuarios debe ocurrir al construir la imagen. Lo mismo se aplica a la definición de usuario desde la que se inician los procesos. Esto significa que de alguna manera debemos pasar el UID (GID) al contenedor.


Las directivas ENV y ARG se utilizan para usar variables externas en el Dockerfile. Una comparación detallada de las directivas está aquí .


Dockerfile


 ARG UID=1000 ARG GID=1000 ENV UID=${UID} ENV GID=${GID} RUN usermod -u $UID node \ && groupmod -g $GID node 

Puede pasar argumentos a través de docker-compose de esta manera:


docker-compose


 build: context: ./src/backend args: UID: 1000 GID: 1000 

PD: Para dominar todos los trucos de Docker, no es suficiente leer documentación o artículos. Necesitas practicar mucho, necesitas sentir el acoplador.

Source: https://habr.com/ru/post/448480/


All Articles