للعزل ، يتم استخدام تقنيات افتراضية حاوية Linux التقليدية ، بناءً على استخدام مجموعات cgroups ومساحات الأسماء (مساحات الأسماء) و Seccomp و SELinux. لإجراء عمليات إعداد الحاوية ذات الامتيازات ، يتم تشغيل Bubblewrap كجذر (ملف قابل للتنفيذ بعلامة suid) مع إعادة تعيين الامتيازات بعد تهيئة الحاوية.
تنشيط مساحات أسماء المستخدمين في نظام مساحات الأسماء ، والذي يسمح للحاويات باستخدام مجموعة منفصلة من المعرفات الخاصة بها ، غير مطلوب للعمل ، لأنه لا يعمل افتراضيًا في العديد من التوزيعات (يتم وضع Bubblewrap على أنه تنفيذ suid محدود لمجموعة فرعية من إمكانيات مساحات أسماء المستخدمين - لاستبعاد جميع معرفات المستخدم والعملية من البيئة ، باستثناء الحالية ، استخدم الوضعين CLONE_NEWUSER و CLONE_NEWPID). لمزيد من الحماية ، يتم تشغيل الملفات التنفيذية
يتم تشغيل برامج Bubblewrap في الوضع PR_SET_NO_NEW_PRIVS ، والذي يمنع الحصول على الامتيازات الجديدة ، على سبيل المثال ، في حالة وجود علامة setuid.
يتم العزل على مستوى نظام الملفات عن طريق إنشاء مساحة اسم تحميل جديدة بشكل افتراضي ، حيث يتم إنشاء قسم جذر فارغ باستخدام tmpfs. إذا لزم الأمر ، يتم إرفاق أقسام من FS خارجي بهذا القسم في وضع "mount --bind" (على سبيل المثال ، عند بدء تشغيله باستخدام الخيار "bwrap --ro-bind / usr / usr" ، قسم / usr من النظام الرئيسي في وضع القراءة فقط). تقتصر الشبكات على الوصول إلى واجهة الاسترجاع مع عزل مكدس الشبكة عبر علامتي CLONE_NEWNET و CLONE_NEWUTS.
الفرق الرئيسي من مشروع مماثل
يتميز الإصدار الجديد بتنفيذ الدعم لإرفاق مساحات أسماء معرف المستخدم الحالية (مساحات أسماء المستخدمين) والعمليات (مساحات أسماء pid). تمت إضافة إشارات "--userns" و "--userns2" و "--pidns" للتحكم في اتصال مساحة الاسم.
لا تعمل هذه الميزة في الوضع setuid وتتطلب استخدام وضع منفصل ، والذي يمكن أن يعمل دون الحصول على حقوق الجذر ، ولكنه يتطلب التنشيط
مساحات أسماء المستخدمين على النظام (معطلة بشكل افتراضي في دبيان و RHEL / CentOS) ولا تستبعد الاحتمال
المصدر: opennet.ru