ተጠቃሚ በዶከር ውስጥ

አንድሬ ኮፒሎቭ, የእኛ CTO, ይወዳል, በንቃት ይጠቀማል እና Docker ያስተዋውቃል. በአዲስ መጣጥፍ በ Docker ውስጥ ተጠቃሚዎችን እንዴት መፍጠር እንደሚቻል ያብራራል። ከእነሱ ጋር ትክክለኛ ስራ, ለምን ተጠቃሚዎች የስር መብቶችን መተው እንደሌለባቸው እና በ Dockerfile ውስጥ የተሳሳቱ አመላካቾችን ችግር እንዴት እንደሚፈቱ.

ልዩ በሆነ መንገድ ካልገለጹት በስተቀር በእቃው ውስጥ ያሉት ሁሉም ሂደቶች እንደ ስር ተጠቃሚ ይሆናሉ። ይህ በጣም ምቹ ይመስላል, ምክንያቱም ይህ ተጠቃሚ ምንም ገደብ የለውም. ለዚህም ነው እንደ ስር መስራት ከደህንነት አንፃር ስህተት የሆነው። በትክክለኛው አእምሮ ውስጥ ማንም ሰው በአካባቢው ኮምፒዩተር ላይ ከስር መብቶች ጋር የማይሰራ ከሆነ ብዙ ሂደቶችን በመያዣዎች ውስጥ ስር ያካሂዳሉ።

ማልዌር ከመያዣው እንዲያመልጥ እና ወደ አስተናጋጁ ኮምፒዩተር እንዲገባ የሚፈቅዱ ስህተቶች ሁል ጊዜ አሉ። በጣም መጥፎውን ግምት ውስጥ በማስገባት በማጠራቀሚያው ውስጥ ያሉ ሂደቶች በአስተናጋጅ ማሽን ላይ ምንም አይነት መብት በሌለው ተጠቃሚ የሚሄዱ መሆናቸውን ማረጋገጥ አለብን።

የተጠቃሚ ፈጠራ

በኮንቴይነር ውስጥ ተጠቃሚን መፍጠር በሊኑክስ ስርጭቶች ውስጥ ከመፍጠር አይለይም። ሆኖም ትእዛዞቹ ለተለያዩ የመሠረት ምስሎች ሊለያዩ ይችላሉ።

በዲቢያን ላይ ለተመሠረቱ ስርጭቶች፣ ወደ 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

ተጨማሪ በ ሰነድ.

የመጫኛ መጠኖች

በመያዣው ውስጥ መጠኖችን በሚጭኑበት ጊዜ ለተጠቃሚው ፋይሎችን የማንበብ እና/ወይም የመፃፍ ችሎታ ይስጡት። ይህንን ለማድረግ በመያዣው ውስጥ ያለው የተጠቃሚው ዩአይዲ (ጂአይዲ) እና ከመያዣው ውጭ ያለው ፋይሉን የመድረስ አግባብ ያለው ፍቃድ ያለው ተጠቃሚ መመሳሰል አለበት። በዚህ አጋጣሚ የተጠቃሚ ስሞች ምንም አይደሉም.

ብዙ ጊዜ በሊኑክስ ኮምፒዩተር ላይ የተጠቃሚው ዩአይዲ እና ጂአይዲ ከ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. የመመሪያዎች ዝርዝር ንጽጽር እዚህ.

Dockerfile

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

ክርክሮችን በ docker-በሚከተለው በኩል ማለፍ ይችላሉ፡-

ዳክለር-መፃፊያ

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

PS ሁሉንም የዶክተርን ውስብስብ ነገሮች ለመቆጣጠር ሰነዶቹን ወይም ጽሑፎቹን ማንበብ በቂ አይደለም. ብዙ ልምምድ ማድረግ ያስፈልግዎታል, ለዶከር ስሜት ሊሰማዎት ይገባል.

ምንጭ: hab.com

አስተያየት ያክሉ