لينكس / المتقدم: الحدود والأمان والاسترداد / الدرس 14
فهم حدود فضاءات الأسماء
اشرح آليات لينكس الأساسية وراء الحاويات وافحص حدود العزل دون إنشاء فضاءات ذات امتياز.
في هذه الصفحة
أهداف الدرس
- وصف ما يعزله كل فضاء رئيسي.
- تفسير العضوية وتخطيط معرفات المستخدم.
- إدراك حدود الحاويات وchroot.
يغيّر العزل ما تراه العملية
يقدم فضاء الأسماء نسخة معزولة من موارد نواة مختارة لأعضائه. تفصل فضاءات التركيب عروض الملفات، والشبكة المكدسات، والعمليات معرفاتها، وUTS إعداد الاسم. وتغطي فضاءات IPC والزمن فئات أخرى. تجمع الحاوية هذه الآليات مع الصور والاعتماد وضبط الموارد وسياسة العمر. ليست مجرد مجلد لتطبيق. وقد تشترك حاويتان عمداً في فضاء؛ لذلك لا تحدد كلمة حاوية حدود العزل الفعلية.
فحص العضوية بدلاً من افتراضها
يحوي /proc/PID/ns مقابض فضاءات العملية وفق فحوص الصلاحيات. تساعد هويات الروابط في معرفة اشتراك عمليتين في فضاء. لا تكفي مقارنة الاسم لأن فضاءات UTS مختلفة قد تحمل الاسم نفسه. وللعضوية تفاصيل عمر؛ فقد تبقي المقابض والتركيبات الرابطة الفضاء بعد خروج أعضائه. تستطيع أدوات إدارية الدخول عند التصريح، لكن ذلك يغير سياق الفحص. يكفي فحص صدفتك للقراءة لتعلم النموذج دون دخول عمل آخر.
readlink /proc/$$/ns/mnt
readlink /proc/$$/ns/net
readlink /proc/$$/ns/user
تختلف الأرقام. يدل تساوي المقابض لنوع واحد على عضوية مشتركة في السياق المقارن. لا ينشئ المثال فضاءات أو يدخلها أو يعدلها.
عرض العمليات والملفات مستقلان
قد تحمل العملية معرفاً في فضاء ابن وآخر في السلف. وللعملية 1 مهام خاصة منها جمع الأيتام وسلوك إشارات خاص. يجب أن يقابل /proc المركب عرض العمليات المقصود ليصح الفحص. تغير فضاءات التركيب ما يظهر لكنها لا تنسخ البيانات تلقائياً؛ فقد يكشف تركيب رابط قابل للكتابة ملفات المضيف. راجع كل تركيب قابل للكتابة والمشاركة لأن مساراً يبدو معزولاً قد يشير إلى تخزين دائم مشترك.
لا يعني اسم root سلطة واحدة
تخطط فضاءات المستخدم المعرفات بين السياقات وتحدد نطاق القدرات. قد يقابل UID 0 داخلها معرفاً غير مميز على المضيف، مما يتيح التشغيل بلا جذر. لكن تقيد السياسة والإعداد والنواة التخطيطات والإنشاء. لا يضمن دعم النواة للإنشاء دون امتياز سماح التوزيعة به. ويؤثر التخطيط في ملكية الملفات المشتركة. افحص الجداول وسياسة المشغل قبل تقرير سلطة root الظاهر أو سلامة الكتابة على ملف مشترك.
cat /proc/$$/uid_map
cat /proc/$$/gid_map
cat /proc/$$/cgroup
تصف الملفات سياق الصدفة. يحوي كل صف بداية داخلية وخارجية وطول نطاق. وملف cgroup دليل منفصل لتنظيم الموارد لا ضماناً للعزل.
تشارك الحاويات نواة وتحتاج ضوابط متعددة
لا تحد فضاءات الأسماء وحدها الذاكرة أو تمنع الاستدعاءات الخطرة أو توثق مصدر الصورة. للأقسام cgroups والقدرات وseccomp والضوابط الإلزامية والملفات المقروءة والسياسة أدوار مختلفة. قد تنهار الحدود بحاوية مميزة أو مقبس إدارة مكشوف. يغير chroot الجذر فقط ولا يوفر هذه الضوابط. قيّم نموذج التهديد والإعداد بدلاً من ضمان شامل. حدّث النواة والمشغلات المدعومة ولا تمنح المختبر مجلدات حساسة للتسهيل.
الأخطاء الشائعة وإصلاحها
افتراض مساواة root الحاوية بجذر المضيف
- لماذا يحدث؟
- أُهمل تخطيط المستخدم ونطاق القدرات.
- كيف تصلحه؟
- افحص uid_map وامتيازات المشغل.
- كيف تتجنب تكراره؟
- صف السلطة بالتخطيطات والقدرات.
افتراض أن المسار المعزول يحوي نسخة
- لماذا يحدث؟
- اختلط عرض التركيب بنسخ التخزين.
- كيف تصلحه؟
- افحص التركيبات الرابطة والوحدات المشتركة القابلة للكتابة.
- كيف تتجنب تكراره؟
- راجع مشاركة التخزين كحد مستقل.
توقع تحديد الذاكرة بفضاء الأسماء
- لماذا يحدث؟
- اختلط ضبط الموارد بعرضها.
- كيف تصلحه؟
- راجع سياسة cgroup للعمل.
- كيف تتجنب تكراره؟
- اربط كل مطلب بآلية النواة الخاصة.
اختبر فهمك
1. لعمليتين اسم مضيف واحد. هل يثبت اشتراك UTS؟
اعرض الحل المشروح
لا. قد تستخدم فضاءات UTS منفصلة الاسم نفسه. قارن المقابض المصرح بها لذلك النوع مع مراعاة السياق. التسمية قيمة داخل الفضاء لا هوية فريدة له.
2. تعجز حاوية بلا جذر عن تحرير مشروع مركب رابطاً. ماذا تفحص قبل توسيع الأذونات؟
اعرض الحل المشروح
افحص تخطيط المعرفات والملكية وحالة القراءة فقط وACL والسياسة الإلزامية. حدد هوية المضيف التي تحاول الكتابة. قد يكشف تغيير نمط عام البيانات دون إصلاح التخطيط أو التركيب.
أهم ما تعلمته
- افحص كل فضاء وكل تركيب مشترك صراحة.
- اجمع ضوابط الهوية والموارد والاستدعاءات والملفات.