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