أمن Linux / أساسي: الهوية والموارد والأدلة / الدرس 4
مراجعة المسارات والروابط وهوية المورد
فصل نص المسار عن حل النواة وهوية الكائن وحدود الدليل الموثوقة.
في هذه الصفحة
أهداف الدرس
- شرح قصور بادئة السلسلة عن إثبات احتواء الملفات.
- حفظ افتراض الروابط وتغير المسار دون الوصول لنظام المضيف.
معاملة المسار كطلب بحث
يفسر المسار من دليل بداية أو جذر عبر مكونات ضمن سياق العملية. قد تغير المسارات النسبية ومساحات أسماء التركيب والروابط الرمزية وأذونات الأدلة والتغييرات المتزامنة الكائن الذي يصل إليه. لا يثبت النص الذي يبدو داخليا كائنا موثوقا. استخدم نموذج حل المسار في Linux لتحديد الدليل الموثوق وما يستطيع التغير أثناء البحث. يستخدم الدرس مسارات مختلقة فقط، ولا يحل أو يفحص أو يفتح أو ينشئ أو يزيل أو يعدل مسارا أو رابطا أو تركيبا أو جهازا حقيقيا على المضيف.
مقارنة المكونات دون ادعاء الاحتواء
قد يخلط اختبار بادئة خام بين /lab/reports-old و/lab/reports. يوضح البرنامج الأول الخطأ ويفحص تساوي المكونات لمسار ثابت باستخدام PurePosixPath ، الذي لا يصل إلى الملفات. إنه توضيح لفظي، لا مدقق أمن. لا يعالج الروابط الحقيقية أو التركيبات أو السباقات أو كل تمثيلات المدخل المقبولة. حتى تطابق المكونات يثبت شكل النص فقط. يحتاج الإنتاج واجهة مراجعة نسبية إلى دليل وسياسة حل تدعمها المنصة الفعلية، مع تحقق مستقل من افتراضاتها.
from pathlib import PurePosixPath
base = PurePosixPath("/lab/reports")
candidate = PurePosixPath("/lab/reports-old/out.txt")
assert str(candidate).startswith(str(base)) is True
assert candidate.parts[:len(base.parts)] != base.parts
inside_text = PurePosixPath("/lab/reports/out.txt")
assert inside_text.parts[:len(base.parts)] == base.parts
print("raw prefix and lexical components answer different questions")
raw prefix and lexical components answer different questions
يجري البرنامج الكامل عمليات نص PurePosixPath فقط دون بحث ملفات. لا يثبت التطابق الأخير بقاء الكائن المحلول داخل دليل أو امتلاكه الملكية والأذونات المطلوبة.
توضيح تغيير الاسم البديل للكائن المقصود
ينمذج البرنامج الثاني اسما بديلا معلنا من مسار يبدو داخل شجرة التقارير إلى كائن تدريب مختلف. هو بحث قاموس، لا محلل روابط رمزية. يظهر سؤال الثقة: من يستطيع التحكم بالمكون أو الهدف بين التحقق والاستخدام؟ لا يثبت مساعد توحيد مسار هذه الحقائق. تختلف الروابط الصلبة والرمزية والتركيبات الرابطة ورؤى مساحات الأسماء، ولا تختزل إلى تحويل عام واحد. سجل الآلية الدقيقة للتصميم الحقيقي قبل اختيار دفاع.
aliases = {"/lab/reports/current":"object-outside-report-scope"}
requested = "/lab/reports/current"
assert requested.startswith("/lab/reports/")
reached = aliases[requested]
assert reached == "object-outside-report-scope"
assert reached != "approved-report-object"
print("inside-looking text does not establish modeled object identity")
inside-looking text does not establish modeled object identity
يستخدم البرنامج الكامل سلاسل وخريطة مختلقتين دون إنشاء رابط أو اتباع مسار. يثبت حد الادعاء النصي، لا خروجا فعليا من نظام ملفات أو عيبا في منتج.
تضييق سلطة الدليل الموثوق
يحدد تصميم التعامل مع الملفات مرجع الدليل الموثوق ومن يستطيع تعديل نطاق الأسماء وخصائص الحل المسموحة. يوفر Linux واجهات نسبية إلى دليل وضوابط أدق في النواة التي تدعمها؛ ويجب فحص الدعم والدلالات الدقيقة للبيئة المختارة. لا تعلم تسلسلا عاما من فحص ثم فتح على أنه مقاوم للسباق. قد يقدم فحص ناجح لمسار قبل بحث لاحق. استخدم بدائيات منصة موثقة في تنفيذ مراجع، لا منقح سلاسل منزليا. لم ينفذ المساق وصول موارد أو سلوك استدعاء نظام فعليا.
فحص نتائج الكائن في بيئة مصرح بها
اختبر أسماء مشروعة ثابتة وبادئات شقيقة ومكونات أبوية وصيغا غير مدعومة وأسماء بديلة وتغيرات نطاق أسماء مضبوطة في البيانات المعتمدة المناسبة. تحقق من الكائن الفعلي وعدم تغير الحالة المحمية عند الرفض، لا من النص المقبول فقط. افصل الملكية والأذونات والسياسة الإلزامية عن التحقق اللفظي. تثبت الأمثلة خصائص النص والخريطة المعلنة فقط، ولا تشهد احتواء أو تقوي تطبيقا حقيقيا. سم ما فحصه النموذج وحدود حل النواة والتزامن التي ما زالت تحتاج دليلا.
الأخطاء الشائعة وإصلاحها
تثبت startswith الاحتواء
- لماذا يحدث؟
- يخلط التشابه وحل الكائن.
- كيف تصلحه؟
- استخدم تصميما منصيا مراجعا وافحص النتيجة.
- كيف تتجنب تكراره؟
- وضح حدود الفحص النصي.
يثبت التوحيد ثبات المسار
- لماذا يحدث؟
- تهمل سلطة الأسماء والتوقيت.
- كيف تصلحه؟
- راجع الروابط والمكونات والوصول الذري.
- كيف تتجنب تكراره؟
- اختبر التغير المضبوط في بيانات معتمدة.
يسمى مثال القاموس اختبار خروج فعليا
- لماذا يحدث؟
- يخلط النموذج والتنفيذ.
- كيف تصلحه؟
- حدد الخريطة وحد المنصة غير المنفذ.
- كيف تتجنب تكراره؟
- افصل الدليل الفعلي والتوضيحي.
اختبر فهمك
1. لماذا تمر reports-old من بادئة reports ؟
اعرض الحل المشروح
لا تتضمن البادئة حد مكون. يكشف المثال اللفظي الجار، لكن لا تثبت المقارنة الصحيحة الاحتواء الفعلي مع بقاء الحل والروابط والتركيب والسباق خارج النموذج.
2. فحص المسار قبل فتحه. ما المجهول؟
اعرض الحل المشروح
هل بلغت العملية اللاحقة الكائن نفسه ضمن الأسماء والاعتماد الموثوقين؟ قد يبطل مكون متغير الفحص. لا تجرب المضيف؛ حدد تصميما ذريّا أو مقيدا تدعمه المنصة وخطط تحققا مصرحا به مستقلا.
أهم ما تعلمته
- المسار النصي ليس هوية مورد كاملة.
- لا تثبت المقارنة اللفظية احتواء النواة.
- تحتاج سلطة الأسماء والتوقيت تصميما صريحا.