, vores tekniske direktør, elsker at bruge og promovere Docker aktivt. I denne artikel forklarer han, hvordan man opretter brugere i Docker. Korrekt håndtering af dem, hvorfor brugere ikke bør have root-rettigheder, og hvordan man løser problemet med, at indikatorer ikke stemmer overens i Dockerfile.
Alle processer i containeren vil køre som root-bruger, medmindre det er angivet anderledes. Det virker meget praktisk, da denne bruger ikke har nogen begrænsninger. Derfor er det forkert at arbejde som root ud fra et sikkerhedsmæssigt synspunkt. Hvis ingen på din lokale computer opererer med root-rettigheder i deres rette sind, så kører mange stadig processer som root i containere.
Der er altid bugs, der lader ondsindede programmer undslippe fra containeren og komme ind på værtscomputeren. For at forudse det værste skal vi sikre os, at processerne indeni containeren køres af en bruger, der ikke har nogen rettigheder på værtsmaskinen.
Oprettelse af bruger
Oprettelse af en bruger i containeren er ikke anderledes end at oprette en i Linux-distributioner. Men for forskellige baserede billeder kan kommandoerne variere.
For distributioner baseret på debian i Dockerfile skal du tilføje:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home nodeFor alpine:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Kørsel af processer som bruger
For at køre alle efterfølgende processer som bruger med UID 2000, skal du køre:
USER 2000For at køre alle efterfølgende processer som bruger node, skal du køre:
USER nodeLæs mere i .
Montering af volumener
Når du monterer volumener ind i containeren, skal du sikre, at brugeren har mulighed for at læse og (eller) skrive filer. For dette skal UID (GID) for brugeren i containeren og brugeren uden for containeren, som har de relevante adgangsrettigheder til filen, være de samme. Brugernavne har ingen betydning i denne sammenhæng.
Ofte har en bruger på en Linux-computer UID og GID, der er lig med 1000. Disse identifikatorer tildeles den første bruger på computeren.
Det er nemt at finde dine identifikatorer:
idDu får omfattende information om din bruger.
Erstat 2000 fra eksemplerne med din egen identifikator, så er alt i orden.
Tildel UID og GID til brugeren
Hvis brugeren er oprettet tidligere, men det er nødvendigt at ændre identifikatorer, kan dette gøres sådan:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Hvis du bruger den grundlæggende alpine-billede, skal du installere pakken shadow:
RUN apk add —no-cache shadowOverførsel af bruger-ID ind i containeren ved bygning af billedet
Hvis dit ID og ID'erne for alle de personer, der arbejder på projektet, er ens, er det tilstrækkeligt at angive dette ID i Dockerfile. Men ofte stemmer bruger-ID'er ikke overens.
Hvordan man opnår det ønskede er ikke straks klart. For mig var dette det mest udfordrende i læringsprocessen om Docker. Mange Docker-brugere tænker ikke over, at der er forskellige livsfaser for billedet. Først bygges billedet, og til dette bruges Dockerfile. Når du starter en container fra billedet, bruges Dockerfile ikke længere.
Oprettelse af brugere skal finde sted under bygningen af billedet. Det samme gælder for definitionen af den bruger, som processerne køres under. Det betyder, at vi på en eller anden måde skal overføre UID (GID) ind i containeren.
Direktiverne bruges til at anvende eksterne variabler i Dockerfile og . Detaljeret sammenligning af direktiver .
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Du kan overføre argumenter gennem docker-compose på følgende måde:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
P.S. Det er ikke nok at læse dokumentation eller artikler for at mestre alle nuancer af Docker. Man skal øve sig meget, man skal føle Docker.
Kilde: habr.com
