Lietotājs Docker vide.

Andrej Kopilov, 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 node

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

Lai uzsāktu visus nākamos procesus no lietotāja node, izpildiet:

USER node

Vairāk informācijas par dokumentācijā.

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:

id

Jū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 shadow

Lietotā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 ENV un ARG. Detalizēta direktīvu salīdzināšana šeit.

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

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster