Kasutaja Dockeris

Andrei Kopylov, meie tehnilise direktori, kes armastab, kasutab aktiivselt ja propageerib Dockerit. Uues artiklis räägib ta, kuidas luua kasutajaid Dockeris. Õige töö nende käsitlemisel, miks ei tohi kasutajaid jätta root õigustega ja kuidas lahendada Dockerfile'i indikaatorite mitteühtivuse probleem.

Kõik protsessid konteineris töötavad root kasutajana, kui seda ei määrata eraldi. See võib tunduda väga mugav, sest sellel kasutajal ei ole mingeid piiranguid. Just sel põhjusel ei ole root all töötamine õigesti turvalisuse aspektist. Kui kohalikul arvutil ei tööta keegi mõistlikult root õigustega, siis paljud käivitavad protsesse rootina konteinerites.

Alati on vigu, mis võimaldavad pahavarel välja pääseda konteinerist ja jõuda hosti arvutisse. Eeldades halvimat, peame tagama, et protsessid käivitatakse konteineris kasutaja alt, kellel ei ole mingeid õigusi hostmasinal.

Kasutaja loomine

Kasutaja loomine konteineris ei erine Linuxi distributsioonides kasutamise osas. Siiski võivad erinevate baasbildide korral käsud erineda.

Debianil põhinevates distributsioonides tuleb Dockerfile'ile lisada:

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

Alpine jaoks:

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

Protsesside käitamine kasutaja alt

Kõigi järgneva protsessi käitamiseks kasutaja alt, kellel on UID 2000, käivitage:

USER 2000

Kõigi järgneva protsessi käitamiseks kasutaja node alt käivitage:

USER node

Rohkem teavet leiate dokumentatsioonis.

Mahutite ühendamine

Mahutite ühendamisel veenduge, et kasutajal oleks võimalik faile lugeda ja (või) kirjutada. Selleks peavad konteineri ja konteinerist väljaspool oleva kasutaja, kellel on vastavad õigused faili juurde pääseda, UID (GID) vastama. Kasutajanimi pole oluline.

Tihti on Linuxi arvutis kasutaja UID ja GID võrdsed 1000-ga. Need identifikaatorid antakse esimesele kasutajale arvutis.

Oma identifikaatorite väljaselgitamine on lihtne:

id

Te saad täielikku teavet oma kasutaja kohta.
Asenda 2000 näidet oma ID-ga ja kõik on korras.

Kasutaja UID ja GID määramine

Kui kasutaja on varem loodud, kuid ID-sid on vaja muuta, saad seda teha järgmiselt:

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

Kui kasutad baaspilti alpine, tuleb installida pakett shadow:

RUN apk add --no-cache shadow

Kasutaja ID edastamine konteinerisse pilti ehitades

Kui sinu ID ja kõikide teiste, kes projektiga töötavad, ID-d on ühtsed, piisab, kui määrata see ID Dockerfile'is. Kuid sageli ID-d ei kattu.

Kuidas soovitud saavutada, ei ole kohe selge. See oli minu jaoks kõige keerulisem osa dockeriga tutvumisel. Paljud docker kasutajad ei mõtle sellele, et pildil on erinevad elutsüklid. Esiteks kogutakse pilt, kasutades selleks Dockerfile'i. Kaugelt konteineri käivitamisel Dockerfile'i enam ei kasutata.

Kasutajate loomine peab toimuma image'i loomise käigus. See kehtib ka selle kohta, millise kasutaja alt protsesse käivitatakse. See tähendab, et me peame mingil viisil edastama konteinerisse UID (GID).

Dockerfile'is kasutatakse väliste muutujate jaoks direktiive ENV ja ARG. Üksikasjalik võrdlus direktiivide siin.

Dockerfile

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

Argumente saab docker-compose kaudu edastada nii:

docker-compose

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

P.S. Docker'i kõigi nüansside omandamiseks ei piisa lihtsalt dokumentatsiooni või artiklite lugemisest. Tuleb palju praktiseerida, tuleb tunda docker'it.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster