, 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
