Օգտագործողը Docker-ում

Անդրեյ Կոպիլով, մեր CTO-ն, սիրում, ակտիվորեն օգտագործում և խթանում է Docker-ը: Նոր հոդվածում նա բացատրում է, թե ինչպես ստեղծել օգտատերեր Docker-ում։ Նրանց հետ ճիշտ աշխատանք, ինչու օգտատերերին չպետք է մնան արմատական ​​իրավունքներ և ինչպես լուծել Dockerfile-ում չհամապատասխանող ցուցիչների խնդիրը:

Կոնտեյների բոլոր գործընթացները կաշխատեն որպես արմատային օգտվող, եթե այն հատուկ ձևով չնշեք: Սա շատ հարմար է թվում, քանի որ այս օգտվողը սահմանափակումներ չունի։ Սա է պատճառը, որ որպես root աշխատելը սխալ է անվտանգության տեսանկյունից: Եթե ​​ոչ ոք խելամիտ չի աշխատում տեղական համակարգչում արմատային իրավունքներով, ապա շատերը պրոցեսներ են վարում root-ի տակ կոնտեյներներում:

Միշտ կան վրիպակներ, որոնք թույլ կտան չարամիտ ծրագրերին փախչել կոնտեյներից և մտնել հյուրընկալող համակարգիչ: Ենթադրելով ամենավատը, մենք պետք է ապահովենք, որ կոնտեյների ներսում պրոցեսներն իրականացվեն օգտագործողի կողմից, ով չունի որևէ իրավունք հյուրընկալող մեքենայի վրա:

Օգտագործողի ստեղծում

Կոնտեյներով օգտատեր ստեղծելը ոչնչով չի տարբերվում Linux բաշխումներում այն ​​ստեղծելուց: Այնուամենայնիվ, հրամանները կարող են տարբեր լինել տարբեր բազային պատկերների համար:

Debian-ի վրա հիմնված բաշխումների համար դուք պետք է ավելացնեք հետևյալը Dockerfile-ում.

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

Ալպյան համար.

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

Գործընթացներ օգտագործողի կողմից

Բոլոր հետագա գործընթացները որպես UID 2000 օգտագործող գործարկելու համար գործարկեք՝

USER 2000

Բոլոր հետագա գործընթացները որպես հանգույց օգտագործող գործարկելու համար գործարկեք՝

USER node

Ավելին ՝ փաստաթղթավորում.

Մոնտաժման ծավալներ

Կոնտեյների ներսում ծավալներ տեղադրելու ժամանակ օգտագործողին տրամադրեք ֆայլեր կարդալու և/կամ գրելու հնարավորություն: Դա անելու համար բեռնարկղում գտնվող օգտատիրոջ UID-ը (GID) և բեռնարկղից դուրս գտնվող օգտատերը, ով ունի ֆայլ մուտք գործելու համապատասխան թույլտվություններ, պետք է համընկնի: Այս դեպքում օգտվողի անունները նշանակություն չունեն:

Հաճախ Linux համակարգչի վրա օգտագործողի UID-ն և GID-ը հավասար են 1000-ի: Այս նույնացուցիչները վերագրվում են համակարգչի առաջին օգտագործողին:

Ձեր նույնացուցիչները պարզելը հեշտ է.

id

Դուք կստանաք համապարփակ տեղեկատվություն ձեր օգտատիրոջ մասին:
Փոխարինեք օրինակներից 2000-ը ձեր նույնացուցիչով և ամեն ինչ լավ կլինի:

Օգտագործողին UID և GID-ի նշանակում

Եթե ​​օգտվողը նախկինում ստեղծվել է, բայց դուք պետք է փոխեք նույնացուցիչները, կարող եք դա անել այսպես.

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

Եթե ​​դուք օգտագործում եք ալպիական հիմքի պատկերը, ապա պետք է տեղադրեք ստվերային փաթեթը.

RUN apk add —no-cache shadow

Պատկերը կառուցելիս օգտագործողի ID-ի փոխանցումը կոնտեյների ներսում

Եթե ​​ձեր ID-ն և նախագծի վրա աշխատող բոլոր մարդկանց ID-ները համընկնում են, ապա պարզապես նշեք այս ID-ն Dockerfile-ում: Այնուամենայնիվ, հաճախ օգտվողի ID-ները չեն համընկնում:

Ինչպես հասնել ձեր ուզածին, անմիջապես պարզ չէ: Ինձ համար դա ամենադժվարն էր Docker-ին տիրապետելու գործընթացում։ Դոկերի օգտատերերից շատերը չեն գիտակցում, որ պատկերի կյանքում կան տարբեր փուլեր: Նախ, պատկերը հավաքվում է Dockerfile-ի միջոցով: Պատկերից կոնտեյներ գործարկելիս Dockerfile-ն այլևս չի օգտագործվում:

Օգտատիրոջ ստեղծումը պետք է տեղի ունենա, երբ պատկերը ստեղծվի: Նույնը վերաբերում է օգտատիրոջը որոշելուն, ում կողմից գործարկվում են գործընթացները: Սա նշանակում է, որ մենք պետք է ինչ-որ կերպ փոխանցենք UID-ը (GID) կոնտեյների ներսում:

Դիրեկտիվները օգտագործվում են Dockerfile-ում արտաքին փոփոխականներ օգտագործելու համար ENV и ARG. Հրահանգների մանրամասն համեմատություն այստեղ.

dockerfile

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

Դուք կարող եք փաստարկներ փոխանցել docker-compose-ի միջոցով այսպես.

դոկտոր-կոմպոզիցիա

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

Հ.Գ. Docker-ի բոլոր բարդությունները տիրապետելու համար բավական չէ կարդալ փաստաթղթերը կամ հոդվածները: Դուք պետք է շատ պարապեք, դուք պետք է զգաք Docker-ը:

Source: www.habr.com

Добавить комментарий