, naš tehnički direktor, aktivno koristi i promovira Docker. U novom članku objašnjava kako stvoriti korisnike u Dockeru. Ispravna upotreba korisnika, zašto ih ne treba ostavljati s root pravima i kako riješiti problem nesukladnosti indikatora u Dockerfile-u.
Svi procesi unutar kontejnera radit će pod korisnikom root, osim ako se posebno ne odredi. To se čini vrlo praktičnim, jer taj korisnik nema nikakva ograničenja. Zbog toga je nepravilno raditi pod rootom s aspekta sigurnosti. Ako na lokalnom računalu nitko razuman ne radi s root pravima, mnogi pokreću procese pod rootom unutar kontejnera.
Uvijek postoje greške koje omogućuju malicioznim programima da pobjegnu iz kontejnera i uđu na domaći računalni sustav. Pretpostavljajući najgore, moramo osigurati da se procesi unutar kontejnera pokreću s korisnikom koji nema nikakva prava na domaćem računalu.
Kreiranje korisnika
Stvaranje korisnika unutar kontejnera ne razlikuje se od njegovog stvaranja u linux distribucijama. Međutim, za različite osnovne slike, komande se mogu razlikovati.
Za distribucije temeljene na debian-u u Dockerfile-u potrebno je dodati:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home nodeZa alpine:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Pokretanje procesa pod korisnikom
Za pokretanje svih sljedećih procesa pod korisnikom s UID 2000, izvršite:
USER 2000Za pokretanje svih sljedećih procesa pod korisnikom node, izvršite:
USER nodeViše u .
Montiranje volumena
Pri montiranju volumena unutar kontejnera osigurajte korisniku mogućnost čitanja i (ili) pisanja datoteka. Za to, UID (GID) korisnika u kontejneru i korisnika izvan kontejnera, koji ima odgovarajuća prava pristupa datoteci, moraju odgovarati. Pri tome imena korisnika nisu bitna.
Često je na linux računalu korisniku UID i GID jednako 1000. Ove identifikatore dodjeljuje prvi korisnik računala.
Saznati svoje identifikatore je jednostavno:
idDobit ćete iscrpne informacije o svom korisniku.
Zamijenite 2000 iz primjera s vlastitim identifikatorom i bit će sve u redu.
Dodjeljivanje korisniku UID i GID
Ako je korisnik već stvoren, ali je potrebno promijeniti identifikatore, to se može učiniti na sljedeći način:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Ako koristite osnovnu sliku alpine, potrebno je instalirati paket shadow:
RUN apk add --no-cache shadowPrijenos korisničkog identifikatora unutar kontejnera prilikom izrade slike
Ako se vaš identifikator i identifikatori svih osoba koje rade na projektu poklapaju, tada je dovoljno navesti taj identifikator u Dockerfileu. Međutim, često identifikatori korisnika ne odgovaraju.
Nije odmah jasno kako ostvariti željeno. To mi je bilo najteže u procesu učenja dockera. Mnogi korisnici dockera ne razmišljaju o tome da postoje različite faze života slike. Prvo se slika sastavlja, za to se koristi Dockerfile. Kada pokrenete kontejner iz slike, Dockerfile se više ne koristi.
Stvaranje korisnika treba se odvijati prilikom izrade slike. Isto se odnosi i na određivanje korisnika pod kojim se procesi pokreću. To znači da na neki način moramo predati unutra kontejnera UID (GID).
Za korištenje vanjskih varijabli u Dockerfileu služe direktive i . Detaljna usporedba direktiva .
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Argumente se putem docker-compose može prenijeti na sljedeći način:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
P.S. Da biste savladali sve tajne dockera, nije dovoljno čitati dokumentaciju ili članke. Potrebno je puno vježbati, potrebno je osjetiti docker.
Izvor: habr.com
