Usuario en Docker

Andrey Kopylov, nuestro director técnico, ama, usa activamente y promueve Docker. En este nuevo artículo, explica cómo crear usuarios en Docker. La correcta gestión de estos, por qué no se debe dejar a los usuarios con privilegios de root y cómo resolver el problema de la discrepancia de indicadores en Dockerfile.

Todos los procesos dentro del contenedor se ejecutarán como el usuario root, a menos que se indique de manera especial. Esto parece muy conveniente, ya que este usuario no tiene ninguna restricción. Por esta razón, trabajar como root es incorrecto desde el punto de vista de la seguridad. Si en la computadora local nadie en su sano juicio trabaja con privilegios de root, muchos inician procesos como root en contenedores.

Siempre hay bugs que permiten a un malware escapar del contenedor y llegar a la computadora anfitriona. Asumiendo lo peor, debemos asegurar que los procesos se ejecuten dentro del contenedor a partir de un usuario que no tenga privilegios en la máquina anfitriona.

Creación de usuario

La creación de un usuario en el contenedor no difiere de su creación en distribuciones de Linux. Sin embargo, para diferentes imágenes base, los comandos pueden variar.

Para distribuciones basadas en Debian en Dockerfile es necesario agregar:

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

Para Alpine:

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

Ejecutar procesos como usuario

Para ejecutar todos los procesos subsecuentes como el usuario con UID 2000, ejecute:

USER 2000

Para ejecutar todos los procesos subsecuentes como el usuario node, ejecute:

USER node

Más detalles en la documentación.

Montaje de volúmenes

Al montar volúmenes dentro del contenedor, asegúrese de que el usuario tenga permiso para 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 correspondientes a los archivos, deben coincidir. Los nombres de usuario no tienen importancia.

A menudo, en una computadora Linux, el usuario tiene UID y GID iguales a 1000. Estos identificadores se asignan al primer usuario del ordenador.

Conocer tus identificadores es sencillo:

id

Recibirás información completa sobre tu usuario.
Reemplace 2000 en los ejemplos con su identificador y todo estará en orden.

Asignación de UID y GID al usuario

Si el usuario fue creado anteriormente, pero es necesario cambiar los identificadores, se puede hacer así:

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

Si utiliza una imagen base alpine, debe instalar el paquete shadow:

RUN apk add —no-cache shadow

Paso del identificador 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, es suficiente con indicar este identificador en el Dockerfile. Sin embargo, a menudo los identificadores de los usuarios no coinciden.

Cómo lograr lo deseado no es inmediatamente claro. Para mí, fue lo más difícil en el proceso de aprendizaje de Docker. Muchos usuarios de Docker no piensan en que hay diferentes etapas en la vida de una imagen. Primero se construye la imagen, para lo cual se utiliza el Dockerfile. Al ejecutar el contenedor desde la imagen, el Dockerfile ya no se utiliza.

La creación de usuarios debe tener lugar al construir la imagen. Lo mismo se aplica a la definición del usuario bajo el cual se ejecutan los procesos. Esto significa que de alguna manera debemos pasar el UID (GID) dentro del contenedor.

Las directivas que se utilizan para variables externas en el Dockerfile son ENV y ARG. Comparación detallada de las directivas aquí.

Dockerfile

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

Los argumentos se pueden pasar a través de docker-compose así:

docker-compose

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

P.D. Para dominar todos los conceptos de Docker, no es suficiente con leer la documentación o artículos. Se necesita mucha práctica, hay que sentir Docker.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster