Všetky procesy v kontajneri budú bežať ako užívateľ root, pokiaľ to nešpecifikujete špeciálnym spôsobom. Zdá sa to veľmi pohodlné, pretože tento používateľ nemá žiadne obmedzenia. To je dôvod, prečo je práca ako root z bezpečnostného hľadiska nesprávna. Ak nikto so zdravým rozumom nepracuje na lokálnom počítači s právami root, potom mnohí spúšťajú procesy pod rootom v kontajneroch.
Vždy sa vyskytnú chyby, ktoré umožnia malvéru uniknúť z kontajnera a dostať sa na hostiteľský počítač. Ak predpokladáme najhoršie, musíme zabezpečiť, aby procesy vo vnútri kontajnera spúšťal používateľ, ktorý nemá žiadne práva na hostiteľskom počítači.
Vytvorenie používateľa
Vytvorenie používateľa v kontajneri sa nelíši od jeho vytvorenia v distribúciách Linuxu. Príkazy sa však môžu líšiť pre rôzne základné obrázky.
Pre distribúcie založené na debiane musíte do súboru Dockerfile pridať nasledovné:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home node
Pre alpské:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Spustené procesy od používateľa
Ak chcete spustiť všetky nasledujúce procesy ako používateľ s UID 2000, spustite:
USER 2000
Ak chcete spustiť všetky nasledujúce procesy ako používateľ uzla, spustite:
USER node
Prečítajte si viac v
Montážne objemy
Pri pripájaní zväzkov do kontajnera poskytnite používateľovi možnosť čítať a/alebo zapisovať súbory. Na to sa musí zhodovať UID (GID) používateľa v kontajneri a používateľa mimo kontajnera, ktorý má príslušné povolenia na prístup k súboru. V tomto prípade na používateľských menách nezáleží.
Na počítači so systémom Linux sa UID a GID používateľa často rovná 1000 XNUMX. Tieto identifikátory sú priradené prvému používateľovi počítača.
Zistenie vašich identifikátorov je jednoduché:
id
Dostanete komplexné informácie o vašom používateľovi.
Nahraďte 2000 z príkladov svojim identifikátorom a všetko bude v poriadku.
Priradenie UID a GID používateľovi
Ak bol používateľ vytvorený skôr, ale potrebujete zmeniť identifikátory, môžete to urobiť takto:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Ak používate základný obrázok alpine, musíte nainštalovať balík tieňov:
RUN apk add —no-cache shadow
Odovzdanie ID používateľa do kontajnera pri vytváraní obrázka
Ak sa vaše ID a ID všetkých ľudí, ktorí pracujú na projekte, zhodujú, stačí zadať toto ID v súbore Dockerfile. Často sa však ID používateľov nezhodujú.
Ako dosiahnuť to, čo chcete, nie je hneď jasné. Pre mňa to bola najťažšia vec v procese zvládnutia Dockera. Mnoho používateľov dockerov si neuvedomuje, že v živote obrázka existujú rôzne fázy. Najprv sa obrázok zostaví pomocou súboru Dockerfile. Pri spustení kontajnera z obrázka sa súbor Dockerfile už nepoužíva.
Vytvorenie používateľa musí nastať pri vytváraní obrázka. To isté platí pre určenie používateľa, pod ktorým sa procesy spúšťajú. To znamená, že musíme nejakým spôsobom odovzdať UID (GID) vnútri kontajnera.
Direktívy sa používajú na použitie externých premenných v súbore Dockerfile
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Argumenty môžete odovzdať cez docker-compose takto:
prístavný robotník, komponovať
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS Na zvládnutie všetkých jemností Dockera nestačí čítať dokumentáciu alebo články. Musíte veľa cvičiť, musíte cítiť Dockera.
Zdroj: hab.com