Контейнердегі барлық процестер, егер сіз оны арнайы жолмен көрсетпесеңіз, түбірлік пайдаланушы ретінде іске қосылады. Бұл өте ыңғайлы болып көрінеді, өйткені бұл пайдаланушыда шектеулер жоқ. Сондықтан түбір ретінде жұмыс істеу қауіпсіздік тұрғысынан дұрыс емес. Егер ақыл-есі дұрыс ешкім жергілікті компьютерде түбірлік құқықтары бар жұмыс істемесе, онда көпшілігі контейнерлерде түбірлік астындағы процестерді іске қосады.
Зиянды бағдарламаның контейнерден шығып, негізгі компьютерге енуіне мүмкіндік беретін қателер әрқашан болады. Ең нашар деп есептесек, контейнер ішіндегі процестерді хост компьютерінде ешқандай құқығы жоқ пайдаланушы басқаратынына көз жеткізуіміз керек.
Пайдаланушыны құру
Пайдаланушыны контейнерде жасау оны 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 ішіндегі сыртқы айнымалы мәндерді пайдалану үшін пайдаланылады
Докер файлы
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