Docker жүйесіндегі пайдаланушы

Андрей Копылов, біздің CTO Docker-ті жақсы көреді, белсенді пайдаланады және алға жылжытады. Жаңа мақалада ол Docker бағдарламасында пайдаланушыларды қалай жасау керектігін түсіндіреді. Олармен дұрыс жұмыс істеу, пайдаланушыларға түбірлік құқықтарды неге қалдырмау керек және Dockerfile файлындағы сәйкес келмейтін көрсеткіштер мәселесін шешу жолдары.

Контейнердегі барлық процестер, егер сіз оны арнайы жолмен көрсетпесеңіз, түбірлік пайдаланушы ретінде іске қосылады. Бұл өте ыңғайлы болып көрінеді, өйткені бұл пайдаланушыда шектеулер жоқ. Сондықтан түбір ретінде жұмыс істеу қауіпсіздік тұрғысынан дұрыс емес. Егер ақыл-есі дұрыс ешкім жергілікті компьютерде түбірлік құқықтары бар жұмыс істемесе, онда көпшілігі контейнерлерде түбірлік астындағы процестерді іске қосады.

Зиянды бағдарламаның контейнерден шығып, негізгі компьютерге енуіне мүмкіндік беретін қателер әрқашан болады. Ең нашар деп есептесек, контейнер ішіндегі процестерді хост компьютерінде ешқандай құқығы жоқ пайдаланушы басқаратынына көз жеткізуіміз керек.

Пайдаланушыны құру

Пайдаланушыны контейнерде жасау оны 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

Кескінді құрастыру кезінде пайдаланушы идентификаторын контейнер ішіне жіберу

Егер сіздің идентификаторыңыз бен жобада жұмыс істейтін барлық адамдардың идентификаторлары сәйкес келсе, Dockerfile файлында осы идентификаторды көрсетіңіз. Дегенмен, жиі пайдаланушы идентификаторлары сәйкес келмейді.

Қалаған нәрсеге қалай қол жеткізуге болатыны бірден анық емес. Мен үшін бұл Докерді меңгеру үдерісіндегі ең қиын нәрсе болды. Көптеген докер пайдаланушылары кескіннің өмірінде әртүрлі кезеңдердің бар екенін түсінбейді. Біріншіден, кескін Dockerfile көмегімен жиналады. Кескіннен контейнерді іске қосу кезінде Dockerfile енді пайдаланылмайды.

Пайдаланушыны жасау кескінді құрастырған кезде орын алуы керек. Бұл процестер іске қосылатын пайдаланушыны анықтауға да қатысты. Бұл контейнер ішіне UID (GID) арқылы өтуіміз керек дегенді білдіреді.

Директивалар Dockerfile ішіндегі сыртқы айнымалы мәндерді пайдалану үшін пайдаланылады ENV и ARG. Директиваларды егжей-тегжейлі салыстыру осында.

Докер файлы

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

PS Docker бағдарламасының барлық қыр-сырын меңгеру үшін құжаттарды немесе мақалаларды оқу жеткіліксіз. Сізге көп жаттығу керек, Докерді сезіну керек.

Ақпарат көзі: www.habr.com

пікір қалдыру