Defnyddiwr yn Docker

Andrey Kopylov, ein CTO, wrth ei fodd, yn defnyddio ac yn hyrwyddo Docker yn weithredol. Mewn erthygl newydd, mae'n esbonio sut i greu defnyddwyr yn Docker. Gweithio'n gywir gyda nhw, pam na ddylai defnyddwyr gael eu gadael Γ’ hawliau gwraidd a sut i ddatrys problem dangosyddion anghymharol yn y Dockerfile.

Bydd yr holl brosesau yn y cynhwysydd yn rhedeg fel y defnyddiwr gwraidd, oni bai eich bod yn ei nodi mewn ffordd arbennig. Mae hyn yn ymddangos yn gyfleus iawn, oherwydd nid oes gan y defnyddiwr hwn unrhyw gyfyngiadau. Dyma pam mae gweithio fel gwraidd yn anghywir o safbwynt diogelwch. Os nad oes unrhyw un yn eu iawn bwyll yn gweithio ar y cyfrifiadur lleol gyda hawliau gwraidd, yna mae llawer yn rhedeg prosesau o dan wraidd mewn cynwysyddion.

Mae yna fygiau bob amser a fydd yn caniatΓ‘u i malware ddianc o'r cynhwysydd a mynd ar y cyfrifiadur gwesteiwr. Gan dybio y gwaethaf, rhaid inni sicrhau bod prosesau y tu mewn i'r cynhwysydd yn cael eu rhedeg gan ddefnyddiwr nad oes ganddo unrhyw hawliau ar y peiriant gwesteiwr.

Creu defnyddiwr

Nid yw creu defnyddiwr mewn cynhwysydd yn ddim gwahanol i'w greu mewn dosbarthiadau Linux. Fodd bynnag, gall y gorchmynion amrywio ar gyfer gwahanol ddelweddau sylfaen.

Ar gyfer dosbarthiadau sy'n seiliedig ar debian, mae angen ichi ychwanegu'r canlynol at y Dockerfile:

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

Ar gyfer alpaidd:

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

Prosesau rhedeg gan y defnyddiwr

I redeg yr holl brosesau dilynol fel defnyddiwr gyda UID 2000, rhedwch:

USER 2000

I redeg yr holl brosesau dilynol fel defnyddiwr y nod, rhedwch:

USER node

Mwy i mewn dogfennaeth.

Cyfrolau mowntio

Wrth osod cyfrolau y tu mewn i gynhwysydd, rhowch y gallu i'r defnyddiwr ddarllen a/neu ysgrifennu ffeiliau. I wneud hyn, rhaid i UID (GID) y defnyddiwr yn y cynhwysydd a'r defnyddiwr y tu allan i'r cynhwysydd sydd Γ’'r caniatΓ’d priodol i gael mynediad i'r ffeil gyfateb. Yn yr achos hwn, nid yw enwau defnyddwyr o bwys.

Yn aml ar gyfrifiadur Linux, mae UID defnyddiwr a GID yn hafal i 1000. Mae'r dynodwyr hyn yn cael eu neilltuo i ddefnyddiwr cyntaf y cyfrifiadur.

Mae dod o hyd i'ch dynodwyr yn hawdd:

id

Byddwch yn derbyn gwybodaeth gynhwysfawr am eich defnyddiwr.
Amnewid 2000 o'r enghreifftiau gyda'ch dynodwr a bydd popeth yn iawn.

Neilltuo UID a GID i ddefnyddiwr

Os cafodd y defnyddiwr ei greu o'r blaen, ond mae angen i chi newid y dynodwyr, gallwch chi ei wneud fel hyn:

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

Os ydych chi'n defnyddio'r ddelwedd sylfaen alpaidd, mae angen i chi osod y pecyn cysgodol:

RUN apk add β€”no-cache shadow

Pasio'r ID defnyddiwr y tu mewn i'r cynhwysydd wrth adeiladu'r ddelwedd

Os yw'ch ID ac IDau'r holl bobl sy'n gweithio ar y prosiect yn cyfateb, yna nodwch yr ID hwn yn y Dockerfile. Fodd bynnag, yn aml nid yw'r IDau defnyddiwr yn cyfateb.

Nid yw sut i gyflawni'r hyn yr ydych ei eisiau yn glir ar unwaith. I mi, dyma oedd y peth anoddaf yn y broses o feistroli Docker. Nid yw llawer o ddefnyddwyr docwyr yn sylweddoli bod yna wahanol gamau ym mywyd delwedd. Yn gyntaf, mae'r ddelwedd yn cael ei chydosod gan ddefnyddio Dockerfile. Wrth redeg cynhwysydd o ddelwedd, ni ddefnyddir y Dockerfile mwyach.

Rhaid creu defnyddiwr pan fydd y ddelwedd yn cael ei hadeiladu. Mae'r un peth yn berthnasol i benderfynu ar y defnyddiwr y caiff prosesau eu lansio oddi tanynt. Mae hyn yn golygu bod yn rhaid i ni rywsut basio'r UID (GID) y tu mewn i'r cynhwysydd.

Defnyddir cyfarwyddebau i ddefnyddio newidynnau allanol yn y Dockerfile ENV ΠΈ ARG. Cymhariaeth fanwl o gyfarwyddebau yma.

Dockerfile

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

Gallwch chi basio dadleuon trwy docker-compose fel hyn:

cyfansoddwr dociau

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

PS Er mwyn meistroli holl gymhlethdodau Docker, nid yw'n ddigon darllen y dogfennau na'r erthyglau. Mae angen i chi ymarfer llawer, mae angen i chi gael teimlad o Docker.

Ffynhonnell: hab.com

Ychwanegu sylw