కంటైనర్లోని అన్ని ప్రక్రియలు రూట్ యూజర్గా రన్ అవుతాయి, మీరు దానిని ప్రత్యేక పద్ధతిలో పేర్కొనకపోతే. ఇది చాలా సౌకర్యవంతంగా కనిపిస్తుంది, ఎందుకంటే ఈ వినియోగదారుకు ఎటువంటి పరిమితులు లేవు. అందుకే రూట్గా పని చేయడం భద్రతా కోణం నుండి తప్పు. రూట్ హక్కులతో స్థానిక కంప్యూటర్లో వారి సరైన మనస్సులో ఎవరూ పని చేయకపోతే, చాలా మంది కంటైనర్లలో రూట్ కింద ప్రక్రియలను అమలు చేస్తారు.
మాల్వేర్ కంటైనర్ నుండి తప్పించుకోవడానికి మరియు హోస్ట్ కంప్యూటర్లోకి ప్రవేశించడానికి అనుమతించే బగ్లు ఎల్లప్పుడూ ఉంటాయి. చెత్తగా భావించి, హోస్ట్ మెషీన్పై ఎలాంటి హక్కులు లేని వినియోగదారు ద్వారా కంటైనర్లోని ప్రక్రియలు అమలు చేయబడతాయని మేము నిర్ధారించుకోవాలి.
వినియోగదారుని సృష్టిస్తోంది
వినియోగదారుని కంటైనర్లో సృష్టించడం అనేది Linux పంపిణీలలో సృష్టించడం నుండి భిన్నంగా ఉండదు. అయితే, వేర్వేరు బేస్ ఇమేజ్ల కోసం ఆదేశాలు మారవచ్చు.
డెబియన్-ఆధారిత పంపిణీల కోసం, మీరు క్రింది వాటిని డాకర్ఫైల్కు జోడించాలి:
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ని పేర్కొనండి. అయితే, తరచుగా వినియోగదారు IDలు సరిపోలడం లేదు.
మీరు కోరుకున్నది ఎలా సాధించాలో వెంటనే స్పష్టంగా తెలియదు. నాకు, డాకర్ను మాస్టరింగ్ చేసే ప్రక్రియలో ఇది చాలా కష్టమైన విషయం. చాలా మంది డాకర్ యూజర్లు ఇమేజ్ యొక్క జీవితంలో వివిధ దశలు ఉన్నాయని గ్రహించలేరు. మొదట, చిత్రం డాకర్ఫైల్ని ఉపయోగించి సమీకరించబడుతుంది. చిత్రం నుండి కంటైనర్ను అమలు చేస్తున్నప్పుడు, డాకర్ఫైల్ ఇకపై ఉపయోగించబడదు.
చిత్రం నిర్మించబడినప్పుడు వినియోగదారు సృష్టి తప్పనిసరిగా జరగాలి. ప్రాసెస్లు ప్రారంభించబడిన వినియోగదారుని నిర్ణయించడానికి కూడా ఇది వర్తిస్తుంది. అంటే మనం ఏదో ఒకవిధంగా కంటైనర్ లోపల UID (GID)ని పాస్ చేయాలి.
డాకర్ఫైల్లో బాహ్య వేరియబుల్లను ఉపయోగించడానికి డైరెక్టివ్లు ఉపయోగించబడతాయి
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
మీరు ఇలా డాకర్ కంపోజ్ ద్వారా వాదనలను పంపవచ్చు:
డాకర్-కూర్చండి
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS డాకర్ యొక్క అన్ని చిక్కులను నేర్చుకోవడానికి, డాక్యుమెంటేషన్ లేదా కథనాలను చదవడం సరిపోదు. మీరు చాలా సాధన చేయాలి, మీరు డాకర్ కోసం అనుభూతిని పొందాలి.
మూలం: www.habr.com