, 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 nodePë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 2000Për të ekzekutuar të gjitha proceset e mëpasshme nga përdoruesi node, ekzekutoni:
USER nodeMë shumë në .
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ë:
idDo 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 shadowKalimi 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 dhe . Krahasim të detajuar të direktivave .
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
