Používateľ v Dockeri

Andrej Kopylov, náš technický riaditeľ, miluje, aktívne používa a propaguje Docker. V novom článku vysvetľuje, ako vytvárať používateľov v Dockeri. Správna práca s nimi, prečo by používateľom nemali zostať práva root a ako vyriešiť problém nesúladu indikátorov v súbore Dockerfile.

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 dokumentáciu.

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 ENV и Arg.. Podrobné porovnanie smerníc tu.

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

Pridať komentár