Bruger i Docker

Andrey Kopylov, vores CTO, elsker, bruger og promoverer Docker aktivt. I en ny artikel forklarer han, hvordan man opretter brugere i Docker. Korrekt arbejde med dem, hvorfor brugere ikke skal efterlades med root-rettigheder, og hvordan man løser problemet med uoverensstemmende indikatorer i Dockerfilen.

Alle processer i containeren vil køre som root-brugeren, medmindre du angiver det på en speciel måde. Dette virker meget praktisk, fordi denne bruger ikke har nogen begrænsninger. Det er derfor, at det er forkert at arbejde som root ud fra et sikkerhedssynspunkt. Hvis ingen ved deres rette sind arbejder på den lokale computer med root-rettigheder, så kører mange processer under root i containere.

Der er altid fejl, der tillader malware at slippe ud af containeren og komme ind på værtscomputeren. Forudsat det værste, skal vi sikre, at processer inde i containeren køres af en bruger, der ikke har nogen rettigheder på værtsmaskinen.

Brugeroprettelse

Oprettelse af en bruger i en container er ikke anderledes end at oprette den i Linux-distributioner. Kommandoerne kan dog variere for forskellige basisbilleder.

For debian-baserede distributioner skal du tilføje følgende til Dockerfilen:

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

For alpine:

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

Kørsel af processer fra brugeren

For at køre alle efterfølgende processer som bruger med UID 2000 skal du køre:

USER 2000

For at køre alle efterfølgende processer som nodebruger skal du køre:

USER node

Mere i dokumentation.

Monteringsvolumener

Når du monterer volumener inde i en container, skal du give brugeren mulighed for at læse og/eller skrive filer. For at gøre dette skal UID (GID) for brugeren i containeren og brugeren uden for containeren, som har de relevante tilladelser til at få adgang til filen, matche. I dette tilfælde er brugernavne ligegyldige.

Ofte på en Linux-computer er en brugers UID og GID lig med 1000. Disse identifikatorer tildeles den første bruger af computeren.

Det er nemt at finde ud af dine identifikatorer:

id

Du vil modtage omfattende information om din bruger.
Erstat 2000 fra eksemplerne med din identifikator, og alt vil være i orden.

Tildeling af et UID og GID til en bruger

Hvis brugeren er oprettet tidligere, men du skal ændre identifikatorerne, kan du gøre det sådan:

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

Hvis du bruger det alpine basisbillede, skal du installere skyggepakken:

RUN apk add —no-cache shadow

Sender bruger-id'et inde i containeren, når billedet bygges

Hvis dit id og id'erne for alle de personer, der arbejder på projektet, stemmer overens, skal du blot angive dette id i Dockerfilen. Men ofte stemmer bruger-id'erne ikke overens.

Hvordan man opnår det, man ønsker, er ikke umiddelbart klart. For mig var dette det sværeste i processen med at mestre Docker. Mange docker-brugere er ikke klar over, at der er forskellige stadier i et billedes liv. Først samles billedet ved hjælp af en Dockerfile. Når du kører en container fra et billede, bruges Dockerfilen ikke længere.

Brugeroprettelse skal ske, når billedet bygges. Det samme gælder for at bestemme den bruger, under hvem processer lanceres. Det betyder, at vi på en eller anden måde skal videregive UID (GID) inde i containeren.

Direktiver bruges til at bruge eksterne variabler i Dockerfilen ENV и ARG. Detaljeret sammenligning af direktiver her.

Dockerfil

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 som dette:

havnearbeider-skriveikonet

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

PS For at mestre alle forviklingerne ved Docker er det ikke nok at læse dokumentationen eller artiklerne. Du skal øve dig meget, du skal have en fornemmelse for Docker.

Kilde: www.habr.com

Tilføj en kommentar