LXC هو وقت تشغيل حاوية Linux منخفض المستوى معروف جيدًا وتم اختباره بشكل مكثف. وهو قيد التطوير النشط منذ عام 2008 وقد أثبت نفسه في بيئات الإنتاج الحرجة في جميع أنحاء العالم. بعض المساهمين الأساسيين هم نفس الأشخاص الذين ساعدوا في تنفيذ العديد من ميزات النقل بالحاويات المعروفة داخل Linux kernel.
يكتب | خدمة | حالة |
---|---|---|
سي آي (لينكس) | جيثب | |
سي آي (لينكس) | جنكينز | |
حالة المشروع | أفضل ممارسات CII | |
تشويش | OSS-Fuzz | |
تشويش | CIFuzz |
التركيز الرئيسي لـ LXC هو حاويات النظام. أي الحاويات التي توفر بيئة أقرب ما يمكن إلى تلك التي تحصل عليها من جهاز افتراضي ولكن بدون النفقات العامة التي تأتي مع تشغيل نواة منفصلة ومحاكاة جميع الأجهزة.
يتم تحقيق ذلك من خلال مجموعة من ميزات أمان kernel مثل مساحات الأسماء والتحكم الإلزامي في الوصول ومجموعات التحكم.
الحاويات غير المميزة هي حاويات يتم تشغيلها دون أي امتياز. يتطلب هذا دعمًا لمساحات أسماء المستخدمين في النواة التي تعمل عليها الحاوية. كان LXC أول وقت تشغيل يدعم الحاويات غير المميزة بعد دمج مساحات أسماء المستخدمين في نواة الخط الرئيسي.
في الأساس، تقوم مساحات أسماء المستخدمين بعزل مجموعات محددة من UIDs وGIDs. يتم تحقيق ذلك عن طريق إنشاء تعيين بين نطاق من UIDs وGIDs على المضيف إلى نطاق مختلف (غير مميز) من UIDs وGIDs في الحاوية. ستقوم النواة بترجمة هذا التعيين بطريقة تظهر فيها جميع معرفات UID وGIDs داخل الحاوية كما تتوقع من المضيف بينما تكون معرفات UID وGIDs هذه على المضيف في الواقع غير مميزة. على سبيل المثال، قد تظهر العملية التي تعمل كـ UID وGID 0 داخل الحاوية كـ UID وGID 100000 على المضيف. يمكن جمع تفاصيل التنفيذ والعمل من صفحة دليل مساحة اسم المستخدم المقابلة.
نظرًا لأن الحاويات غير المميزة تمثل تحسينًا أمنيًا، فمن الطبيعي أن تأتي مع بعض القيود التي تفرضها النواة. من أجل توفير حاوية غير مميزة تعمل بكامل طاقتها، تتفاعل LXC مع 3 أجزاء من كود setuid:
يتم تشغيل كل شيء آخر كمستخدم خاص بك أو كمعرف مستخدم يمتلكه المستخدم الخاص بك.
بشكل عام، هدف LXC هو الاستفادة من كل ميزة أمان متوفرة في النواة. وهذا يعني أن إدارة تكوين LXC ستسمح للمستخدمين ذوي الخبرة بضبط LXC بشكل معقد ليناسب احتياجاتهم.
يمكن العثور على مقدمة أكثر تفصيلاً حول أمان LXC ضمن الرابط التالي
من حيث المبدأ، يمكن تشغيل LXC بدون أي من هذه الأدوات بشرط تطبيق التكوين الصحيح. ومع ذلك، فإن فائدة هذه الحاويات عادة ما تكون محدودة للغاية. فقط لتسليط الضوء على المشكلتين الأكثر شيوعا:
الشبكة: بدون الاعتماد على مساعد setuid لإعداد أجهزة الشبكة المناسبة لمستخدم لا يتمتع بالامتيازات (انظر ثنائي lxc-user-nic
الخاص بـ LXC)، فإن الخيار الوحيد هو مشاركة مساحة اسم الشبكة مع المضيف. على الرغم من أن هذا يجب أن يكون آمنًا من حيث المبدأ، إلا أن مشاركة مساحة اسم الشبكة الخاصة بالمضيف لا تزال تمثل خطوة عزل أقل وتزيد من ناقل الهجوم. علاوة على ذلك، عندما يتشارك المضيف والحاوية في نفس مساحة اسم الشبكة، فإن النواة سترفض أي عمليات تثبيت لـ sysfs. يعني هذا عادةً أن ملف init الثنائي الموجود داخل الحاوية لن يتمكن من التمهيد بشكل صحيح.
مساحات أسماء المستخدمين: كما هو موضح أعلاه، تعد مساحات أسماء المستخدمين تحسينًا أمنيًا كبيرًا. ومع ذلك، بدون الاعتماد على المساعدين المميزين، يُسمح للمستخدمين الذين لا يتمتعون بامتيازات على المضيف فقط بتعيين UID الخاص بهم في حاوية. ومع ذلك، يتطلب نظام POSIX القياسي توفر 65536 معرفًا فريدًا ومعرفًا جغرافيًا (GIDs) لضمان الأداء الوظيفي الكامل.
يتم تكوين LXC عبر مجموعة بسيطة من المفاتيح. على سبيل المثال،
lxc.rootfs.path
lxc.mount.entry
مفاتيح تكوين مساحات الأسماء LXC باستخدام نقاط مفردة. وهذا يعني أن مفاتيح التكوين المعقدة مثل lxc.net.0
تعرض مفاتيح فرعية مختلفة مثل lxc.net.0.type
و lxc.net.0.link
و lxc.net.0.ipv6.address
وغيرها لمزيد من الدقة. التكوين الحبيبي.
يتم استخدام LXC كوقت تشغيل افتراضي لـ Incus، وهو برنامج Hypervisor للحاويات الذي يعرض REST-api المستقر والمصمم جيدًا فوقه.
يعمل LXC على أي نواة بدءًا من الإصدار 2.6.32 وما بعده. كل ما يتطلبه الأمر هو مترجم C وظيفي. يعمل LXC على جميع البنيات التي توفر ميزات kernel الضرورية. يتضمن ذلك (على سبيل المثال لا الحصر):
يدعم LXC أيضًا مكتبات C القياسية التالية على الأقل:
لقد ركزت LXC دائمًا على التوافق القوي مع الإصدارات السابقة. في الواقع، لم يتم كسر واجهة برمجة التطبيقات (API) منذ الإصدار 1.0.0
وما بعده. LXC الرئيسي موجود حاليًا في الإصدار 4.*.*
.
يتمتع مشروع LXC بسمعة طيبة في التعامل مع المشكلات الأمنية بسرعة وكفاءة. إذا كنت تعتقد أنك وجدت مشكلة أمنية محتملة، فيرجى الإبلاغ عنها عبر البريد الإلكتروني إلى Security (at) linuxcontainers (dot) org.
لمزيد من التفاصيل يرجى إلقاء نظرة على
نرحب دائمًا بالمساهمين الجدد ويسعدنا تقديم التوجيه عند الضرورة. تتبع LXC اصطلاحات ترميز kernel. هذا يعني أننا نطلب فقط أن يتضمن كل التزام سطر Signed-off-by
. أسلوب الترميز الذي نستخدمه مطابق للأسلوب الذي تستخدمه نواة Linux. يمكنك العثور على مقدمة مفصلة على:
ويجب أيضًا إلقاء نظرة على ملف المساهمة في هذا الريبو.
إذا كنت تريد أن تصبح أكثر نشاطًا فمن الجيد أيضًا أن تظهر في قناة LXC IRC #lxc-dev على irc.libera.chat. نحن نحاول القيام بكل عمليات التطوير بشكل علني ويتم مناقشة الميزات أو الأخطاء الجديدة إما في مشكلات GitHub المناسبة أو على IRC.
عند التفكير في تقديم مساهمات أمنية مهمة أو تغييرات جوهرية، فمن الجيد عادةً إجراء اختبار الاتصال للمطورين أولاً والسؤال عما إذا كان سيتم قبول العلاقات العامة.
تلتزم LXC والمشاريع المرتبطة بها بشكل صارم بمخطط الإصدارات الدلالية.
يمكن دائمًا تنزيل مصدر أحدث إصدار تم إصداره من
يمكنك تصفح كود المصدر الدقيق وتغيير السجل عبر الإنترنت
دون النظر في توزيع تفاصيل محددة بسيطة
meson setup -Dprefix=/usr build
meson compile -C build
عادة ما يكون كافيا.
عندما تجد أنك بحاجة إلى المساعدة، فإن مشاريع LXC توفر لك العديد من الخيارات.
نحن نحافظ على منتدى للمناقشة في
حيث يمكنك الحصول على الدعم.
يمكنك أن تجدنا في #lxc على irc.libera.chat.
يمكنك الاطلاع على أحد أرشيفات القائمة البريدية لـ LXC والتسجيل إذا كنت مهتمًا: