‫حسنا. نحن نعلم أنه لا يمكننا تشغيل كجذر في الحاوية.
‫لكن ، خارج الحاوية ، الجذر في الحاوية ، بالمناسبة ، ليس لديه
‫وصول مباشر إلى أي شيء على المضيف ، صحيح.
‫فقط
‫لأنك جذر في حاوية ، فأنت لا تزال مسجونًا هناك.
‫ولكن ، إذا كنت تريد
‫أن تأخذ هذا المستوى التالي ، حيث إذا كان لدى المستخدم جذر في الحاوية
‫، فإنه يريد الخروج إلى المضيف ، لأن هناك
‫نواة من الثغرات الأمنية كما تحدثنا
‫عنها ، مثل dirty Cow أو ثغرة أخرى في Docker أو شيء ما.
‫بعد ذلك ، فإن الخطوة التالية التي تقوم بها هنا هي تمكين مساحات أسماء المستخدمين
‫، والتي لا يتم تمكينها افتراضيًا.
‫لدي رابط هنا يأخذك إلى مقالة مدونة
‫تتحدث عن كل شيء.
‫بشكل أساسي ، هو إعداد لكل مضيف قمت بتعيينه في تكوين
‫Docker. عامل ميناء JSON.
‫يخبر Docker أنه في أي وقت يقوم بإنشاء حاوية
‫جديدة لتشغيل تلك الحاوية
‫كمستخدم غير جذر على المضيف.
‫لذلك ، يوجد أساسًا برنامجان هناك
‫، containerd و runC ، وهي برامج أخرى يستخدمها Docker لبدء
‫تشغيل الحاوية الخاصة بك.
‫افتراضيًا ، تعمل هذه كجذر.
‫تتمثل إحدى الميزات التي يمتلكها Docker في تمكين
‫مساحات أسماء المستخدمين ، وهو
‫ما يعني بشكل أساسي أن Docker ينشئ هذه الحاويات ، ولن
‫يتم إنتاجها كعملية فرعية تعمل كجذر مثل Docker.
‫سوف تفرخهم كمستخدم ذي أعداد عالية.
‫نوع من ، ليس بالضرورة مستخدمًا عشوائيًا ، ولكنه مستخدم
‫رفيع المستوى.
‫هذا يعني أنه إذا كانت هذه الحاوية
‫بها أي ثغرات أمنية حيث يكون المستخدم
‫قادرًا على الهروب من الحاوية ، فسيظل هناك مستخدم
‫على المضيف فقط. لأنهم سيتصرفون بصفتهم المستخدم
‫الذي تستخدمه العملية التي تشغل تلك الحاوية.
‫إن RunC أساسًا.
‫برنامج runC هو ما يطلق هذه الحاوية ،
‫وسيعمل كمستخدم ذي أرقام عالية ، وليس
‫كمستخدم جذر. هذا المستخدم ليس لديه حقًا أي
‫امتيازات خارج تلك الحاوية. لذلك ، هذه الميزة هي إعداد
‫لكل مضيف ، وليس إعدادًا لكل حاوية ، ولا يعمل
‫كل شيء ضمن مساحات أسماء المستخدمين.
‫عليك فقط المحاولة والممارسة.
‫سيتعين عليك تمكينه على بعض الخوادم ، وجرب تطبيقاتك
‫على هذا الخادم ، ومعرفة ما إذا كانت تعمل.
‫إذا لم يفعلوا ذلك ، فسيتعين عليك تقسيم الهندسة
‫المعمارية الخاصة بك. عندما أقوم بتنفيذ مساحات أسماء
‫المستخدمين في نظام مجموعة ، يكون لدينا عادةً عقد عاملة محددة تم تمكين
‫مساحات أسماء المستخدمين لها.
‫هذا هو المكان الذي تعمل فيه تلك البرامج التي يمكن أن تدعمها
‫، والتي تعمل معها.
‫كل شيء آخر يجب أن يعمل على خوادم Docker العادية
‫في مكان آخر. هذا نوع من كيفية تقسيمها.
‫نحن نقسم إلى فئتين من الخوادم.
‫هذا ، كما تعلمون ، كما لو كنت تقوم بتشغيل DMZ ، هذا ما سأفعله
‫هو أن أقوم بتشغيل ، وتمكين ، في DMZ ، جميع مساحات أسماء
‫المستخدمين ، على جميع الخوادم ، ثم الحاويات
‫التي تعمل يجب أن يكون هناك ، يجب أن يدعم مساحات أسماء المستخدمين.
‫لا يمكنك إلقاء نظرة على التطبيقات ومعرفة ما إذا كانت تدعم مساحات
‫أسماء المستخدمين.
‫انه... مساحات أسماء المستخدمين ليست بالضرورة
‫ميزة خاصة بـ Docker. هذا يعني بشكل أساسي أن
‫الحاوية الخاصة بك تعمل في مساحة اسم والآن
‫تم إغلاق التطبيق الذي يقوم بتشغيل هذه الحاوية أيضًا
‫قليلاً.
‫لا يمكن أن يدعم كل شيء ذلك. سيتعين عليك فقط
‫التدرب أو ربما إجراء بعض الأبحاث لمعرفة
‫ما إذا كان الأشخاص الآخرون قادرين على
‫جعلها تعمل هناك. كما تعلم ، لأشياء مشتركة مثل MySQL
‫وأشياء من هذا القبيل. لكن من الواضح ، بالنسبة
‫لبرامجك التي تطورها ، عليك فقط اختبارها لمعرفة
‫ما إذا كانت ستنجح. أود أن أقول إن معظم البرامج
‫واللغات الشائعة التي أديرها تعمل بشكل جيد في مساحات
‫أسماء المستخدمين. المشكلة الحقيقية في مساحات أسماء
‫المستخدمين هي عندما يكون لديك تطبيق يحتاج إلى الكتابة إلى وحدات
‫التخزين ، أو ربط عمليات التحميل ، ربما يكون لديك
‫تحميلات لملفات المستخدم وأنت تشاركها عبر العديد
‫من الحاويات المختلفة. هذا هو المكان الذي لا تكون فيه مساحات أسماء المستخدمين مستحيلة.
‫يصبح الأمر صعبًا بعض الشيء لأن الملفات التي
‫تمت كتابتها الآن على القرص على المضيف تتم كتابتها
‫الآن كمستخدم مختلف.
‫لأن هذه العملية على المضيف الذي يدير الحاوية
‫هي مستخدم مختلف.
‫لذلك ، سترى معرفات مستخدم مختلفة في هذه الملفات ، وسيتعين عليك
‫فقط التعامل مع ذلك.
‫هناك أذونات Linux قياسية في هذه المرحلة ، وعليك
‫فقط أتمتة هذه المشكلات وحلها بطرق Linux القياسية
‫المختلفة.
‫إنها ليست مشكلة Docker حقًا في تلك المرحلة.
‫إنها مجرد مشكلة أذونات على المضيف.