Bikarhêner li Docker

Andrey Kopylov, CTO-ya me, ji Docker hez dike, bi awayekî çalak bikar tîne û pêşve dike. Di gotarek nû de, ew rave dike ka meriv çawa bikarhêneran li Docker biafirîne. Karê rast bi wan re, çima pêdivî ye ku bikarhêner bi mafên root re nemînin û meriv çawa di Dockerfile de pirsgirêka nîşangirên nelihevkirî çareser dike.

Hemî pêvajoyên di konteynerê de dê wekî bikarhênerê root bimeşin, heya ku hûn wê bi rengek taybetî diyar nekin. Ev pir hêsan xuya dike, ji ber ku ev bikarhêner ti sînordar nîne. Ji ber vê yekê xebata wekî root ji hêla ewlehiyê ve xelet e. Ger kesek bi hişê xwe yê rast li ser komputera herêmî bi mafên root nexebite, wê hingê gelek pêvajoyên di bin root de di konteyneran de dimeşînin.

Her gav xeletî hene ku dê destûrê bidin malware ku ji konteynerê birevin û têkevin ser komputera mêvandar. Ya herî xirab texmîn bikin, divê em pê ewle bin ku pêvajoyên di hundurê konteynerê de ji hêla bikarhênerek ku li ser makîneya mêvandar ne xwediyê ti mafan e ve têne rêve kirin.

Afirandina bikarhênerek

Afirandina bikarhênerek di konteynerê de ji afirandina wê di belavokên Linux de ne cûda ye. Lêbelê, dibe ku ferman ji bo wêneyên bingehîn ên cûda cûda bibin.

Ji bo belavkirinên debian-based, hûn hewce ne ku jêrîn li Dockerfile zêde bikin:

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

Ji bo alpine:

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

Pêvajoyên ji bikarhêner dimeşîne

Ji bo ku hûn hemî pêvajoyên paşîn wekî bikarhênerek bi UID 2000 bimeşînin, bixebitin:

USER 2000

Ji bo ku hemî pêvajoyên paşîn wekî bikarhênerê nodê bimeşînin, bimeşînin:

USER node

Zêdetir di belgekirin.

cildên Mounting

Dema ku cildên li hundurê konteynirê datînin, ji bikarhêner re şiyana xwendin û/an nivîsandina pelan peyda bikin. Ji bo kirina vê yekê, UID (GID) ya bikarhênerê di konteynerê de û bikarhênerê li derveyî konteynerê ku xwediyê destûrên guncan e ku bigihîje pelê divê li hev bikin. Di vê rewşê de, navên bikarhêner ne girîng in.

Pir caran li ser komputerek Linux, UID û GID-ya bikarhênerek 1000 e. Ev nasname ji bikarhênerê yekem ê komputerê re têne destnîşan kirin.

Dîtina nasnameyên xwe hêsan e:

id

Hûn ê di derheqê bikarhênerê xwe de agahdariya berfireh bistînin.
2000 ji mînakên bi nasnameya xwe veguherînin û her tişt dê baş be.

Ji bikarhênerek re UID û GID veqetandin

Ger bikarhêner berê hatî afirandin, lê hûn hewce ne ku nasnameyan biguherînin, hûn dikarin bi vî rengî bikin:

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

Heke hûn wêneya bingehîn a alpine bikar tînin, hûn hewce ne ku pakêta siyê saz bikin:

RUN apk add —no-cache shadow

Dema çêkirina wêneyê nasnameya bikarhêner di hundurê konteynerê de derbas dibe

Ger nasnameya we û nasnameyên hemî kesên ku li ser projeyê dixebitin li hev bikin, wê hingê tenê vê nasnameyê di Dockerfile de diyar bikin. Lêbelê, pir caran nasnameyên bikarhêner li hev nakin.

Meriv çawa bigihîje tiştê ku hûn dixwazin tavilê ne diyar e. Ji bo min, ev di pêvajoya masterkirina Docker de tiştê herî dijwar bû. Gelek bikarhênerên docker nizanin ku di jiyana wêneyê de qonaxên cûda hene. Pêşîn, wêne bi karanîna Dockerfile tête kom kirin. Dema ku konteynerek ji wêneyek dimeşîne, Dockerfile êdî nayê bikar anîn.

Dema ku wêne were çêkirin divê afirandina bikarhêner çêbibe. Heman tişt ji bo destnîşankirina bikarhênerê ku pêvajo di bin wî de têne destpêkirin jî derbas dibe. Ev tê vê wateyê ku divê em bi rengek UID (GID) di hundurê konteynerê de derbas bikin.

Rêbernameyên ji bo karanîna guhêrbarên derveyî di Dockerfile de têne bikar anîn ENV и ARG. Berhevdana berfireh a rêwerzan vir.

dockerfile

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

Hûn dikarin argumanan bi docker-compose bi vî rengî derbas bikin:

docker-berhevkirin

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

PS Ji bo serweriya hemî tevliheviyên Docker, xwendina belge an gotaran ne bes e. Pêdivî ye ku hûn pir pratîk bikin, hûn hewce ne ku ji bo Docker hestek bistînin.

Source: www.habr.com

Add a comment