Benotzer am Docker

Andrey Kopylov, eisen CTO, gär, benotzt aktiv a fördert Docker. An engem neien Artikel erkläert hien wéi een Benotzer am Docker erstellt. Korrekt Aarbecht mat hinnen, firwat d'Benotzer net mat Root-Rechter verloosse sollten a wéi een de Problem vu falschen Indikatoren an der Dockerfile léisen.

All Prozesser am Container lafen als Root Benotzer, ausser Dir spezifizéiert et op eng speziell Manéier. Dëst schéngt ganz bequem, well dëse Benotzer keng Restriktiounen huet. Dofir ass d'Aarbecht als Root falsch aus Sécherheetssiicht. Wann keen an hirem richtege Geescht op de lokale Computer mat Root Rechter schafft, da lafen vill Prozesser ënner Root a Container.

Et ginn ëmmer Bugs déi Malware erlaben aus dem Container ze flüchten an op den Hostcomputer ze kommen. Unzehuelen dat Schlëmmst, musse mir garantéieren datt Prozesser am Container vun engem Benotzer lafen, deen keng Rechter op der Hostmaschinn huet.

E Benotzer erstellen

E Benotzer an engem Container erstellen ass net anescht wéi et an Linux Verdeelungen ze kreéieren. Allerdéngs kënnen d'Befehle fir verschidde Basisbiller variéieren.

Fir debian-baséiert Verdeelungen, musst Dir déi folgend an d'Dockerfile addéieren:

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

Fir Alpine:

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

Lafen Prozesser vum Benotzer

Fir all spéider Prozesser als Benotzer mat UID 2000 auszeféieren, lafen:

USER 2000

Fir all spéider Prozesser als Node Benotzer auszeféieren, lafen:

USER node

Méi an Dokumentatioun.

Montage Volumen

Wann Dir Bänn an engem Container montéiert, gitt de Benotzer d'Fäegkeet fir Dateien ze liesen an / oder ze schreiwen. Fir dëst ze maachen, muss d'UID (GID) vum Benotzer am Container an de Benotzer ausserhalb vum Container, deen déi entspriechend Permissiounen huet fir op d'Datei ze kommen, passen. An dësem Fall sinn d'Benotzernimm egal.

Oft op engem Linux Computer sinn d'UID an d'GID vun engem Benotzer gläich 1000. Dës Identifizéierer ginn dem éischte Benotzer vum Computer zougewisen.

Är Identifizéierer erauszefannen ass einfach:

id

Dir kritt iwwergräifend Informatioun iwwer Äre Benotzer.
Ersetzt 2000 aus de Beispiller mat Ärem Identifizéierer an alles wäert gutt sinn.

UID an GID un e Benotzer ze ginn

Wann de Benotzer virdru erstallt gouf, awer Dir musst d'Identificateuren änneren, kënnt Dir et esou maachen:

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

Wann Dir d'Alpine Basisbild benotzt, musst Dir de Shadow Package installéieren:

RUN apk add —no-cache shadow

Passéiert d'Benotzer ID am Container beim Bauen vum Bild

Wann Är ID an d'IDs vun all de Leit, déi um Projet schaffen, passen, da gitt dës ID just an der Dockerfile. Wéi och ëmmer, dacks passen d'Benotzer IDen net.

Wéi ze erreechen wat Dir wëllt ass net direkt kloer. Fir mech war dëst déi schwieregst Saach am Prozess fir Docker ze beherrschen. Vill Docker Benotzer mierken net datt et verschidde Stadien am Liewen vun engem Bild sinn. Als éischt gëtt d'Bild mat engem Dockerfile zesummegesat. Wann Dir e Container aus engem Bild leeft, gëtt d'Dockerfile net méi benotzt.

Benotzer Kreatioun muss geschéien wann d'Bild gebaut ass. Datselwecht gëllt fir d'Bestëmmung vum Benotzer ënner deem Prozesser lancéiert ginn. Dëst bedeit datt mir iergendwéi d'UID (GID) am Container musse passéieren.

Direktiven ginn benotzt fir extern Variabelen an der Dockerfile ze benotzen ENV и ARG. Detailléierte Verglach vun Direktiven hei.

dockerfile

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

Dir kënnt Argumenter iwwer Docker-compose wéi dëst passéieren:

docker-komponéieren

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

PS Fir all d'Intricacies vum Docker ze beherrschen, ass et net genuch d'Dokumentatioun oder d'Artikelen ze liesen. Dir musst vill üben, Dir musst e Gefill fir Docker kréien.

Source: will.com

Setzt e Commentaire