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 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 node

Alpine 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 2000

Tehke järgmist, et kõik edasised protsessid töötaksid kasutaja node alt:

USER node

Rohkem infot dokumentatsioon.

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:

id

Saate 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 shadow

Kasutaja 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 ENV ja ARG. Üksikasjalik võrdlus käskudest siit.

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

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster