Felhasználó a Dockerben

Andrej Kopylov, 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 node

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

Minden további folyamatot a node felhasználóként való futtatásához futtassa:

USER node

További részletek a dokumentáció.

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 shadow

A 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: ENV és ARG. A direktívák 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

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

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster