مستخدم في Docker

أندريه كوبيلوف، CTO لدينا يحب Docker ويستخدمه ويروج له بنشاط. في مقال جديد، يشرح كيفية إنشاء مستخدمين في Docker. العمل الصحيح معهم، ولماذا لا ينبغي ترك المستخدمين مع حقوق الجذر وكيفية حل مشكلة المؤشرات غير المتطابقة في ملف Dockerfile.

سيتم تشغيل جميع العمليات في الحاوية كمستخدم جذر، إلا إذا قمت بتحديده بطريقة خاصة. يبدو هذا مريحًا جدًا، لأن هذا المستخدم ليس لديه أي قيود. هذا هو السبب في أن العمل كجذر أمر خاطئ من الناحية الأمنية. إذا لم يعمل أي شخص بكامل قواه العقلية على جهاز كمبيوتر محلي يتمتع بحقوق الجذر، فسيقوم العديد منهم بتشغيل العمليات تحت الجذر في الحاويات.

توجد دائمًا أخطاء تسمح للبرامج الضارة بالهروب من الحاوية والوصول إلى الكمبيوتر المضيف. بافتراض الأسوأ، يجب علينا التأكد من أن العمليات داخل الحاوية يتم تشغيلها بواسطة مستخدم ليس لديه أي حقوق على الجهاز المضيف.

إنشاء المستخدم

لا يختلف إنشاء مستخدم في حاوية عن إنشائه في توزيعات Linux. ومع ذلك، قد تختلف الأوامر باختلاف الصور الأساسية.

بالنسبة للتوزيعات المبنية على دبيان، تحتاج إلى إضافة ما يلي إلى ملف 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. ومع ذلك، في كثير من الأحيان لا تتطابق معرفات المستخدم.

ليس من الواضح على الفور كيفية تحقيق ما تريد. بالنسبة لي، كان هذا هو أصعب شيء في عملية إتقان 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.

المصدر: www.habr.com

إضافة تعليق