Gebruiker in Docker

Andrey Kopylov, ons CTO, is lief vir, gebruik en bevorder Docker aktief. In 'n nuwe artikel verduidelik hy hoe om gebruikers in Docker te skep. Korrekte werk met hulle, waarom gebruikers nie met wortelregte gelaat moet word nie en hoe om die probleem van nie-ooreenstemmende aanwysers in die Dockerfile op te los.

Alle prosesse in die houer sal as die wortelgebruiker loop, tensy jy dit op 'n spesiale manier spesifiseer. Dit lyk baie gerieflik, want hierdie gebruiker het geen beperkings nie. Dit is hoekom dit verkeerd is om as root te werk vanuit 'n sekuriteitsoogpunt. As niemand by sy volle verstand op die plaaslike rekenaar met wortelregte werk nie, loop baie prosesse onder wortel in houers.

Daar is altyd foute wat wanware sal toelaat om uit die houer te ontsnap en op die gasheerrekenaar te kom. As ons die ergste aanvaar, moet ons verseker dat prosesse binne die houer uitgevoer word deur 'n gebruiker wat geen regte op die gasheermasjien het nie.

Gebruikerskepping

Die skep van 'n gebruiker in 'n houer is nie anders as om dit in Linux-verspreidings te skep nie. Die opdragte kan egter verskil vir verskillende basisbeelde.

Vir debian-gebaseerde verspreidings, moet u die volgende by die Dockerfile voeg:

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

Vir alpiene:

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

Lopende prosesse vanaf die gebruiker

Om alle daaropvolgende prosesse as 'n gebruiker met UID 2000 uit te voer, hardloop:

USER 2000

Om alle daaropvolgende prosesse as die nodusgebruiker uit te voer, hardloop:

USER node

Meer in dokumentasie.

Monteer volumes

Wanneer volumes binne 'n houer gemonteer word, verskaf die gebruiker die vermoë om lêers te lees en/of te skryf. Om dit te doen, moet die UID (GID) van die gebruiker in die houer en die gebruiker buite die houer wat die toepaslike toestemmings het om toegang tot die lêer te verkry, ooreenstem. In hierdie geval maak gebruikersname nie saak nie.

Dikwels op 'n Linux-rekenaar is 'n gebruiker se UID en GID gelyk aan 1000. Hierdie identifiseerders word aan die eerste gebruiker van die rekenaar toegeken.

Dit is maklik om jou identifiseerders uit te vind:

id

Jy sal omvattende inligting oor jou gebruiker ontvang.
Vervang 2000 uit die voorbeelde met jou identifiseerder en alles sal reg wees.

Toewysing van 'n UID en GID aan 'n gebruiker

As die gebruiker voorheen geskep is, maar jy moet die identifiseerders verander, kan jy dit so doen:

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

As jy die alpiene basisbeeld gebruik, moet jy die skadupakket installeer:

RUN apk add —no-cache shadow

Deur die gebruiker-ID binne die houer deur te gee wanneer die prent gebou word

As jou ID en die ID's van al die mense wat aan die projek werk ooreenstem, spesifiseer dan net hierdie ID in die Dockerfile. Die gebruiker-ID's stem egter dikwels nie ooreen nie.

Hoe om te bereik wat jy wil, is nie dadelik duidelik nie. Vir my was dit die moeilikste ding in die proses om Docker te bemeester. Baie docker-gebruikers besef nie dat daar verskillende stadiums in die lewe van 'n beeld is nie. Eerstens word die prent saamgestel met behulp van 'n Dockerfile. Wanneer 'n houer vanaf 'n prent uitgevoer word, word die Dockerfile nie meer gebruik nie.

Gebruikerskepping moet plaasvind wanneer die prent gebou word. Dieselfde geld vir die bepaling van die gebruiker onder wie prosesse van stapel gestuur word. Dit beteken dat ons op een of ander manier die UID (GID) binne die houer moet deurgee.

Riglyne word gebruik om eksterne veranderlikes in die Dockerfile te gebruik ENV и ARG. Gedetailleerde vergelyking van voorskrifte hier.

dockerfile

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

U kan argumente via docker-compose soos volg deurgee:

Docker-komponeer

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

NS Om al die ingewikkeldhede van Docker te bemeester, is dit nie genoeg om die dokumentasie of artikels te lees nie. Jy moet baie oefen, jy moet 'n gevoel vir Docker kry.

Bron: will.com

Voeg 'n opmerking