Të gjitha proceset në kontejner do të ekzekutohen si përdorues rrënjë, përveç nëse e specifikoni atë në një mënyrë të veçantë. Kjo duket shumë e përshtatshme, sepse ky përdorues nuk ka kufizime. Kjo është arsyeja pse puna si root është e gabuar nga pikëpamja e sigurisë. Nëse askush në mendjen e tij të drejtë nuk punon në kompjuterin lokal me të drejta rrënjësore, atëherë shumë procese ekzekutojnë nën rrënjë në kontejnerë.
Gjithmonë ka gabime që do të lejojnë që malware të largohen nga kontejneri dhe të futen në kompjuterin pritës. Duke supozuar më të keqen, duhet të sigurohemi që proceset brenda kontejnerit të drejtohen nga një përdorues që nuk ka asnjë të drejtë në makinën pritës.
Krijimi i një përdoruesi
Krijimi i një përdoruesi në një kontejner nuk është i ndryshëm nga krijimi i tij në shpërndarjet Linux. Megjithatë, komandat mund të ndryshojnë për imazhe të ndryshme bazë.
Për shpërndarjet e bazuara në debian, duhet të shtoni sa vijon në Dockerfile:
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
Drejtimi i proceseve nga përdoruesi
Për të ekzekutuar të gjitha proceset pasuese si përdorues me UID 2000, ekzekutoni:
USER 2000
Për të ekzekutuar të gjitha proceset pasuese si përdorues i nyjes, ekzekutoni:
USER node
Më shumë në
Vëllimet e montimit
Kur montoni vëllime brenda një kontejneri, jepni përdoruesit mundësinë për të lexuar dhe/ose shkruar skedarë. Për ta bërë këtë, UID (GID) e përdoruesit në kontejner dhe përdoruesi jashtë kontejnerit që ka lejet e duhura për të hyrë në skedar duhet të përputhet. Në këtë rast, emrat e përdoruesve nuk kanë rëndësi.
Shpesh në një kompjuter Linux, UID dhe GID e një përdoruesi janë të barabarta me 1000. Këta identifikues i caktohen përdoruesit të parë të kompjuterit.
Gjetja e identifikuesve tuaj është e lehtë:
id
Ju do të merrni informacion të plotë rreth përdoruesit tuaj.
Zëvendësoni 2000 nga shembujt me identifikuesin tuaj dhe gjithçka do të jetë mirë.
Caktimi i një UID dhe GID për një përdorues
Nëse përdoruesi është krijuar më parë, por ju duhet të ndryshoni identifikuesit, mund ta bëni kështu:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Nëse jeni duke përdorur imazhin bazë alpine, duhet të instaloni paketën hije:
RUN apk add —no-cache shadow
Kalimi i ID-së së përdoruesit brenda kontejnerit gjatë ndërtimit të imazhit
Nëse ID-ja juaj dhe ID-të e të gjithë njerëzve që punojnë në projekt përputhen, atëherë thjesht specifikoni këtë ID në Dockerfile. Megjithatë, shpesh ID-të e përdoruesve nuk përputhen.
Si të arrini atë që dëshironi nuk është menjëherë e qartë. Për mua, kjo ishte gjëja më e vështirë në procesin e zotërimit të Docker. Shumë përdorues docker nuk e kuptojnë se ka faza të ndryshme në jetën e një imazhi. Së pari, imazhi është mbledhur duke përdorur një Dockerfile. Kur ekzekutoni një kontejner nga një imazh, Dockerfile nuk përdoret më.
Krijimi i përdoruesit duhet të ndodhë kur imazhi është ndërtuar. E njëjta gjë vlen edhe për përcaktimin e përdoruesit nën të cilin nisen proceset. Kjo do të thotë që ne duhet të kalojmë disi UID (GID) brenda kontejnerit.
Direktivat përdoren për të përdorur variabla të jashtëm në Dockerfile
dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Ju mund të kaloni argumente përmes docker-compose si kjo:
Docker-Shkruaj
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS Për të zotëruar të gjitha ndërlikimet e Docker, nuk mjafton të lexoni dokumentacionin ose artikujt. Duhet të praktikosh shumë, duhet të ndjesh Docker.
Burimi: www.habr.com