المستخدم في عامل الميناء

يحب Andrey Kopylov ، المدير الفني لدينا ، استخدام 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) للمستخدم في الحاوية والمستخدم خارج الحاوية الذي لديه حقوق الوصول المناسبة إلى الملف. في الوقت نفسه ، أسماء المستخدمين لا يهم.


غالبًا ما يكون المستخدم UID و GID على كمبيوتر Linux ، 1000. يتم تعيين هذه المعرفات لأول مستخدم للكمبيوتر.


الحصول على معرفاتك أمر سهل:


 id 

سوف تتلقى معلومات شاملة عن المستخدم الخاص بك.
استبدل 2000 من الأمثلة بمعرفك وكل شيء سيكون على ما يرام.


تعيين المستخدم UID و GID


إذا تم إنشاء المستخدم مسبقًا ، لكن من الضروري تغيير المعرفات ، فيمكنك القيام بذلك على النحو التالي:


 RUN usermod -u 1000 node \ && groupmod -g 1000 node 

إذا كنت تستخدم الصورة الأساسية لجبال الألب ، فأنت بحاجة إلى تثبيت حزمة الظل:


 RUN apk add —no-cache shadow 

تمرير معرف المستخدم داخل الحاوية عند بناء الصورة


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


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


يجب أن يحدث إنشاء المستخدمين عند بناء الصورة. الأمر نفسه ينطبق على تعريف المستخدم الذي يتم تشغيل العمليات منه. هذا يعني أنه يجب علينا تمرير معرف المستخدم (GID) بطريقة ما إلى الحاوية.


تستخدم توجيهات ENV و ARG لاستخدام المتغيرات الخارجية في Dockerfile. مقارنة مفصلة للتوجيهات هنا .


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 

ملاحظة: لإتقان كل حيل عامل الإرساء ، لا يكفي قراءة الوثائق أو المقالات. تحتاج إلى ممارسة الكثير ، تحتاج إلى أن تشعر عامل ميناء.

Source: https://habr.com/ru/post/ar448480/


All Articles