أمن Linux / متقدم: التصميم المقيد والتغيير المتحقق / الدرس 14
مراجعة الوصول إلى الموارد مع مراعاة السباقات
ربط توقيت الفحص والاستخدام ومراجع الدليل الموثوقة وهوية الكائن وواجهات المنصة الذرية.
في هذه الصفحة
أهداف الدرس
- شرح كيف يصبح الفحص الناجح قديما.
- تحديد دليل الوصول المقيد دون فتح مسارات المضيف.
تحديد الحقيقة المتغيرة بين الفحص والاستخدام
يفحص برنامج أن المسار يشير إلى مخرج معتمد، ثم يبحث النص نفسه لاحقا للكتابة. إذا استطاع فاعل آخر تغيير مكون في نطاق الأسماء، فقد يصل البحث الثاني إلى كائن آخر. العيب افتراض استمرار غير مدعوم، وليس مجرد وجود سلسلة رابط رمزي. حدد من يتحكم بكل مكون وسلطة العملية المستخدمة. ينمذج الدرس تغير مرجع قاموس فقط؛ فلا يفتح ملفا أو ينشئ رابطا أو يسابق عملية أو يجري امتيازا أو عملية ملفات على المضيف.
إظهار ملاحظة قديمة دون سباق حي
يسجل البرنامج الأول معرف الكائن المفحوص، ويغير الخريطة المقدمة، ويبين اختلاف بحث الاسم لاحقا. لا يكتب إلى أي كائن وليس استغلال TOCTOU فعليا. يجعل التداخل صريحا حتى يستطيع المراجع شرح فشل السياسة. يحتاج النظام الحقيقي قيودا تدعمها المنصة أو الحصول الذري على المورد بما يناسب نموذج التهديد الدقيق. قد يترك تكرار الفحص الفجوة نفسها. احفظ مرجع الكائن الموثوق وسياسة البحث ودلالات العملية اللاحقة في سجل التصميم.
namespace = {"report-name":"approved-object"}
checked_object = namespace["report-name"]
assert checked_object == "approved-object"
namespace["report-name"] = "other-object"
used_object = namespace["report-name"]
assert used_object != checked_object
print("a repeated name lookup can differ from the checked fixture object")
a repeated name lookup can differ from the checked fixture object
يغير البرنامج الكامل قاموسا مختلقا ويقارن تسميات، دون سباق أو رابط أو ملف أو استغلال. يقدم الدرس التداخل ولا يرصده في Linux.
استخدام القيود الموثقة للمنصة المختارة
تستطيع واجهات Linux النسبية إلى دليل ورايات حل openat2 التعبير عن قيود محددة في نواة تدعمها، لكن تراجع ضماناتها وتركيباتها وأخطاؤها بدقة. السجل الثاني قائمة متطلبات مخصصة، لا شفرة استدعاء. يشترط مرجع بداية موثوقا وسياسة حل مراجعة ونتائج على مستوى الكائن، ولا يستدعي شيئا. لا تساو openat و openat2 و chroot والتوحيد اللفظي وجذر الحاوية كحمايات متبادلة. يعالج التنفيذ الحقيقي غياب الخصائص والأخطاء دون رجوع صامت إلى عملية مسار غير مقيدة.
{"design":"LAB-RESOURCE-ACCESS-1","trustedDirectoryReferenceRequired":true,"resolutionPolicyReviewed":false,"featureSupportVerified":false,"fallbackMustPreserveConstraint":true,"objectOutcomeVerified":false,"syscallExecuted":false}
لا يهيئ JSON استدعاء أو يسمي تركيبة رايات صالحة؛ يسجل الدليل الناقص. لا يفحص خاصية أو واصف دليل أو مسارا أو رجوعا.
مراجعة الإنشاء والاستبدال والتنظيف كأفعال مختلفة
يحتاج التعامل الآمن سياسة للأسماء المؤقتة والإنشاء الحصري ودلالات الاستبدال والملكية والمتانة والتنظيف. قد لا تناسب طريقة فتح مدخل موجود إنشاء مخرج جديد أو استبدال نتيجة ذريّا. لا تختلق خوارزمية ملفات مؤقتة آمنة عامة أو تجرب المضيف في المساق. استخدم بدائيات مكتبة أو منصة مراجعة في التطبيق، واحفظ ملكية الموارد المنشأة بوضوح. لا يحذف التنظيف ملفات عمل آخر لمجرد تشابه الاسم. احفظ ثوابت الحالة عند فشل أي خطوة.
فحص الكائن المقصود وثابت الفشل
يضبط اختبار معزول مصرح به تغيرات نطاق الأسماء المناسبة، ويشمل وصولا مشروعا، ويفحص الكائن الفعلي وما بقي دون تغيير عند الرفض. سجل دعم المنصة وسلوك المسار البديل. لا يكفي تأكيد نص أو سجل فحص مسبق. لم ينفذ هنا اختبار ملفات أو تزامن. يثبت النموذج إبطال المرجع المتغير للاستمرار فقط، ويحفظ JSON دليل الآلية المنتظر. يساعد الفرق اختيار تنفيذ آمن محدد دون خلط التداخل التعليمي ومقاومة سباق Linux المتحققة.
الأخطاء الشائعة وإصلاحها
يجب أن يبلغ البحث الثاني المفحوص
- لماذا يحدث؟
- تفترض الأسماء ثابتة.
- كيف تصلحه؟
- استخدم تصميما مقيدا أو ذريّا مراجعا.
- كيف تتجنب تكراره؟
- اختبر الهوية والأثر بتداخل مضبوط.
يرجع غياب القيد لفتح عادي
- لماذا يحدث؟
- يضعف الفشل الخاصية بصمت.
- كيف تصلحه؟
- حدد رجوعا يحفظ الحد أو يرفض.
- كيف تتجنب تكراره؟
- راجع الدعم ومسارات الخطأ.
يحذف التنظيف كل اسم مطابق
- لماذا يحدث؟
- تستنتج الملكية من الشكل.
- كيف تصلحه؟
- تتبع المملوك ونطاق التنظيف.
- كيف تتجنب تكراره؟
- افحص ثبات غير المتعلق.
اختبر فهمك
1. لماذا لا يزيل فحص المسار مرتين الفجوة آليا؟
اعرض الحل المشروح
قد تصبح نتيجة كل فحص قديمة قبل تنفيذ العملية اللاحقة إذا ظل نطاق الأسماء قابلا للتغيير. يجب أن يثبت التصميم العلاقة المطلوبة بالمورد عند حد الاستخدام الفعلي، باستخدام بدائيات تدعمها المنصة. يوضح تمرين القاموس هذا الافتراض فقط، ولا يجري سباقا أو عملية ملفات على المضيف.
2. غابت واجهة مقيدة. ماذا ترفض المراجعة؟
اعرض الحل المشروح
ترفض رجوعا صامتا لبحث غير مقيد مع الضمان نفسه. حدد بديلا مدعوما أو رفضا موثقا وفق المتطلب. افحصه ببيئة مصرح بها واحفظ قيد المنصة.
أهم ما تعلمته
- تحدد الحقيقة المتغيرة بين الفحص والاستخدام.
- تحتاج البدائيات ضمانا وفشلا دقيقين.
- تهم نتيجة الكائن أكثر من تكرار فحص النص.