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