تمت كتابة الكثير من الأدلة حول OpenVPN ، بما في ذلك التفويض من خلال Active Directory. معظمهم يتلخص في استخدام LDAP ، لم أجد منهجًا يستخدم Kerberos ، وهو مكتوب في مقالة كاملة. ومع ذلك ، لن يتم اختراع شيء جديد هنا ، لقد قمت فقط بتجميع ما تم فعله من قبل ، PAM يعمل بشكل جيد مع Kerberos ، و OpenVPN يحتوي على ملحق PAM أصلي. قررت أيضًا التخلي عن شهادات المستخدم ونصائحه ، حيث يوصون ببساطة بأن يصدر جميع المستخدمين شهادة واحدة ، لا يناسبني ، لذلك تم العثور على حل آخر يعمل على جميع العملاء.

قليلا عن NSS
في حالتي ، استخدمت Centos 7 مع sssd. ومع ذلك ، لا شيء يمنع استخدام winbind. الشيء الرئيسي هو امتلاك سيارة في المجال وتذكرة Kerberos. لن أكتب عن كيفية القيام بذلك ، لأنه لن أقول أي شيء جديد ، فهناك الكثير من الأدلة الجيدة على الشبكة.
سيكون من الضروري تغيير إعدادات
/etc/nsswitch.conf
إذا لم يتم ذلك من قبل. اعتمادًا على الوحدة النمطية التي تم استخدامها ، تحتاج إلى إدخال
sss أو winbind بدلاً من module_name ، على التوالي. يمكن قراءة وصف المعلمة باستخدام
man nsswitch.conf
.
يجب أن تكون الإعدادات التالية كافية:
passwd: files module_name shadow: files module_name group: files module_name
في حالة sssd ، لا ننسى ، من بين أشياء أخرى ، أنه في
/etc/sssd/sssd.conf
في
/etc/sssd/sssd.conf
[sssd] ، يجب ذكر nss:
services = nss, pam
بالنسبة لـ winbind ، من الصعب علي أن أقول شيئًا ، لم أستخدمه.
الهدف النهائي هو الحصول على النتيجة الصحيحة من getent. تحقق من أن الجهاز يمكنه تلقي معلومات حول مستخدمي المجال ومجموعاته:
> getent passwd kanlas kanlas:*:14123583:1257570:Kanlas Kanlasovich:/home/kanlas@example.com:/bin/bash > getent group VPN vpn:*:13821391:kanlas,igor,marina
تعليقإذا استخدمت sssd وتم الحصول على بيانات المستخدم فقط بالاسم الكامل (أي kanlas@example.com) ، فأضف use_fully_qualified_names = False
معلمة use_fully_qualified_names = False
في sssd.conf في كتلة المجال
تكوين PAM
أنت الآن بحاجة إلى إنشاء وحدة PAM الخاصة بك. حتى لا نستخدم نظام access.conf ، سننشئ ملفًا منفصلًا يتم من خلاله قراءة مجموعة الوصول. لست جيدًا في وحدات PAM ، لذا لا يمكنني القول ما إذا كانت جميع الخطوط مطلوبة في المثال أدناه. بشكل عام ، نحن مهتمون فقط
account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/openvpn/auth/access-groups
.
الخيار الأسهل هو اتخاذ ، على سبيل المثال ، وحدة تسجيل الدخول وإضافة السطر المطلوب إليها. الذي تم القيام به.
نحصل على:
#%PAM-1.0 auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so auth substack system-auth auth include postlogin account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/openvpn/auth/access-groups account include system-auth password include system-auth session required pam_selinux.so close session required pam_loginuid.so session optional pam_console.so session required pam_selinux.so open session required pam_namespace.so session optional pam_keyinit.so force revoke session include system-auth session include postlogin -session optional pam_ck_connector.so
وضعناها في
/etc/pam.d
،
/etc/pam.d
حسب تقديرنا.
في
/etc/openvpn/auth/access-groups
، المحددة في الوحدة ، سيتم كتابة مجموعة الوصول هنا ، يمكنك تحديد المسار الخاص بك إذا كنت ترغب في ذلك. ستحتاج إلى تحديد اسم المجموعة (الاسم الشائع) مع المجال. في حالتي ، كتبت
VPN@example.com هناك.
يبقى أن نوضح لـ OpenVPN أنه يحتاج إلى استخدام PAM. نضع الأسطر التالية في تكوين الخادم:
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so __pam username-as-common-name
توزيعات مختلفة قد يكون لها مسارات مختلفة! تحقق من وجود ملف حسب المسار أو استخدم find.يرجع استخدام معلمة اسم المستخدم الشائع إلى حقيقة أنه بعد ذلك ، بعد أن يحصل العميل على تصريح مستخدم ،
سيتم إرسال الاسم المحدد في الشهادة إلى الخادم.في تكوين العميل ، أضف السطر
auth-user-pass
على هذا الإعداد اكتمال ، يمكنك اختبار.
نزيل شهادة المستخدم
الآن لدينا ترخيص من خلال المجال وشهادة المستخدم غير مجدية ، والتخلي عنها يبدو كقرار منطقي. لكن عملاء الأجهزة المحمولة يعانون من مشاكل في هذا الأمر ، ببساطة لا يقبلون مثل هذا التكوين ، كما أن عملاء سطح المكتب ، على الرغم من أنهم يعملون ، يسبون ضارًا. أولاً ، سنقوم بإعادة تكوين الخادم بحيث لا يحتاج إلى شهادة.
verify-client-cert none
بعد ذلك ، نضيف إلى تكوين العميل
setenv CLIENT_CERT 0
هذا كل شيء ، والآن لن يقسم العملاء على الشهادة. من المضحك أن هذا الخيار مخفي في قسم
الأسئلة والأجوبة لنظام iOS . لم أختبر على نظام التشغيل iOS ، ولكن أندرويد ، وكذلك نظام MacOS (الإصدار
التجريبي من العميل ) ونظام التشغيل Windows يقبل هذه الإعدادات مع اثارة ضجة. لا يمكن
لعميل OpenVPN لجهة خارجية فقط على Android القيام بذلك بعد (بحلول وقت كتابة هذا المقال ، كان بإمكانهم إصلاحه بالفعل).