Gebruiker in Docker

Andrej Kopylov, onze CTO, houdt van, gebruikt en promoot Docker actief. In een nieuw artikel legt hij uit hoe je gebruikers aanmaakt in Docker. Werk er correct mee samen, waarom gebruikers geen rootrechten mogen hebben en hoe u het probleem van niet-overeenkomende indicatoren in het Dockerfile kunt oplossen.

Alle processen in de container worden uitgevoerd als rootgebruiker, tenzij u dit op een speciale manier opgeeft. Dit lijkt erg handig, omdat deze gebruiker geen beperkingen heeft. Dit is de reden waarom werken als root verkeerd is vanuit veiligheidsoogpunt. Als niemand bij zijn volle verstand op de lokale computer met rootrechten werkt, draaien velen processen onder root in containers.

Er zijn altijd bugs waardoor malware uit de container kan ontsnappen en op de hostcomputer terecht kan komen. Uitgaande van het ergste moeten we ervoor zorgen dat processen in de container worden uitgevoerd door een gebruiker die geen rechten heeft op de hostmachine.

Een gebruiker aanmaken

Het aanmaken van een gebruiker in een container verschilt niet van het aanmaken ervan in Linux-distributies. De opdrachten kunnen echter variëren voor verschillende basisimages.

Voor op debian gebaseerde distributies moet u het volgende aan het Dockerbestand toevoegen:

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

Voor alpine:

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

Processen uitvoeren vanaf de gebruiker

Om alle volgende processen als gebruiker met UID 2000 uit te voeren, voert u het volgende uit:

USER 2000

Om alle volgende processen als knooppuntgebruiker uit te voeren, voert u het volgende uit:

USER node

Meer in documentatie.

Volumes monteren

Wanneer u volumes in een container koppelt, geef de gebruiker dan de mogelijkheid om bestanden te lezen en/of te schrijven. Om dit te doen, moeten de UID (GID) van de gebruiker in de container en de gebruiker buiten de container die over de juiste machtigingen beschikt om toegang te krijgen tot het bestand, overeenkomen. In dit geval doen gebruikersnamen er niet toe.

Op een Linux-computer zijn de UID en GID van een gebruiker vaak gelijk aan 1000. Deze identificatiegegevens worden toegewezen aan de eerste gebruiker van de computer.

Het achterhalen van uw identificatiegegevens is eenvoudig:

id

U ontvangt uitgebreide informatie over uw gebruiker.
Vervang 2000 uit de voorbeelden door uw identificatie en alles komt goed.

Een UID en GID toewijzen aan een gebruiker

Als de gebruiker eerder is aangemaakt, maar u de ID's moet wijzigen, kunt u dit als volgt doen:

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

Als u de alpine basisimage gebruikt, moet u het schaduwpakket installeren:

RUN apk add —no-cache shadow

Het doorgeven van de gebruikers-ID in de container bij het bouwen van de image

Als uw ID en de ID's van alle mensen die aan het project werken overeenkomen, specificeert u deze ID gewoon in de Dockerfile. Vaak komen de gebruikers-ID's echter niet overeen.

Hoe je kunt bereiken wat je wilt, is niet meteen duidelijk. Voor mij was dit het moeilijkste tijdens het beheersen van Docker. Veel docker-gebruikers realiseren zich niet dat er verschillende fasen zijn in de levensduur van een afbeelding. Eerst wordt de afbeelding samengesteld met behulp van een Dockerfile. Bij het uitvoeren van een container vanaf een afbeelding wordt het Dockerbestand niet langer gebruikt.

Het maken van gebruikers moet plaatsvinden wanneer de image wordt gebouwd. Hetzelfde geldt voor het bepalen van de gebruiker onder wie processen worden gestart. Dit betekent dat we op de een of andere manier de UID (GID) in de container moeten doorgeven.

Richtlijnen worden gebruikt om externe variabelen in de Dockerfile te gebruiken ENV и ARG. Gedetailleerde vergelijking van richtlijnen hier.

Dockerfile

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

Je kunt argumenten als volgt doorgeven via docker-compose:

havenarbeider-compose

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

PS Om alle fijne kneepjes van Docker onder de knie te krijgen, is het niet voldoende om de documentatie of artikelen te lezen. Je moet veel oefenen, je moet Docker onder de knie krijgen.

Bron: www.habr.com

Voeg een reactie