Bruker i Docker

Andrey Kopylov, vår CTO, elsker, bruker og promoterer Docker aktivt. I en ny artikkel forklarer han hvordan du oppretter brukere i Docker. Riktig arbeid med dem, hvorfor brukere ikke skal sitte igjen med rotrettigheter og hvordan løse problemet med feilaktige indikatorer i Dockerfilen.

Alle prosesser i beholderen vil kjøre som root-bruker, med mindre du spesifiserer det på en spesiell måte. Dette virker veldig praktisk, fordi denne brukeren ikke har noen begrensninger. Dette er grunnen til at det er feil å jobbe som root fra et sikkerhetssynspunkt. Hvis ingen ved sitt rette sinn jobber på den lokale datamaskinen med root-rettigheter, kjører mange prosesser under root i containere.

Det er alltid feil som vil tillate skadelig programvare å unnslippe fra beholderen og komme inn på vertsdatamaskinen. Forutsatt det verste, må vi sørge for at prosesser inne i containeren kjøres av en bruker som ikke har noen rettigheter på vertsmaskinen.

Opprette en bruker

Å opprette en bruker i en beholder er ikke forskjellig fra å lage den i Linux-distribusjoner. Kommandoene kan imidlertid variere for forskjellige basisbilder.

For debianbaserte distribusjoner må du legge til følgende i Dockerfilen:

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

For alpint:

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

Kjøre prosesser fra brukeren

For å kjøre alle påfølgende prosesser som en bruker med UID 2000, kjør:

USER 2000

For å kjøre alle påfølgende prosesser som nodebruker, kjør:

USER node

Mer i dokumentasjon.

Monteringsvolum

Når du monterer volumer inne i en beholder, gi brukeren muligheten til å lese og/eller skrive filer. For å gjøre dette, må UID (GID) til brukeren i beholderen og brukeren utenfor beholderen som har de nødvendige tillatelsene til å få tilgang til filen samsvare. I dette tilfellet spiller ikke brukernavn noen rolle.

Ofte på en Linux-datamaskin er en brukers UID og GID lik 1000. Disse identifikatorene tildeles den første brukeren av datamaskinen.

Det er enkelt å finne ut identifikatorene dine:

id

Du vil motta omfattende informasjon om brukeren din.
Bytt ut 2000 fra eksemplene med identifikatoren din, og alt vil være i orden.

Tilordne en UID og GID til en bruker

Hvis brukeren ble opprettet tidligere, men du må endre identifikatorene, kan du gjøre det slik:

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

Hvis du bruker det alpine basisbildet, må du installere skyggepakken:

RUN apk add —no-cache shadow

Sende bruker-ID-en inne i beholderen når bildet bygges

Hvis ID-en din og ID-ene til alle personene som jobber med prosjektet samsvarer, spesifiser bare denne ID-en i Dockerfilen. Imidlertid stemmer ofte ikke bruker-ID-ene.

Hvordan du oppnår det du ønsker er ikke umiddelbart klart. For meg var dette det vanskeligste i prosessen med å mestre Docker. Mange docker-brukere innser ikke at det er forskjellige stadier i livet til et bilde. Først settes bildet sammen ved hjelp av en Dockerfile. Når du kjører en container fra et bilde, brukes ikke lenger Dockerfilen.

Brukeroppretting må skje når bildet bygges. Det samme gjelder for å bestemme brukeren som prosesser startes under. Dette betyr at vi på en eller annen måte må sende UID (GID) inne i containeren.

Direktiver brukes til å bruke eksterne variabler i Dockerfilen ENV и ARG. Detaljert sammenligning av direktiver her.

Dockerfile

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

Du kan sende argumenter via docker-compose slik:

Docker-komponere

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

PS For å mestre alle forviklingene til Docker, er det ikke nok å lese dokumentasjonen eller artiklene. Du må øve mye, du må få en følelse av Docker.

Kilde: www.habr.com

Legg til en kommentar