Felhasználó a Dockerben

Andrej Kopilov, műszaki igazgatónk, szereti, aktívan használja és népszerűsíti a Dockert. Egy új cikkben elmagyarázza, hogyan hozhat létre felhasználókat a Dockerben. Helyes munka velük, miért nem szabad a felhasználóknak root jogokat hagyni, és hogyan lehet megoldani a Dockerfile-ban található nem egyező indikátorok problémáját.

A tárolóban lévő összes folyamat root felhasználóként fog futni, hacsak nem adja meg speciális módon. Ez nagyon kényelmesnek tűnik, mert ennek a felhasználónak nincsenek korlátozásai. Ez az oka annak, hogy a root-ként való munkavégzés biztonsági szempontból helytelen. Ha józan észnél senki sem dolgozik a helyi számítógépen root jogokkal, akkor sok folyamat fut root alatt tárolókban.

Mindig vannak olyan hibák, amelyek lehetővé teszik, hogy a rosszindulatú programok kiszabaduljanak a tárolóból, és bejussanak a gazdagépre. A legrosszabbat feltételezve gondoskodnunk kell arról, hogy a tárolón belüli folyamatokat olyan felhasználó futtassa, akinek nincs semmilyen joga a gazdagépen.

Felhasználó létrehozása

A felhasználó létrehozása tárolóban nem különbözik a Linux disztribúciókban való létrehozásától. A parancsok azonban eltérőek lehetnek a különböző alapképeknél.

Debian-alapú disztribúciók esetén a következőket kell hozzáadnia a Dockerfile-hoz:

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

alpesihez:

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

Folyamatok futtatása a felhasználótól

Az összes további folyamat 2000-es UID-vel rendelkező felhasználóként történő futtatásához futtassa:

USER 2000

Az összes további folyamat csomópont-felhasználóként való futtatásához futtassa:

USER node

In dokumentáció.

Szerelési térfogatok

Ha köteteket tárolóba szerel fel, biztosítsa a felhasználó számára a fájlok olvasásának és/vagy írásának lehetőségét. Ehhez a tárolóban lévő felhasználó és a tárolón kívüli felhasználó UID-jének (GID) meg kell egyeznie, aki rendelkezik a megfelelő engedélyekkel a fájl eléréséhez. Ebben az esetben a felhasználónevek nem számítanak.

Linuxos számítógépeken gyakran a felhasználó UID és GID értéke 1000. Ezek az azonosítók a számítógép első felhasználójához vannak hozzárendelve.

Az azonosítók megtalálása egyszerű:

id

Teljes körű tájékoztatást kap a felhasználójáról.
Cserélje ki a példákból a 2000-et az azonosítójával, és minden rendben lesz.

UID és GID hozzárendelése egy felhasználóhoz

Ha a felhasználót korábban hozták létre, de módosítani kell az azonosítókat, akkor ezt a következőképpen teheti meg:

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

Ha az alpesi alapképet használja, telepítenie kell az árnyékcsomagot:

RUN apk add —no-cache shadow

A felhasználói azonosító átadása a tárolóban a kép készítésekor

Ha az Ön azonosítója és a projekten dolgozó összes személy azonosítója megegyezik, akkor egyszerűen adja meg ezt az azonosítót a Dockerfile-ban. A felhasználói azonosítók azonban gyakran nem egyeznek.

Nem azonnal világos, hogyan érd el, amit akarsz. Számomra ez volt a legnehezebb a Docker elsajátítása során. Sok docker-felhasználó nem veszi észre, hogy egy kép életének különböző szakaszai vannak. Először a képet Dockerfile segítségével állítjuk össze. Ha egy tárolót egy képből futtat, a Dockerfile már nem használatos.

A felhasználó létrehozásának meg kell történnie a kép készítésekor. Ugyanez vonatkozik a felhasználó meghatározására, aki alatt a folyamatokat elindítják. Ez azt jelenti, hogy valahogy át kell adnunk az UID-t (GID) a tárolón belül.

Az irányelvek külső változók használatára szolgálnak a Dockerfile-ban Env и ARG. Az irányelvek részletes összehasonlítása itt.

dockerfile

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

Érveket adhat át a docker-compose segítségével, így:

dokkoló-levélírás

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

PS A Docker minden fortélyának elsajátításához nem elég elolvasni a dokumentációt vagy a cikkeket. Sokat kell gyakorolni, meg kell érezni a Dockert.

Forrás: will.com

Hozzászólás