إن إضافة --csd-wrapper إلى ملف تعريف تسلّم سكربتًا محليًا إلى برنامج خفي يشغّله أثناء تسجيل الدخول، لذا فالقرار المطروح أمامك هو مراجعة شيفرة وليس مفتاح تفضيل. الخيار موجود كي يمكن استبدال مكوّن فحص المضيف في البوابة، وهو يأخذ مسارًا إلى سكربت توفّره أنت. كل ما يلي يفترض أن مالك النشر حدّد بالفعل أي فحص وضعية مطلوب، وإذا كان هذا الجزء ما زال مفتوحًا فأنجزه أولًا. يتضمّن دليل التشغيل أربع خطوات: تحديد المرحلة الفاشلة، وقراءة السكربت، واختيار الهوية التي يعمل بها، وإثبات النتيجة.

الخطوة 1: حدّد المرحلة التي فشلت

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

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

openconnect --version
openconnect --verbose --user="$VPN_USER" vpn.example.com </dev/null

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

الخطوة 2: اقرأ السكربت قبل أن يدخل ملف تعريف

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

sha256sum ./vpn-csd-wrapper.sh
bash -n ./vpn-csd-wrapper.sh

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

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

grep -nE 'base64 -d|xxd -r|eval |curl |wget ' ./vpn-csd-wrapper.sh

الخطوة 3: اختر الهوية التي يعمل بها السكربت الغلاف

يخفض --csd-user الصلاحيات أثناء تنفيذ برنامج CSD أو TNCC أو HIP. ذلك الحساب جزء من ترتيب التنفيذ المحلي، وليس اسم المستخدم المقدّم إلى البوابة.

امنح السكربت الغلاف حسابًا مخصّصًا بلا صدفة تفاعلية، وبلا حقوق sudo، وبلا عضويات مجموعات لا يحتاجها. امنح حق القراءة للسكربت وللملفات المحددة التي يفحصها، ثم اختبر تخفيض الصلاحيات قبل أن تلمس ملف تعريف VPN. العثور على المشكلة هنا أرخص من العثور عليها داخل العميل.

sudo -u vpn-csd /usr/local/libexec/vpn-csd-wrapper.sh

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

الخطوة 4: اجعل التغيير قابلًا للتراجع

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

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

بعد طرح ناجح، افحص أمرين لا أمرًا واحدًا: أن يأتي النفق، وأن الجهاز الذي ينبغي أن يفشل في فحص الوضعية يظل مرفوضًا. الاتصال الذي يعمل للجميع ليس دليلًا على أن التقييم نجا من تغييرك.

اختصارات تخلق مشكلة ثانية

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

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

يوثّق دليل OpenConnect كلا من --csd-wrapper و --csd-user على نحو منفصل، وهذه هي الإشارة المهمة: السكربت والهوية قراران. راجعهما منفصلين واكتب كليهما. حينها يتوقف موجه تسجيل الدخول عن كونه لغزًا تحلّه بلصق الشيفرة.

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