, mūsu tehnisko direktoru, patīk aktīvi izmantot un popularizēt Docker. Jaunajā rakstā viņš stāsta, kā izveidot lietotājus Docker. Pareiza darbība ar tiem, kāpēc lietotājiem nevajadzētu atstāt ar root права un kā atrisināt nesakritību rādītājos Dockerfile.
Visi procesi konteinerā darbosies kā root lietotājs, ja to īpaši ne norādīs. Tas izskatās ļoti ērti, jo šim lietotājam nav nekādu ierobežojumu. Tāpēc strādāt kā root ir nepareizi no drošības viedokļa. Ja vietējā datorā neviens prātīgā prātā nedarbojas ar root tiesībām, daudzi uzsāk procesus kā root konteineros.
Vienmēr pastāv kļūdas, kas ļauj ļaunprātīgam programmatūrai izbēgt no konteinera un iekļūt hosta datorā. Pieņemot sliktāko, mums jānodrošina, ka procesi tiek uzsākti konteinerā no lietotāja, kam nav nekādu tiesību uz hosta mašīnu.
Lietotāja izveide
Lietotāja izveide konteinerā nav atšķirīga no tā izveides Linux izplatījumos. Tomēr, pamatojoties uz atšķirīgiem bāzes attēliem, komandas var atšķirties.
Debian balstītajām izplatījumām nepieciešams pievienot Dockerfile:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home nodeAlpine gadījumā:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Procesu uzsākšana no lietotāja
Lai uzsāktu visus nākamos procesus no lietotāja ar UID 2000, izpildiet:
USER 2000Lai uzsāktu visus nākamos procesus no lietotāja node, izpildiet:
USER nodeVairāk informācijas par .
Apjomu montāža
Montējot apjomu konteinerā, nodrošiniet lietotājam iespēju lasīt un (vai) rakstīt failus. Tam lietotāja UID (GID) konteinerā un ārpus konteinerā esošā lietotāja, kam ir attiecīgās piekļuve tiesības, jāatbilst. Lietotāju nosaukumi šajā gadījumā nav svarīgi.
Bieži Linux datorā lietotāja UID un GID ir vienādi 1000. Šie identifikatori tiek piešķirti pirmajam datoram lietotājam.
Uzzināt savus identifikatorus ir vienkārši:
idJūs iegūsiet visaptverošu informāciju par savu lietotāju.
Aizvietojiet 2000 piemēros ar savu identifikatoru, un viss būs kārtībā.
Lietotāja UID un GID piešķiršana
Ja lietotājs ir izveidots iepriekš, bet ir nepieciešams mainīt identifikatorus, to var izdarīt šādi:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Ja jūs izmantojat bāzes attēlu alpine, tad nepieciešams instalēt pakotni shadow:
RUN apk add —no-cache shadowLietotāja identifikatora nodošana konteinerā attēla būvēšanas laikā
Ja jūsu identifikators un visu cilvēku identifikatori, kas strādā pie projekta, sakrīt, tad pietiek norādīt šo identifikatoru Dockerfile. Tomēr bieži vien lietotāju identifikatori nesakrīt.
Kā to paveikt nav uzreiz skaidrs. Man tas bija visgrūtākais apgūstot docker. Daudzi docker lietotāji nedomā par to, ka pastāv dažādas attēla dzīves posma. Sākumā attēls tiek veidots, izmantojot Dockerfile. Iedarbinot konteineru no attēla, Dockerfile vairs netiek izmantots.
Lietotāju veidošana jāveic attēla būvēšanas laikā. Tas attiecas arī uz lietotāja noteikšanu, no kura tiek izpildīti procesi. Tādējādi mums kādā veidā jānodod UID (GID) konteinerā.
Lai izmantotu ārējās mainīgās Dockerfile, tiek izmantotas direktīvas un . Detalizēta direktīvu salīdzināšana .
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Argumentus caur docker-compose var nodot šādi:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
P.S. Lai apgūtu visas docker nianses, nepietiek ar dokumentācijas vai rakstu lasīšanu. Ir nepieciešama daudz praktizēšanās, jāizjūt docker.
Avots: habr.com
