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