Notandi í Docker

Andrey Kopylov, tæknistjóri okkar, elskar, notar virkan og kynnir Docker. Í nýrri grein útskýrir hann hvernig á að búa til notendur í Docker. Rétt vinna með þeim, hvers vegna notendur ættu ekki að vera skildir eftir með rótarréttindi og hvernig á að leysa vandamálið með misjafna vísbendingar í Dockerfile.

Ö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 í skjöl.

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 ENV и ARG. Ítarlegur samanburður á tilskipunum hér.

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

Bæta við athugasemd