, a műszaki igazgatónk, szereti, aktívan használja és népszerűsíti a Dockert. Az új cikkében arról beszél, hogyan lehet felhasználókat létrehozni a Dockerben. A helyes működésükről, arról, miért nem szabad felhasználókat root jogosultságokkal hagyni, és hogyan oldhatjuk meg az összeférhetetlenségi problémákat a Dockerfile-ben.
Minden folyamat a konténerben root felhasználóként fog futni, hacsak speciálisan nem adjuk meg. Ez nagyon kényelmesnek tűnik, hiszen ennek a felhasználónak nincsenek korlátozásai. Ezért a biztonság szempontjából nem helyes root felhasználóként dolgozni. Ha a helyi számítógépen senki sem dolgozik józan ésszel root jogosultságokkal, akkor sokan rootként indítanak folyamatokat a konténerekben.
Mindig vannak hibák, amelyek lehetővé teszik a rosszindulatú programok számára, hogy kijussanak a konténerből és a hoszt számítógépre kerüljenek. A legrosszabbra számítva biztosítanunk kell, hogy a folyamatok a konténerben olyan felhasználóként fussanak, aki nem rendelkezik jogosultságokkal a hoszt gépen.
Felhasználó létrehozása
Felhasználót létrehozni a konténerben nem különbözik a Linux disztribúciókban való létrehozástól. Azonban a különböző alapképek esetében a parancsok eltérőek lehetnek.
Debian alapú disztribúciók esetén a Dockerfile-ba a következőt kell hozzáadni:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home nodeAlpine esetén:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Folyamatok indítása felhasználóként
Minden további folyamatot a 2000-es UID-ja felhasználóként való futtatásához futtassa:
USER 2000Minden további folyamatot a node felhasználóként való futtatásához futtassa:
USER nodeTovábbi részletek a .
Következő kötetek bekapcsolása
A kötetek konténerbe való bekapcsolásakor biztosítani kell, hogy a felhasználónak legyen joga olvasni és (vagy) írni a fájlokba. Ehhez a felhasználó UID-ja (GID) a konténerben és a konténeren kívüli felhasználónak, akinek megvan a megfelelő hozzáférési joga a fájlhoz, meg kell egyeznie. A felhasználóneveknek nincs jelentősége.
Gyakran egy Linux számítógépen az UID és a GID 1000-re van beállítva. Ezeket az azonosítókat az első számítógép felhasználójának tulajdonítják.
Az azonosítók felfedezése egyszerű:
idÁtfogó információt kap a felhasználójáról.
Cserélje ki a példákban szereplő 2000-es azonosítót a saját azonosítójára, és minden rendben lesz.
Felhasználónak UID és GID hozzárendelése
Ha a felhasználó korábban létrejött, de szükséges az azonosítók módosítása, akkor ezt így teheti meg:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Ha alapértelmezett alpine képet használ, telepítenie kell a shadow csomagot:
RUN apk add --no-cache shadowA felhasználóazonosító átvitele a konténerbe a kép építésekor
Ha az ön azonosítója és mindenki, aki a projekten dolgozik, megegyezik, akkor elegendő ezt az azonosítót megadni a Dockerfile-ban. Azonban gyakran azonosítók nem egyeznek.
A kívánt megoldás elérése nem mindig világos. Számomra ez volt a legnehezebb a Docker elsajátítási folyamatában. Sok Docker felhasználó nem gondol arra, hogy a képeknek különböző életciklusai vannak. Először a kép összeállítása történik, ehhez használják a Dockerfile-t. A konténer elindításakor a Dockerfile-t már nem használják.
A felhasználók létrehozása a kép építésekor kell, hogy megtörténjen. Ugyanez vonatkozik arra is, hogy meg kell határoznunk, hogy melyik felhasználó alatt futnak a folyamatok. Tehát valamilyen módon át kell adnunk a konténerbe az UID-t (GID-t).
A külső változók használatára a Dockerfile-ban a következő direktívák szolgálnak: és . A direktívák részletes összehasonlítása .
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Az argumentumokat a docker-compose segítségével így lehet átadni:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
P.S. A Docker minden titkának elsajátításához nem elegendő a dokumentáció vagy a cikkek olvasása. Sokat kell gyakorolni, érezni kell a Dockert.
Forrás: habr.com
