Öll ferli í ílátinu munu keyra sem rótnotandi, nema þú tilgreinir það á sérstakan hátt. Þetta virðist mjög þægilegt, vegna þess að þessi notandi hefur engar takmarkanir. Þess vegna er rangt að vinna sem rót frá öryggissjónarmiði. Ef enginn með réttu viti vinnur á staðbundinni tölvu með rótarréttindi, þá keyra margir ferla undir rót í gámum.
Það eru alltaf villur sem gera spilliforritum kleift að sleppa úr ílátinu og komast inn á hýsingartölvuna. Miðað við það versta verðum við að tryggja að ferlar inni í gámnum séu keyrðir af notanda sem hefur engin réttindi á hýsingarvélinni.
Að búa til notanda
Að búa til notanda í gám er ekkert frábrugðið því að búa til hann í Linux dreifingum. Hins vegar geta skipanirnar verið mismunandi fyrir mismunandi grunnmyndir.
Fyrir debian-undirstaða dreifingu þarftu að bæta eftirfarandi við Dockerfile:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home node
Fyrir alpa:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Að keyra ferla frá notandanum
Til að keyra öll síðari ferla sem notandi með UID 2000 skaltu keyra:
USER 2000
Til að keyra öll síðari ferla sem hnút notanda skaltu keyra:
USER node
Meira í
Festingarrúmmál
Þegar bindi er sett upp í ílát, gefðu notandanum möguleika á að lesa og/eða skrifa skrár. Til að gera þetta verður UID (GID) notandans í ílátinu og notandans utan ílátsins sem hefur viðeigandi heimildir til að fá aðgang að skránni að passa saman. Í þessu tilviki skipta notendanöfn ekki máli.
Oft á Linux tölvu eru UID og GID notanda jöfn 1000. Þessum auðkennum er úthlutað fyrsta notanda tölvunnar.
Auðvelt er að finna auðkennin þín:
id
Þú færð ítarlegar upplýsingar um notandann þinn.
Skiptu um 2000 úr dæmunum fyrir auðkennið þitt og allt verður í lagi.
Úthluta UID og GID til notanda
Ef notandinn var búinn til áður en þú þarft að breyta auðkennum geturðu gert það svona:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Ef þú ert að nota alpagrunnmyndina þarftu að setja upp skuggapakkann:
RUN apk add —no-cache shadow
Að senda notandaauðkenni inni í gámnum þegar myndin er byggð
Ef auðkenni þitt og auðkenni allra þeirra sem vinna að verkefninu passa saman, þá skaltu bara tilgreina þetta auðkenni í Dockerfile. Hins vegar passa oft notendaauðkennin ekki saman.
Hvernig á að ná því sem þú vilt er ekki strax ljóst. Fyrir mig var þetta það erfiðasta í ferlinu við að ná tökum á Docker. Margir hafnarnotendur gera sér ekki grein fyrir því að það eru mismunandi stig í lífi myndar. Í fyrsta lagi er myndin sett saman með Dockerfile. Þegar gámur er keyrður úr mynd er Dockerfile ekki lengur notað.
Notendasköpun verður að eiga sér stað þegar myndin er byggð. Sama á við um að ákvarða notandann sem ferlar eru settir af stað undir. Þetta þýðir að við verðum einhvern veginn að senda UID (GID) inni í gámnum.
Tilskipanir eru notaðar til að nota ytri breytur í Dockerfile
Dockerfil
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Þú getur sent rök í gegnum docker-compose svona:
skipuleggjari
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS Til að ná tökum á öllum flækjum Docker er ekki nóg að lesa skjölin eða greinarnar. Þú þarft að æfa þig mikið, þú þarft að finna fyrir Docker.
Heimild: www.habr.com