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