Utilizator în Docker

Andrei Kopylov, directorul nostru tehnic, iubește, folosește activ și promovează Docker. În noul său articol, el explică cum să creați utilizatori în Docker. Lucrul corect cu aceștia, de ce utilizatorii nu ar trebui să aibă drepturi root și cum se poate rezolva problema necorespunderii indicatorilor în Dockerfile.

Toate procesele din container vor rula sub utilizatorul root, dacă nu este specificat altfel. Acest lucru pare foarte convenabil, deoarece acest utilizator nu are restricții. De aceea, a lucra sub root nu este corect din punct de vedere al securității. Dacă nimeni nu lucrează cu drepturi root pe computerul local, mulți lansează procese sub root în containere.

Întotdeauna există bug-uri care permit malware-ului să iasă din container și să ajungă pe computerul gazdă. Presupunând ce este mai rău, trebuie să ne asigurăm că procesele din container sunt rulează de utilizatorul care nu are drepturi pe mașina gazdă.

Crearea utilizatorului

Crearea utilizatorilor în container nu diferă de crearea acestora în distribuțiile Linux. Totuși, pentru diferite imagini de bază, comenzile pot varia.

Pentru distribuțiile bazate pe debian, în Dockerfile trebuie să adăugați:

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

Pentru alpine:

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

Rularea proceselor de utilizator

Pentru a rula toate procesele ulterioare de utilizator cu UID 2000, executați:

USER 2000

Pentru a rula toate procesele ulterioare de utilizator node, executați:

USER node

Mai multe informații în documentation.

Montarea volumelor

Atunci când montați volume în container, asigurați-vă că utilizatorul are permisiunea de a citi și/sau scrie fișiere. Pentru aceasta, UID (GID) utilizatorului din container și utilizatorului din afara containerului, care are drepturile corespunzătoare de acces la fișier, trebuie să corespundă. Numele utilizatorilor nu au relevanță în acest caz.

Adesea, pe un computer Linux, utilizatorul are UID și GID egale cu 1000. Aceste identificatoare sunt atribuite primului utilizator al computerului.

Este simplu să îți afli identificatoarele:

id

Veți primi informații detaliate despre utilizatorul dvs.
Înlocuiți 2000 din exemple cu identificatorul dvs. și totul va fi în ordine.

Atribuirea utilizatorului UID și GID

Dacă utilizatorul a fost creat mai devreme, dar este necesară schimbarea identificatorilor, aceasta se poate face astfel:

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

Dacă folosiți imaginea de bază alpine, trebuie să instalați pachetul shadow:

RUN apk add --no-cache shadow

Transmiterea identificatorului utilizatorului în container în timpul construirii imaginii

Dacă identificatorul dumneavoastră și identificatorii tuturor persoanelor care lucrează la proiect coincid, este suficient să specificați acest identificator în Dockerfile. Totuși, adesea identificatorii utilizatorilor nu coincid.

Cum să realizați ceea ce doriți nu este întotdeauna evident. Pentru mine, acesta a fost cel mai greu aspect în procesul de învățare a docker-ului. Mulți utilizatori de docker nu se gândesc la faptul că există diferite etape în viața unei imagini. Mai întâi, imaginea este construită; pentru aceasta se folosește Dockerfile. La lansarea containerului din imagine, Dockerfile nu mai este utilizat.

Crearea utilizatorilor trebuie să aibă loc în timpul construirii imaginii. Aceasta se referă și la definirea utilizatorului sub care rulează procesele. Asta înseamnă că trebuie să transmitem cumva în interiorul containerului UID (GID).

Pentru a utiliza variabile externe în Dockerfile, se folosesc directivele ENV și ARG. Compararea detaliată a directivelor aici.

Dockerfile

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

Transmiteți argumentele prin docker-compose astfel:

docker-compose

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

P.S. Pentru a învăța toate subtilitățile docker-ului, nu este suficient să citiți documentația sau articolele. Este nevoie de multă practică, trebuie să simțiți docker.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster