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
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
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