User sa Docker

Andrey Kopylov, ang aming CTO, ay nagmamahal, aktibong gumagamit at nagpo-promote ng Docker. Sa isang bagong artikulo, ipinaliwanag niya kung paano lumikha ng mga user sa Docker. Tamang trabaho sa kanila, kung bakit hindi dapat iwanan ang mga user ng mga karapatan sa ugat at kung paano lutasin ang problema ng mga hindi tugmang tagapagpahiwatig sa Dockerfile.

Ang lahat ng mga proseso sa container ay tatakbo bilang root user, maliban kung tinukoy mo ito sa isang espesyal na paraan. Ito ay tila napaka-maginhawa, dahil ang user na ito ay walang mga paghihigpit. Ito ang dahilan kung bakit mali ang pagtatrabaho bilang root mula sa isang punto ng seguridad. Kung walang sinuman sa kanilang tamang pag-iisip ang gumagana sa lokal na computer na may mga karapatan sa ugat, kung gayon maraming nagpapatakbo ng mga proseso sa ilalim ng root sa mga lalagyan.

Palaging may mga bug na magpapahintulot sa malware na makatakas mula sa lalagyan at mapunta sa host computer. Kung ipagpalagay na ang pinakamasama, dapat nating tiyakin na ang mga proseso sa loob ng container ay pinapatakbo ng isang user na walang anumang mga karapatan sa host machine.

Paglikha ng isang gumagamit

Ang paggawa ng user sa isang container ay hindi naiiba sa paggawa nito sa mga distribusyon ng Linux. Gayunpaman, ang mga utos ay maaaring mag-iba para sa iba't ibang mga batayang larawan.

Para sa mga distribusyon na nakabatay sa debian, kailangan mong idagdag ang sumusunod sa Dockerfile:

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

Para sa alpine:

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

Pagpapatakbo ng mga proseso mula sa user

Upang patakbuhin ang lahat ng kasunod na proseso bilang isang user na may UID 2000, patakbuhin ang:

USER 2000

Upang patakbuhin ang lahat ng kasunod na proseso bilang user ng node, patakbuhin ang:

USER node

Magbasa nang higit pa sa dokumentasyon.

Mga dami ng pag-mount

Kapag nag-mount ng mga volume sa loob ng isang lalagyan, bigyan ang user ng kakayahang magbasa at/o magsulat ng mga file. Para magawa ito, dapat tumugma ang UID (GID) ng user sa container at ang user sa labas ng container na may naaangkop na mga pahintulot na i-access ang file. Sa kasong ito, hindi mahalaga ang mga username.

Kadalasan sa isang Linux computer, ang UID at GID ng user ay katumbas ng 1000. Ang mga identifier na ito ay itinalaga sa unang user ng computer.

Madaling malaman ang iyong mga identifier:

id

Makakatanggap ka ng komprehensibong impormasyon tungkol sa iyong user.
Palitan ang 2000 mula sa mga halimbawa ng iyong identifier at magiging maayos ang lahat.

Pagtatalaga ng UID at GID sa isang user

Kung ang user ay ginawa dati, ngunit kailangan mong baguhin ang mga identifier, magagawa mo ito tulad nito:

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

Kung gumagamit ka ng alpine base na imahe, kailangan mong i-install ang shadow package:

RUN apk add β€”no-cache shadow

Pagpasa ng user ID sa loob ng container kapag binubuo ang larawan

Kung magkatugma ang iyong ID at ang mga ID ng lahat ng taong nagtatrabaho sa proyekto, tukuyin lang ang ID na ito sa Dockerfile. Gayunpaman, kadalasan ang mga user ID ay hindi tumutugma.

Kung paano makamit ang gusto mo ay hindi agad malinaw. Para sa akin, ito ang pinakamahirap na bagay sa proseso ng pag-master ng Docker. Maraming mga gumagamit ng docker ang hindi nakakaalam na may iba't ibang yugto sa buhay ng isang imahe. Una, ang imahe ay binuo gamit ang isang Dockerfile. Kapag nagpapatakbo ng container mula sa isang imahe, hindi na ginagamit ang Dockerfile.

Dapat mangyari ang paglikha ng user kapag binuo ang larawan. Ang parehong naaangkop sa pagtukoy sa user kung saan inilulunsad ang mga proseso. Nangangahulugan ito na dapat nating ipasa ang UID (GID) sa loob ng lalagyan.

Ginagamit ang mga direktiba upang gumamit ng mga panlabas na variable sa Dockerfile ENV ΠΈ ARG. Detalyadong paghahambing ng mga direktiba dito.

dockerfile

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

Maaari kang magpasa ng mga argumento sa pamamagitan ng docker-compose tulad nito:

docker-compose

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

PS Para makabisado ang lahat ng intricacies ng Docker, hindi sapat na basahin ang dokumentasyon o mga artikulo. Kailangan mong magsanay ng marami, kailangan mong maramdaman ang Docker.

Pinagmulan: www.habr.com

Magdagdag ng komento