أُضيف مستخدم على الخادم، وكُتبت كلمة المرور بشكل صحيح، ومع ذلك ينتهي الاتصال بـ AUTH_FAILED. يفسّر سطر الإضافة السبب عادةً: الكلمة التي تلي مسار الإضافة هي اسم خدمة PAM، وهي التي تحدد أي حزمة من الوحدات تجيب عن السؤال. ليست اسم مستخدم، وليست مؤشرًا إلى ملف كلمات مرور يقرأه OpenVPN بنفسه.

ماذا تختار الكلمة الثانية

يأخذ سطر الإعداد مسار إضافة ووسيطًا واحدًا:

plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn

يُمرَّر ذلك الوسيط إلى مكتبة PAM باسم الخدمة، مما يجعل الحزمة الموجودة في /etc/pam.d/openvpn هي التي تُشغَّل. اكتب login هناك فتحصل بدلًا من ذلك على سياسة تسجيل الدخول التفاعلية، مع الوحدات التي تتضمنها تلك السياسة في توزيعتك.

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

من أين تقرأ الحزمة الحسابات فعليًا

PAM موزِّع. يسرد ملف الخدمة الوحدات بالترتيب، وأول وحدة تستطيع الإجابة تحدد النتيجة. الحزمة التي تستدعي pam_unix تقرأ الحسابات المحلية؛ والحزمة التي تستدعي وحدة LDAP أو RADIUS ترسل بيانات الاعتماد إلى مكان آخر تمامًا.

اقرأ الملف الذي يُحلّ إليه اسم الخدمة، بما في ذلك كل ما يتضمنه:

cat /etc/pam.d/openvpn
grep -H pam_ /etc/pam.d/openvpn /etc/pam.d/common-auth

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

محاولة واحدة، سجلان

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

journalctl -u openvpn-server@server --since "-2 min"
journalctl -t sshd -t sudo --since "-2 min"

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

pamtester openvpn alice authenticate

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

خدمة مخصصة أفضل من تعديل تسجيل الدخول

امنح الـVPN ملف خدمة خاصًا به عندما تختلف متطلباته عن تسجيل الدخول التفاعلي، وهو ما يحدث عادةً. تعديل login أو common-auth يغيّر السياسة لكل برنامج يتضمنهما، والشخص التالي الذي يصلح مشكلة تسجيل دخول غير مرتبطة سيرث تغييرك.

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

ما يرسله العميل، وما لا يرسله

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

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

القبول ذو اتجاهين: ينجح الحساب المقصود، والحساب الذي ينبغي رفضه يظل يفشل. ملف README إضافة auth-pam يوثّق وسيط الخدمة والأنظمة الخلفية التي يمكن أن يتولاها، وهناك مكان تأكيد الترتيب الذي تحاول بنائه.

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