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