, drejtori ynë teknik, e do, e përdor aktivisht dhe e promovon Docker. Në artikelin e tij të ri, ai tregon se si të krijoni përdorues në Docker. Përdorimi i duhur me ta, pse nuk duhet lënë përdoruesit me privilegje root dhe si të zgjidhet problemi i mos përputhjes së indikatorëve në Dockerfile.
Të gjitha proceset në konteiner do të funksionojnë nën përdoruesin root, nëse nuk e specifikoni ndryshe. Kjo duket shumë praktike, pasi ky përdorues nuk ka asnjë kufizim. Pikërisht për këtë, të punosh nën root është e gabuar nga një pikëpamje të sigurisë. Nëse askush në kompjuterin lokal nuk punon me privilegje root, shumë njerëz fillojnë procese nën root në konteiner.
Gjatë gjithmonë ka ndonjë defekt që lejon një malware të dalë nga konteineri dhe të hyjë në kompjuterin host. Duke supozuar më të keqen, ne duhet të sigurojmë që proceset të fillojnë brenda konteinerit nën një përdorues që nuk ka asnjë të drejtë në makinën host.
Krijimi i përdoruesit
Krijimi i përdoruesve në konteiner nuk ndryshon nga krijimi i tij në distribucione Linux. Megjithatë, për imazhe të ndryshme bazë, komanda mund të ndryshojë.
Për distribucionet e bazuara në debian në Dockerfile është e nevojshme të shtoni:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home nodePër alpine:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Ekzekutimi i proceseve nën përdoruesin
Për të ekzekutuar të gjitha proceset e mëpasshme nën përdoruesin me UID 2000, kryeni:
USER 2000Për të ekzekutuar të gjitha proceset e mëpasshme nën përdoruesin node, kryeni:
USER nodeMë shumë rreth .
Montimi i volumeve
Kur montoni volume brenda konteinerit, sigurohuni që përdoruesi të ketë leje për të lexuar dhe (ose) shkruar skedarët. Për këtë, UID (GID) i përdoruesit në konteiner dhe i përdoruesit jashtë konteinerit, 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 identifikues i jepen përdoruesit të parë të kompjuterit.
Të dini identifikuesit tuaj është e thjeshtë:
idDo të merrni informacionin e plotë rreth përdoruesit tuaj.
Zëvendësoni 2000 në shembuj me identifikuesin tuaj dhe gjithçka do të jetë në rregull.
Për asignimin e UID dhe GID të përdoruesit
Nëse përdoruesi është krijuar më parë, por është e nevojshme të ndryshohen identifikuesit, atëherë mund ta bëni këtë në këtë mënyrë:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Nëse përdorni imazhin bazë alpine, duhet të instaloni paketin shadow:
RUN apk add âno-cache shadowKoncesioni i identifikuesit tĂ« pĂ«rdoruesit brenda kontejnerit gjatĂ« ndĂ«rtimit tĂ« imazhit
Nëse identifikuesi juaj dhe identifikuesit e të gjithëve që punojnë në projekt përputhen, mjafton të tregoni këtë identifikator në Dockerfile. Megjithatë, shpesh identifikuesit e përdoruesve nuk përputhen.
Si ta realizoni këtë nuk është menjëherë e qartë. Për mua kjo ishte e vetmja gjë e vështirë gjatë procesit të mësimit të docker. Shumë përdorues të docker nuk mendojnë për faktin se ka etapa të ndryshme të jetës së imazhit. Fillimisht, imazhi ndërtohet, për këtë përdoren Dockerfile. Gjatë nisjes së një kontejneri nga imazhi, Dockerfile nuk përdoret më.
Krijimi i përdoruesve duhet të ndodhë gjatë ndërtimit të imazhit. Kjo vlen gjithashtu për përcaktimin e përdoruesit nga i cili fillojnë proceset. Kështu, ne në një farë mënyre duhet të kalojmë brenda kontejnerit UID (GID).
Për përdorimin e variablave të jashtme në Dockerfile shërbejnë direktivat dhe . Krahasimi i detajuar i direktivave .
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Të kaloni argumentet përmes docker-compose mund ta bëni kështu:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
P.S. Për të mësuar të gjitha misteret e docker, nuk mjafton të lexoni dokumentacionin ose artikujt. Duhet të praktikoni shumë, duhet ta ndjeni docker.
Burimi: habr.com
