Përdorues në Docker

Andrey Kopylov, CTO-ja jonë, e do, përdor në mënyrë aktive dhe promovon Docker. Në një artikull të ri, ai shpjegon se si të krijoni përdorues në Docker. Puna e saktë me ta, pse përdoruesit nuk duhet të lihen me të drejta rrënjësore dhe si të zgjidhin problemin e treguesve të mospërputhjes në Dockerfile.

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ë dokumentacionin.

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 ENV и ARG. Krahasimi i detajuar i 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

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

Shto një koment