Usuario en Docker

Andrei Kopylov, o noso CTO, adora, utiliza e promove activamente Docker. Nun novo artigo, explica como crear usuarios en Docker. Traballar correctamente con eles, por que os usuarios non deberían quedar con dereitos de root e como resolver o problema dos indicadores non coincidentes no Dockerfile.

Todos os procesos do contedor executaranse como usuario root, a non ser que o especifique dun xeito especial. Isto parece moi conveniente, porque este usuario non ten restricións. É por iso que traballar como root é incorrecto desde o punto de vista da seguridade. Se ninguén no seu sano juicio traballa no ordenador local con dereitos de root, entón moitos executan procesos baixo root en contedores.

Sempre hai erros que permitirán que o malware saia do contedor e chegue ao ordenador host. Asumindo o peor, debemos asegurarnos de que os procesos dentro do contedor sexan executados por un usuario que non ten ningún dereito na máquina host.

Creando un usuario

Crear un usuario nun contedor non é diferente de crealo en distribucións de Linux. Non obstante, os comandos poden variar para diferentes imaxes de base.

Para distribucións baseadas en Debian, cómpre engadir o seguinte ao ficheiro Dockerfile:

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

Para o alpino:

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

Execución de procesos dende o usuario

Para executar todos os procesos posteriores como usuario con UID 2000, execute:

USER 2000

Para executar todos os procesos posteriores como usuario do nodo, execute:

USER node

Máis en documentación.

Volumes de montaxe

Cando monte volumes dentro dun contedor, proporcione ao usuario a capacidade de ler e/ou escribir ficheiros. Para iso, debe coincidir o UID (GID) do usuario no contedor e do usuario fóra do contedor que teña os permisos adecuados para acceder ao ficheiro. Neste caso, os nomes de usuario non importan.

A miúdo nun ordenador Linux, o UID e o GID dun usuario son iguais a 1000. Estes identificadores son asignados ao primeiro usuario do ordenador.

Coñecer os teus identificadores é sinxelo:

id

Recibirás información completa sobre o teu usuario.
Substitúe 2000 dos exemplos co teu identificador e todo estará ben.

Asignación de UID e GID a un usuario

Se o usuario foi creado anteriormente, pero necesitas cambiar os identificadores, podes facelo así:

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

Se estás a usar a imaxe base alpina, cómpre instalar o paquete shadow:

RUN apk add —no-cache shadow

Pasando o ID de usuario dentro do contedor ao construír a imaxe

Se o teu ID e os ID de todas as persoas que traballan no proxecto coinciden, simplemente especifique este ID no Dockerfile. Non obstante, moitas veces os ID de usuario non coinciden.

Como conseguir o que queres non está claro de inmediato. Para min, isto foi o máis difícil no proceso de dominar Docker. Moitos usuarios de docker non se dan conta de que hai diferentes etapas na vida dunha imaxe. En primeiro lugar, a imaxe é montada usando un Dockerfile. Ao executar un contedor desde unha imaxe, o Dockerfile xa non se usa.

A creación do usuario debe producirse cando se constrúe a imaxe. O mesmo aplícase para determinar o usuario baixo o que se inician os procesos. Isto significa que debemos pasar dalgún xeito o UID (GID) dentro do contedor.

As directivas úsanse para usar variables externas no Dockerfile ENV и ARG. Comparación detallada de directivas aquí.

dockerfile

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

Podes pasar argumentos mediante docker-compose así:

atracador-compoñer

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

PS Para dominar todas as complejidades de Docker, non é suficiente con ler a documentación ou os artigos. Necesitas practicar moito, necesitas coñecer Docker.

Fonte: www.habr.com

Engadir un comentario