Usuari a Docker

Andrei Kopylov, el nostre CTO, estima, utilitza i promociona de manera activa Docker. En un nou article, explica com crear usuaris a Docker. Treballar correctament amb ells, per què els usuaris no haurien de quedar-se amb drets d'arrel i com resoldre el problema dels indicadors no coincidents al Dockerfile.

Tots els processos del contenidor s'executaran com a usuari root, tret que ho especifiqueu d'una manera especial. Això sembla molt convenient, perquè aquest usuari no té restriccions. És per això que treballar com a root és incorrecte des del punt de vista de la seguretat. Si ningú en el seu bon judici treballa a l'ordinador local amb drets d'arrel, molts executen processos amb root als contenidors.

Sempre hi ha errors que permetran que el programari maliciós escapi del contenidor i entri a l'ordinador amfitrió. Suposant el pitjor, hem d'assegurar-nos que els processos dins del contenidor els executa un usuari que no té cap dret a la màquina host.

Creació d'usuaris

Crear un usuari en un contenidor no és diferent de crear-lo en distribucions de Linux. Tanmateix, les ordres poden variar per a diferents imatges base.

Per a les distribucions basades en Debian, heu d'afegir el següent al fitxer Dockerfile:

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

Per alpí:

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

Execució de processos des de l'usuari

Per executar tots els processos posteriors com a usuari amb UID 2000, executeu:

USER 2000

Per executar tots els processos posteriors com a usuari del node, executeu:

USER node

Més informació a documentació.

Volums de muntatge

Quan munteu volums dins d'un contenidor, proporcioneu a l'usuari la possibilitat de llegir i/o escriure fitxers. Per fer-ho, l'UID (GID) de l'usuari del contenidor i l'usuari de fora del contenidor que tingui els permisos adequats per accedir al fitxer han de coincidir. En aquest cas, els noms d'usuari no tenen importància.

Sovint, en un ordinador Linux, l'UID i el GID d'un usuari són iguals a 1000. Aquests identificadors s'assignen al primer usuari de l'ordinador.

Esbrinar els vostres identificadors és fàcil:

id

Rebràs informació completa sobre el teu usuari.
Substituïu 2000 dels exemples pel vostre identificador i tot anirà bé.

Assignació d'un UID i GID a un usuari

Si l'usuari s'ha creat anteriorment, però necessiteu canviar els identificadors, podeu fer-ho així:

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

Si utilitzeu la imatge base alpina, heu d'instal·lar el paquet shadow:

RUN apk add —no-cache shadow

Passar l'identificador d'usuari dins del contenidor en crear la imatge

Si el vostre identificador i els identificadors de totes les persones que treballen en el projecte coincideixen, només heu d'especificar aquest identificador al fitxer Dockerfile. Tanmateix, sovint els ID d'usuari no coincideixen.

Com aconseguir el que voleu no està clar immediatament. Per a mi, això va ser el més difícil en el procés de dominar Docker. Molts usuaris de Docker no s'adonen que hi ha diferents etapes en la vida d'una imatge. Primer, la imatge s'assembla amb un Dockerfile. Quan s'executa un contenidor des d'una imatge, el Dockerfile ja no s'utilitza.

La creació de l'usuari s'ha de produir quan es construeix la imatge. El mateix s'aplica per determinar l'usuari sota el qual s'inicien els processos. Això vol dir que d'alguna manera hem de passar l'UID (GID) dins del contenidor.

Les directives s'utilitzen per utilitzar variables externes al Dockerfile ENV и ARG. Comparació detallada de directives aquí.

Dockerfile

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

Podeu passar arguments mitjançant docker-compose així:

docker-compose

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

PS Per dominar totes les complexitats de Docker, no n'hi ha prou amb llegir la documentació o els articles. Necessites practicar molt, has de tenir una idea de Docker.

Font: www.habr.com

Afegeix comentari