, meie tehnilise direktori, kes armastab, kasutab aktiivselt ja propageerib Dockerit. Uues artiklis räägib ta, kuidas luua kasutajaid Dockeris. Õige töö nende kallal, miks ei tohi kasutajaid jätta root õigustega ja kuidas lahendada Dockerfile'i indikaatorite mittesobivuse probleem.
Kõik konteineris töötavad protsessid töötavadroot kasutaja alt, kui seda ei määrata eraldi. See tundub väga mugav, kuna sellel kasutajal ei ole mingeid piiranguid. Just seetõttu on vale töötada root õigustes turvalisuse seisukohalt. Kui lokaal arvutis ei tohi keegi mõistuse juures töötada root õigustes, siis paljud käivitavad protsesse 'root' all konteinerites.
Alati on olemas vead, mis lubavad pahatahtlikul välja pääseda konteinerist ja jõuda host-arvutisse. Eeldades halvimat, peame tagama, et protsessid käivituvad konteineris kasutaja alt, kellel puuduvad õigused host-arvutis.
Kasutaja loomine
Kasutaja loomine konteineris ei erine tema loomisest Linuxi distributsioonides. Kuid erinevate aluseks olevate piltide puhul võivad käsud erineda.
Debian põhinevate distributsioonide jaoks tuleb Dockerfile'i 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äivitamine kasutaja alt
Tehke järgmist, et kõik edasised protsessid töötaksid kasutaja UID 2000 alt:
USER 2000Tehke järgmist, et kõik edasised protsessid töötaksid kasutaja node alt:
USER nodeRohkem infot .
Hoidlate mountimine
Hoidlate mountimisel konteinerisse veenduge, et kasutajal oleks võimalik faile lugeda ja (või) kirjutada. Selle saavutamiseks peavad konteineri kasutaja UID (GID) ja konteinerist väljaspool oleva kasutaja UID (GID), kellel on vastavad juurdepääsuõigused, olema vastavuses. Kasutajanimed ei oma sel juhul tähtsust.
Tihti on Linuxi arvutis kasutajal UID ja GID võrdsed 1000. Need identifikaatorid antakse esimeselle arvuti kasutajale.
Oma identifikaatorite leidmine on lihtne:
idSaate põhjalikku teavet oma kasutaja kohta.
Asendage 2000 näidetes oma identifikaatoriga ja kõik on korras.
Kasutajale UID ja GID määramine
Kui kasutaja on varem loodud, kuid ID-sid on vaja muuta, saab seda teha järgmiselt:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Kui kasutate aluseks olevat alpine pilti, siis tuleb installida shadow paket:
RUN apk add --no-cache shadowKasutaja ID edastamine konteinerisse pildi ehitamise ajal
Kui teie ID ja kõigi teiste projektiga töötavate inimeste ID-d kattuvad, piisab, kui märkida see ID Dockerfile'i. Kuid sageli ei lähe kasutajate ID-d kokku.
Kuidas soovitud tulemus saavutada, ei ole kohe selge. See oli mulle kõige raskem osa Docker'i õppimise protsessis. Paljud Docker'i kasutajad ei mõtle sellele, et piltide elutsükli jooksul on erinevad etapid. Alguses kogutakse pilti, selleks kasutatakse Dockerfile'i. Kogu konteineri käivitamisel Dockerfile'i ei kasutata.
Kasutajate loomine peab toimuma pildi ehitamise ajal. See kehtib ka kasutaja määramisel, kelle alt protsessid käivitatakse. See tähendab, et peame mingil viisil edastama UID (GID) konteinerisse.
ZDockerfile'is väliste muutujaid kasutatakse käskude kaudu ja . Üksikasjalik võrdlus käskudest .
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Argumentide edastamine docker-compose'i kaudu on võimalik järgmiselt:
version: '1' services: simplesample-sonar: image: sonarqube:lts ports: - 9001:9000 - 9092:9092 network_mode: bridge
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
P.S. Docker'i kõikide saladuste omandamiseks ei piisa pelgalt dokumentatsiooni või artiklite lugemisest. Tuleb palju harjutada, tuleb tunnetada Docker'it.
Allikas: habr.com
