يبدو تشفير القرص والتركيب بنظام nosuid كتنويعين على الفكرة نفسها، وهما غير مرتبطين على الإطلاق. أحدهما يحمي البيانات في حالة السكون، والآخر يقرر ما إذا كانت النواة ستحترم بت الامتياز في اللحظة التي يبدأ فيها البرنامج. المساعد الذي لا يستطيع الوصول إلى الهوية التي يتوقعها يشكو من الثاني. والافتراض بأن الأول هو المسؤول يدفع الناس إلى إعادة تثبيت عملاء لم يكونوا معطوبين قط.

خاصيتان غير مرتبطتين

يجيب تشفير القرص عن سؤال من يمكنه قراءة الكتل حين تكون الآلة مطفأة. ويجيب خيار التركيب عن سؤال ما ستفعله النواة ببتات النمط الخاصة بالملف عند تنفيذه. ولا شيء في الأول يقيد الثاني، ويمكن لحاسوب محمول مشفر بالكامل أن يركب نظام ملفات وكل القيود مطبقة.

قراءة الاثنين كخاصية واحدة هي ما ينتج النظرية القائلة إن المنزل المشفر يمنع الوصول إلى الجذر. وتظل تلك النظرية قائمة لأن العَرَضين يظهران على الآلة نفسها، لا لأنهما يتشاركان سببًا واحدًا.

ما الذي يكبت الانتقال فعلًا

يصف مرجع execve كيف يغير ملف تنفيذي من نوع set-user-ID الهوية الفعلية للعملية الجديدة إلى مالك الملف. وتدرج الصفحة نفسها الشروط التي تكبت ذلك الانتقال والشروط المكافئة لها بالنسبة لمعرفات المجموعات: إعداد no_new_privs، ونظام ملفات مركب بـ nosuid، وعملية يجرى تتبعها. ويجري تجاهل قدرات الملف في الظروف نفسها. وتغطي تلك القواعد الأربع تقريبًا كل تقرير من هذا النوع.

تشرح تلك القائمة لماذا لا يكون النمط الذي يطبعه ls هو قصة التصريح كاملة. ولا تخبرك أي شرط تسبب في رسالة فشل معينة، وقد يبلغ التطبيق عن عملية اعتماد غير مرتبطة بالصياغة نفسها. احتفظ بالبرنامج والمشغل وتسلسل الخطأ بدقة قبل استخلاص أي نتيجة.

حدد الملف التنفيذي الذي ثبته الحزمة المدعومة، ومالكه، ومساره الحقيقي، وسياسة نظام الملفات الذي يحتويه. النسخة الموجودة في مجلد التنزيلات ليست المساعد المثبت، مهما قال نمطها.

ما لا ينبغي فعله حيال ذلك

ضبط بتات set-user-ID على برنامج لم يجر التحقق منه ونقله من مكان إلى آخر حتى تختفي القيود ليس إصلاحًا. فهو يستبدل سياسة لم تفهمها بامتياز لا يمكنك تدقيقه، والتقنية نفسها عند تطبيقها على مساعد هي مسار تصعيد معروف. وإزالة nosuid من نقطة تركيب أسوأ، لأنها تؤثر في كل برنامج على ذلك النظام، لا في برنامج واحد فقط.

المسار المدعوم هو التثبيت الموثق للمساعد أو الخدمة من جانب العميل، وينفذه مدير، ويضع الملف التنفيذي حيث تتوقع السياسة. وهذا يحافظ على آلية امتياز واحدة بدلًا من آليتين.

تأكيد سياق التشغيل الحقيقي

بعد تصحيح مصرح به، شغل المساعد بالطريقة التي يشغله بها المنتج بدلًا من shell يعمل بصلاحيات الجذر. فالنجاح بصلاحيات الجذر لا يثبت شيئًا عن المسار الذي يسلكه مستخدم عادي، والفرق بين هذين السياقين هو بالضبط ما كان الفشل بشأنه.

ثم تأكد من عملية الشبكة التي يوجد المساعد من أجلها. فالمساعد الذي يبدأ لكنه لا يستطيع تهيئة الواجهة قد نقل المشكلة مرحلة إلى الأمام، ولم يحلها.

findmnt -no TARGET,OPTIONS /home
getcap /usr/libexec/openvpn-helper 2>/dev/null; ls -l /usr/libexec/openvpn-helper

سجل خيارات التركيب وملكية المساعد في الملاحظة نفسها. وإلا فإن الشخص التالي الذي سيصلح هذا سيعيد نظرية التشفير من البداية.

مقالات ذات صلة