Korisnik u Dockeru

Andrey Kopylov, naš CTO, voli, aktivno koristi i promovira Docker. U novom članku objašnjava kako kreirati 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 Dockerfile-u.

Svi procesi u kontejneru će se izvoditi kao root korisnik, osim ako to ne navedete na poseban način. Ovo se čini vrlo zgodnim, jer ovaj korisnik nema ograničenja. Zbog toga je rad kao root pogrešan sa sigurnosne tačke gledišta. Ako niko pri zdravoj pameti ne radi na lokalnom računaru sa root pravima, onda mnogi pokreću procese pod root-om u kontejnerima.

Uvijek postoje greške koje će omogućiti zlonamjernom softveru da pobjegne iz kontejnera i dođe do glavnog računala. Pod pretpostavkom najgoreg, moramo osigurati da procese unutar kontejnera pokreće korisnik koji nema nikakva prava na glavnom računalu.

Kreiranje korisnika

Kreiranje korisnika u kontejneru se ne razlikuje od kreiranja u Linux distribucijama. Međutim, komande se mogu razlikovati za različite osnovne slike.

Za distribucije zasnovane 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 alpske:

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

Pokretanje procesa od korisnika

Da biste pokrenuli sve naredne procese kao korisnik sa UID 2000, pokrenite:

USER 2000

Da biste pokrenuli sve naredne procese kao korisnik čvora, pokrenite:

USER node

Više u dokumentaciju.

Montažni volumeni

Kada montirate volumene unutar kontejnera, omogućite korisniku mogućnost čitanja i/ili pisanja datoteka. Da biste to učinili, UID (GID) korisnika u kontejneru i korisnika izvan kontejnera koji ima odgovarajuće dozvole za pristup datoteci moraju se podudarati. U ovom slučaju, korisnička imena nisu bitna.

Često na Linux računaru, korisnički UID i GID su jednaki 1000. Ovi identifikatori se dodeljuju prvom korisniku računara.

Pronalaženje vaših identifikatora je jednostavno:

id

Dobit ćete sveobuhvatne 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 na sljedeći način:

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

Ako koristite alpsku osnovnu sliku, morate instalirati shadow paket:

RUN apk add —no-cache shadow

Prenošenje korisničkog ID-a unutar kontejnera prilikom izrade slike

Ako se vaš ID i ID-ovi svih ljudi koji rade na projektu poklapaju, onda 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 Docker-a ne shvaćaju da postoje različite faze u životu slike. Prvo, slika se sastavlja pomoću Dockerfile-a. Prilikom pokretanja kontejnera sa slike, Dockerfile se više ne koristi.

Kreiranje korisnika mora se dogoditi kada je slika napravljena. Isto vrijedi i za određivanje korisnika pod kojim se pokreću procesi. To znači da moramo nekako proći UID (GID) unutar kontejnera.

Direktive se koriste za korištenje vanjskih varijabli u Dockerfileu ENV и ARG. Detaljno poređenje direktiva ovdje.

dockerfile

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

Možete proslijediti argumente putem docker-compose ovako:

docker-compose

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

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

izvor: www.habr.com

Dodajte komentar