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