Përdorues në Docker

Andi Kopilov, drejtori ynë teknik, e do, e përdor aktivisht dhe e promovon Docker. Në artikullin e ri ai tregon se si të krijohen përdorues në Docker. Puna e saktë me ta, pse përdoruesit nuk duhet të lihen me të drejta root dhe si të zgjidhet problemi i mospërputhjes së treguesve në Dockerfile.

Të gjitha proceset në kontejner do të punojnë si përdorues root, nëse nuk e specifikoni atë në mënyrë speciale. Kjo duket shumë e përshtatshme, pasi ky përdorues nuk ka asnjë kufizim. Prandaj, të punosh si root është gabim nga pikëpamja e sigurisë. Nëse askush në komputerin lokal nuk punon me të drejtat root, shumë njerëz ekzekutojnë procese nën root në kontejnerë.

Gjithmonë ka bugs që lejojnë një malware të dalë nga kontejneri dhe të hyjë në kompjuterin e hostit. Duke supozuar më të keqen, ne duhet të sigurojmë që proceset brenda kontejnerit të ekzekutohen nga një përdorues që nuk ka asnjë të drejtë në makinën e hostit.

Krijimi i përdoruesit

Krijimi i përdoruesit në një kontejner nuk ndryshon nga krijimi i tij në shpërndarjet Linux. Megjithatë, për imazhe të ndryshme bazë, komandat mund të ndryshojnë.

Për shpërndarjet e bazuara në debian, në Dockerfile duhet të shtoni:

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

Për alpine:

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

Ekzekutimi i proceseve nga përdoruesi

Për të ekzekutuar të gjitha proceset e mëpasshme nga përdoruesi me UID 2000, ekzekutoni:

USER 2000

Për të ekzekutuar të gjitha proceset e mëpasshme nga përdoruesi node, ekzekutoni:

USER node

Më shumë në dokumentacion.

Montimi i volumëve

Kur montoni volumet brenda kontejnerit, sigurohuni që përdoruesit t'i jepet mundësia të lexoj dhe (ose) të shkruaj në skedarët. Për këtë, UID (GID) i përdoruesit në kontejner dhe i përdoruesit jashtë kontejnerit, i cili ka të drejta përkatëse për qasje në skedar, duhet të përputhen. Emrat e përdoruesve nuk kanë rëndësi.

Shpesh, në një kompjuter Linux, UID dhe GID i përdoruesit janë të barabarta me 1000. Këto identifikuesi i jepet përdoruesit të parë të kompjuterit.

Të dish identifikuesit e tu është e lehtë:

id

Do të keni informacion të plotë rreth përdoruesit tuaj.
Zëvendësoni 2000 nga shembujt me ID-në tuaj dhe gjithçka do të jetë në rregull.

Caktimi i UID dhe GID për përdoruesin

Nëse përdoruesi është krijuar më parë, por ju nevojitet të ndryshoni identifikuesit, mund ta bëni kështu:

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

Nëse përdorni imazhin bazë alpine, duhet të instaloni paketën shadow:

RUN apk add --no-cache shadow

Kalimi i identifikuesit të përdoruesit brenda kontejnerit gjatë ndërtimit të imazhit

Nëse identifikuesi juaj dhe identifikuesit e të gjithë personave që punojnë në projekt përputhen, mjafton të tregoni këtë identifikues në Dockerfile. Megjithatë, shpesh identifikuesit e përdoruesve nuk përputhen.

Si të realizoni atë që dëshironi nuk është menjëherë e qartë. Për mua, kjo ishte më e vështira në procesin e mësimit të docker. Shumë përdorues të docker nuk mendojnë për faktin se ka faza të ndryshme të jetës së imazhit. Fillimisht, imazhi ndërtohet dhe për këtë përdoren Dockerfile. Kur konteineri ndizet nga imazhi, Dockerfile nuk përdoret më.

Krijimi i përdoruesve duhet të ndodhi gjatë ndërtimit të imazhit. Kjo vlen gjithashtu për përcaktimin e përdoruesit, nga i cili nisin proceset. Kështu që, ne në një farë mënyre duhet të kalojmë brenda kontenierit UID (GID).

Për të përdorur variablat e jashtëm në Dockerfile shërbejnë direktivat ENV dhe ARG. Krahasim të detajuar të direktivave këtu.

Dockerfile

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

Të kalojmë argumentet përmes docker-compose mund të bëhet kështu:

docker-compose

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

P.S. Për të zotëruar të gjitha mjeshtërinë e docker-it, nuk mjafton të lexosh dokumentacionin ose artikujt. Duhet të praktikosh shumë, duhet të ndjesh docker-in.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster