Korisnik u Dockeru

Andrej Kopylov, naš tehnički direktor, voli, aktivno koristi i promovira Docker. U novom članku objašnjava kako stvoriti korisnike u Dockeru. Ispravan rad s njima, zašto korisnicima ne bi trebalo ostaviti root prava i kako riješiti problem neusklađenih indikatora u Dockerfileu.

Svi procesi u spremniku izvodit će se kao root korisnik, osim ako to ne navedete na poseban način. Ovo se čini vrlo zgodno, jer ovaj korisnik nema ograničenja. Zbog toga je rad kao root pogrešan sa sigurnosne točke gledišta. Ako nitko pri zdravoj pameti ne radi na lokalnom računalu s root pravima, tada mnogi pokreću procese pod root-om u spremnicima.

Uvijek postoje greške koje će omogućiti zlonamjernom softveru da pobjegne iz spremnika i uđe na glavno računalo. Pretpostavimo najgore, moramo osigurati da procese unutar spremnika pokreće korisnik koji nema nikakva prava na glavnom računalu.

Stvaranje korisnika

Stvaranje korisnika u spremniku ne razlikuje se od stvaranja u distribucijama Linuxa. Međutim, naredbe se mogu razlikovati za različite osnovne slike.

Za distribucije temeljene na debianu, morate dodati sljedeće u Dockerfile:

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

Za alpsko:

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

Pokretanje procesa od korisnika

Za pokretanje svih naknadnih procesa kao korisnik s UID-om 2000, pokrenite:

USER 2000

Za pokretanje svih naknadnih procesa kao korisnik čvora, pokrenite:

USER node

Više u dokumentacija.

Montažni volumeni

Prilikom montiranja volumena unutar spremnika, omogućite korisniku mogućnost čitanja i/ili pisanja datoteka. Da biste to učinili, UID (GID) korisnika u spremniku i korisnika izvan spremnika koji ima odgovarajuća dopuštenja za pristup datoteci moraju odgovarati. U ovom slučaju korisnička imena nisu bitna.

Često su na Linux računalu korisnički UID i GID jednaki 1000. Ti su identifikatori dodijeljeni prvom korisniku računala.

Lako je pronaći svoje identifikatore:

id

Dobit ćete iscrpne informacije o svom korisniku.
Zamijenite 2000 iz primjera svojim identifikatorom i sve će biti u redu.

Dodjeljivanje UID-a i GID-a korisniku

Ako je korisnik prethodno kreiran, ali morate promijeniti identifikatore, to možete učiniti ovako:

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

Ako koristite alpsku osnovnu sliku, morate instalirati shadow paket:

RUN apk add —no-cache shadow

Prosljeđivanje korisničkog ID-a unutar spremnika prilikom izrade slike

Ako se vaš ID i ID-ovi svih ljudi koji rade na projektu podudaraju, tada samo navedite ovaj ID u Dockerfileu. Međutim, često se korisnički ID-ovi ne podudaraju.

Kako postići ono što želite nije odmah jasno. Za mene je to bila najteža stvar u procesu savladavanja Dockera. Mnogi korisnici dockera ne shvaćaju da postoje različite faze u životu slike. Prvo se slika sastavlja pomoću Dockerfilea. Prilikom pokretanja spremnika iz slike, Dockerfile se više ne koristi.

Stvaranje korisnika mora se dogoditi kada se slika izgradi. Isto vrijedi i za određivanje korisnika pod kojim se pokreću procesi. To znači da moramo nekako proslijediti UID (GID) unutar spremnika.

Direktive se koriste za korištenje vanjskih varijabli u Dockerfileu ENV и ARG. Detaljna usporedba direktiva ovdje.

dockerfile

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

Argumente možete proslijediti putem docker-compose ovako:

doker-nove poruke

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

PS Da biste svladali sve zamršenosti Dockera, nije dovoljno čitati dokumentaciju ili članke. Morate puno vježbati, morate steći osjećaj za Docker.

Izvor: www.habr.com

Dodajte komentar