, 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 nodeAlpine 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 2000Kõigi järgneva protsessi käitamiseks kasutaja node alt käivitage:
USER nodeRohkem teavet leiate .
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:
idTe 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 shadowKasutaja 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 ja . Üksikasjalik võrdlus direktiivide .
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
