, náš technický riaditeľ, má rád, aktívne používa a propaguje Docker. V novom článku hovorí, ako vytvoriť používateľov v Dockeri. Správna práca s nimi, prečo by používateľov nemali nechať s právami root a ako vyriešiť problém s nesúladom indikátorov v Dockerfile.
Všetky procesy v kontejnere budú pracovať pod používateľom root, pokiaľ ho špeciálne neuviediete. Zdá sa to veľmi pohodlné, keďže tento používateľ nemá žiadne obmedzenia. Práca pod rootom nie je správna z pohľadu bezpečnosti. Ak na miestnom počítači nikto v zdravej mysli nepracuje s rootovými právami, mnohí spúšťajú procesy pod rootom v kontejnere.
Vždy existujú chyby, ktoré umožnia škodlivému softvéru dostať sa z kontajnera na hostiteľský počítač. Predpokladajúc to najhoršie, musíme zabezpečiť spustenie procesov vo vnútri kontajnera od používateľa, ktorý nemá žiadne práva na hostiteľskom stroji.
Vytvorenie používateľa
Vytvorenie používateľa v kontejnere sa nelíši od jeho vytvorenia v linuxových distribúciách. Pre rôzne základné obrazy sa však príkazy môžu líšiť.
Pre distribúcie založené na debiane je v Dockerfile potrebné pridať:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home nodePre alpine:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Spustenie procesov od používateľa
Na spustenie všetkých nasledujúcich procesov od používateľa s UID 2000 vykonajte:
USER 2000Na spustenie všetkých nasledujúcich procesov od používateľa node vykonajte:
USER nodePodrobnejšie v .
Zdieľanie objemov
Pri zdieľaní objemov do kontajnera zabezpečte, aby mal používateľ možnosť čítať a (alebo) písať súbory. Na to musia UID (GID) používateľa v kontejnere a používateľa mimo kontajnera, ktorý má príslušné práva na prístup k súboru, zodpovedať. Pri tom nezáleží na menách používateľov.
Často na linuxovom počítači má používateľ UID a GID rovné 1000. Tieto identifikátory sa prideľujú prvému používateľovi počítača.
Zistiť svoje identifikátory je jednoduché:
idZískate vyčerpávajúce informácie o svojom používateľovi.
Nahradte 2000 v príkladoch svojím identifikátorom a všetko bude v poriadku.
Priradenie UID a GID používateľa
Ak bol používateľ vytvorený skôr, ale je potrebné zmeniť identifikátory, môžete to urobiť takto:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Ak používate základný obraz alpine, je potrebné nainštalovať balík shadow:
RUN apk add --no-cache shadowPrenos identifikátora používateľa do kontajnera pri vytváraní obrazu
Ak sa váš identifikátor a identifikátory všetkých, ktorí pracujú na projekte, zhodujú, stačí uviesť tento identifikátor v Dockerfile. Avšak často sa identifikátory používateľov nezhodujú.
Ako dosiahnuť to, čo chcete, nie je hneď jasné. Pre mňa to bolo najťažšie v procese osvojovania dockeru. Mnohí používatelia dockera neuvažujú o tom, že existujú rôzne fázy života obrazu. Najprv sa obraz zostavuje na to sa používa Dockerfile. Pri spustení kontajnera z obrazu sa Dockerfile už nepoužíva.
Vytváranie používateľov by sa malo diať pri zostavovaní obrazu. To isté platí aj pre určenie používateľa, pod ktorým sa spúšťajú procesy. To znamená, že nejakým spôsobom musíme preniesť do kontajnera UID (GID).
Na používanie externých premenných v Dockerfile slúžia direktívy a . Podrobné porovnanie direktív .
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Preniesť argumenty cez docker-compose môžete takto:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
P.S. Na osvojenie všetkých tajomstiev dockera nestačí čítať dokumentáciu alebo články. Je potrebné veľa praktikovať, treba cítiť docker.
Zdroj: habr.com
