توفر وحدة Yubico PAM طريقة سهلة لدمج YubiKey في البنية الأساسية لمصادقة المستخدم الحالية لديك. يتم استخدام PAM بواسطة GNU/Linux، وSolaris، وMac OS X لمصادقة المستخدم، ومن خلال تطبيقات متخصصة أخرى مثل NCSA MyProxy.
تعمل الوحدة مع أنظمة متعددة المستخدمين. الوضع الأساسي للتشغيل هو إجراء التحقق عبر الإنترنت باستخدام خدمة التحقق من صحة YubiKey (مثل YubiCloud، أو خدمة خاصة تم تكوينها باستخدام المعلمة "urllist").
في الإصدار 2.6، أصبح التحقق دون الاتصال بالإنترنت ممكنًا أيضًا من خلال استخدام HMAC-SHA1 Challenge-Response الموجود في YubiKey 2.2 والإصدارات الأحدث. أدى هذا إلى ظهور تبعية libykpers-1 من حزمة ykpersonalize. قم بتمرير --without-cr
configure
لتجنب هذه التبعية.
يتم تنسيق مجتمع التطوير عبر صفحة مشروع GitHub.
المشروع مرخص بموجب ترخيص BSD. راجع نسخ الملف لمعرفة الصياغة الدقيقة. بالنسبة لأي نطاق من سنوات حقوق الطبع والنشر محدد كـ YYYY-ZZZZ في هذه الحزمة، لاحظ أن النطاق يحدد كل عام في تلك الفترة المغلقة.
انتقل إلى القسم التالي إذا كنت تستخدم إصدارًا رسميًا مُعبأًا.
يمكنك التحقق من المصادر باستخدام Git باستخدام الأمر التالي:
استنساخ $ git https://github.com/Yubico/yubico-pam.git
سيؤدي هذا إلى إنشاء الدليل yubico-pam
.
يجب تثبيت Autoconf وautomake وlibtool وasciidoc وxsltproc وdocbook-xsl لإنشاء شجرة مصدر قابلة للتجميع.
إنشاء نظام البناء باستخدام:
$ مؤتمر نزع السلاح يوبيكو بام $ autoreconf - تثبيت
سوف تحتاج إلى تثبيت libykclient (ykclient.h, libykclient.so) و libpam-dev (security/pam_appl.h, libpam.so). وهو بدوره يتطلب cURL، الذي تحتاج إلى تثبيته، وlibyubikey.
تتطلب مصادقة التحدي والاستجابة دون الاتصال بالإنترنت libykpers-1 من مشروع تخصيص yubikey:
تتطلب الاختبارات الذاتية لغة Perl مع تثبيت الوحدة النمطية Net::LDAP::Server.
يستخدم نظام البناء Autoconf لإعداد تشغيل نظام البناء:
./تكوين
استخدم --without-ldap لتعطيل دعم ldap.
ثم أنشئ الكود، وقم بإجراء الاختبار الذاتي، ثم قم بتثبيت الثنائيات:
جعل التحقق من التثبيت
توجد بالفعل حزمة في Fedora/EPEL لـ yubico-pam يمكن تثبيتها باستخدام yum:
$ sudo yum install pam_yubico
يوجد Ubuntu PPA (أرشيف الحزمة الشخصية) لـ yubico-pam والذي يمكن تثبيته باستخدام الأوامر التالية على منصات Ubuntu الحديثة بشكل معقول:
$ sudo add-apt-repository ppa:yubico/stable $ sudo apt-get update $ sudo apt-get install libpam-yubico
راجع الملف /usr/share/doc/libpam-yubico/README.Debian
بعد التثبيت.
تحتوي حزم yubico-pam وحزم Yubico الداعمة على منافذ FreeBSD المقابلة. للتثبيت:
$ cd /usr/ports/security/pam_yubico $ جعل التثبيت نظيفًا
ملاحظات التكوين المتقدمة متاحة هنا.
قم بتثبيته في إعداد PAM الخاص بك عن طريق إضافة سطر إلى الملف المناسب في /etc/pam.d/
:
مصادقة كافية pam_yubico.so id = تصحيح أخطاء [معرف عميل API الخاص بك].
وانقل pam_yubico.so إلى /lib/security/ (أو أينما توجد وحدات PAM في نظامك):
mv /usr/local/lib/security/pam_yubico.so /lib/security/
لمزيد من المعلومات، راجع وثائق المشروع.
معلمات وحدة PAM المدعومة هي:
authfile | للإشارة إلى موقع الملف الذي يحتفظ بتعيينات معرفات رمز YubiKey المميز لأسماء المستخدمين. |
بطاقة تعريف | معرف عميل API الخاص بك في خادم التحقق من صحة Yubico. إذا كنت تريد استخدام خدمة YubiCloud الافتراضية، فانتقل إلى هنا. |
مفتاح | للإشارة إلى مفتاح العميل الخاص بك بتنسيق base64. يُعرف مفتاح العميل أيضًا باسم مفتاح API، ويوفر التكامل في الاتصال بين العميل (أنت) وخادم التحقق من الصحة. إذا كنت ترغب في الحصول على واحدة للاستخدام مع خدمة YubiCloud الافتراضية، فانتقل هنا. |
تصحيح | لتمكين إخراج التصحيح. |
debug_file | اسم الملف المراد كتابة التصحيح إليه، يجب أن يكون الملف موجودًا وأن يكون ملفًا عاديًا. stdout هو الافتراضي. |
موافق دائمًا | لتمكين جميع محاولات المصادقة من النجاح (المعروف أيضًا باسم وضع العرض التقديمي). |
Try_first_pass | قبل مطالبة المستخدم بكلمة المرور الخاصة به، تحاول الوحدة أولاً تجربة كلمة مرور الوحدة المكدسة السابقة في حالة استيفاء هذه الوحدة أيضًا. |
use_first_pass | تجبر الوسيطة use_first_pass الوحدة على استخدام كلمة مرور الوحدات المكدسة السابقة ولن تطالب المستخدم أبدًا - إذا لم تتوفر كلمة مرور أو كانت كلمة المرور غير مناسبة، فسيتم رفض وصول المستخدم. |
Always_prompt | إذا تم تعيينه، فلا تحاول إجراء بحث لتحديد ما إذا كان المستخدم قد تم تكوين YubiKey أم لا، بل اطلب واحدًا بغض النظر عن الأمر. يعد هذا مفيدًا في حالة تمكين ldap_bind_as_user ولكن يتم استخدام هذه الوحدة لقراءة كلمة مرور المستخدم (في سيناريو مصادقة YubiKey+OTP). |
nullok | في حالة التعيين، لا تفشل عندما لا تكون هناك رموز مميزة معلنة للمستخدم في ملفات تعيين التفويض أو في LDAP. يمكن استخدام هذا لجعل مصادقة YubiKey اختيارية ما لم يكن لدى المستخدم رموز مميزة مرتبطة. |
ldap_starttls | في حالة التعيين، قم بإصدار أمر STARTTLS لاتصال LDAP قبل محاولة الارتباط به. يعد هذا إعدادًا شائعًا للخوادم التي تستمع فقط على المنفذ 389 ولكنها لا تزال تتطلب TLS. |
ldap_bind_as_user | في حالة التعيين، استخدم المستخدم الذي يقوم بتسجيل الدخول للربط بـ LDAP. سيستخدم هذا كلمة المرور التي قدمها المستخدم عبر PAM. إذا تم تعيين هذا، فيجب أيضًا تعيين ldapdn وuid_attr. سيؤدي تمكين هذا إلى تجاهل "ldap_bind_user" و"ldap_bind_password" |
قائمة URL | قائمة قوالب URL التي سيتم استخدامها. يتم ضبط ذلك عن طريق استدعاء ykclient_set_url_bases. يجب أن تكون القائمة بالتنسيق: |
عنوان URL | لا ينبغي استخدام هذا الخيار، يرجى استخدام خيار قائمة url بدلاً من ذلك. حدد قالب عنوان URL المراد استخدامه، ويتم تعيين ذلك عن طريق استدعاء yubikey_client_set_url_template، والذي يكون افتراضيًا على: |
كاباث | تحديد المسار حيث يتم تخزين شهادات X509. يعد هذا مطلوبًا في حالة استخدام "https" أو "ldaps" في "url" و"ldap_uri" على التوالي. |
com.cainfo | خيار للسماح باستخدام حزمة CA بدلاً من المسار. |
الوكيل | تحديد وكيل للاتصال بخادم التحقق من الصحة. المخططات الصالحة هي http://، https://، Socks4://، Sock4a://، Socks5:// أو Socks5h://. يطلب Socks5h من الوكيل حل نظام أسماء النطاقات. إذا لم يتم تحديد أي مخطط أو منفذ، فسيتم استخدام منفذ وكيل HTTP رقم 1080. |
Verbose_otp | يتم استخدام هذه الوسيطة لإظهار OTP (كلمة المرور لمرة واحدة) عند إدخالها، أي لتمكين الصدى الطرفي للأحرف المدخلة. يُنصح بعدم استخدام هذا، إذا كنت تستخدم المصادقة الثنائية لأن ذلك سيعرض كلمة المرور الخاصة بك على الشاشة. يتطلب هذا أن تستخدم الخدمة وحدة PAM لعرض الحقول المخصصة. لا يمكن استخدام هذا الخيار مع OpenSSH. |
ldap_uri | حدد URI لخادم LDAP (على سبيل المثال ldap://localhost). |
ldapserver | حدد مضيف خادم LDAP (يتم استخدام منفذ LDAP الافتراضي). مهمل. استخدم "ldap_uri" بدلاً من ذلك. |
ldapdn | حدد الاسم المميز الذي يتم تخزين المستخدمين فيه (على سبيل المثال: ou=users,dc=domain,dc=com). |
ldap_clientcertfile | المسار إلى ملف شهادة العميل لاستخدامه عند التحدث إلى خادم LDAP. لاحظ أن هذا يتطلب تعيين "ldap_clientkeyfile" أيضًا. |
ldap_clientkeyfile | المسار إلى المفتاح الذي سيتم استخدامه مع شهادة العميل عند التحدث إلى خادم LDAP. لاحظ أن هذا يتطلب تعيين "ldap_clientcertfile" أيضًا. |
ldap_bind_user | المستخدم لمحاولة ربط LDAP باسم. |
ldap_bind_password | كلمة المرور المستخدمة في ربط LDAP. |
ldap_filter | مرشح LDAP لاستخدامه في محاولة العثور على الكائن الصحيح في LDAP. في هذه السلسلة |
ldap_cacertfile | ملف شهادة CA لاتصال LDAP. |
user_attr | تحديد سمة LDAP المستخدمة لتخزين أسماء المستخدمين (على سبيل المثال:cn). |
yubi_attr | حدد سمة LDAP المستخدمة لتخزين معرف YubiKey. |
yubi_attr_prefix | حدد بادئة قيمة سمة LDAP، في حالة السمة العامة، المستخدمة لتخزين عدة أنواع من المعرفات. |
token_id_length | طول المعرف الذي يسبق كلمة المرور لمرة واحدة (وهو 12 في حالة استخدام YubiCloud). |
وضع | طريقة التشغيل. استخدم "العميل" للتحقق من الصحة عبر الإنترنت من خلال خدمة التحقق من صحة YubiKey مثل YubiCloud، أو استخدم "الاستجابة للتحدي" للتحقق من الصحة دون اتصال باستخدام YubiKeys مع تكوينات التحدي والاستجابة لـ HMAC-SHA-1. راجع صفحة الدليل ykpamcfg(1) للحصول على مزيد من التفاصيل حول كيفية تكوين التحقق من صحة التحدي والاستجابة دون اتصال. |
chalresp_path | الدليل المُستخدم لتخزين ملفات الاختبار في حالة التكوين على مستوى النظام (على عكس ملفات الاختبار التي يتم تخزينها في الدليل الرئيسي للمستخدم). يجب أن يكون هذا الموقع قابلاً للقراءة والكتابة فقط بواسطة الجذر. راجع |
mysql_server | اسم المضيف/عنوان خادم mysql الذي سيتم استخدامه لرسم الخرائط. |
mysql_port | منفذ الشبكة لخادم MySQL |
mysql_user | المستخدم للوصول إلى قاعدة بيانات MySQL. |
mysql_password | كلمة المرور لمستخدم MySQL |
mysql_database | قاعدة بيانات Mysql المستخدمة. |
إذا كنت تستخدم "debug" فقد تجد أنه من المفيد إنشاء ملف سجل قابل للكتابة عالميًا:
touch /var/run/pam-debug.log
chmod go+w /var/run/pam-debug.log
ملحوظة | يرجى تذكر أن الوصول الفعلي إلى الأنظمة غالبًا ما يسمح بالتحايل على الضوابط الأمنية. إذا كان لدى المهاجم إمكانية الوصول الفعلي إلى النظام الخاص بك (مثل جهاز كمبيوتر محمول متروك في غرفة فندق) ويمكنه التمهيد في وضع المستخدم الفردي، فيمكنه تعطيل yubico-pam في تكوين النظام الخاص بك. |
يجب إجراء التعيين بين معرف رمز YubiKey ومعرف المستخدم المرفق به. هناك طريقتان للقيام بذلك، إما مركزيًا في ملف واحد، أو بشكل فردي، حيث يمكن للمستخدمين إنشاء التعيين في الدلائل الرئيسية الخاصة بهم. إذا تم استخدام ملف تعيين التفويض المركزي، فلن يتم استخدام تعيينات الدليل الرئيسي للمستخدم، وينطبق العكس إذا تم استخدام تعيينات الدليل الرئيسي للمستخدم، فلن يتم استخدام ملف تعيينات التفويض المركزي.
قم بإنشاء /etc/yubikey_mappings
، يجب أن يحتوي الملف على اسم مستخدم ومعرف رمز YubiKey المميز مفصولاً بنقطتين (نفس تنسيق ملف passwd) لكل مستخدم تريد السماح له بالدخول إلى النظام باستخدام YubiKey.
يجب أن تبدو التعيينات كما يلي، واحدة في كل سطر:
<اسم المستخدم الأول>:<معرف رمز YubiKey المميز>:<معرف رمز YubiKey المميز>2>:.... <اسم المستخدم الثاني>:<رمز YubiKey ID3>:<رمز YubiKey ID4>:....
أضف الآن authfile=/etc/yubikey_mappings
إلى سطر تكوين PAM الخاص بك، بحيث يبدو كما يلي:
مصادقة كافية pam_yubico.so id=[معرف عميل API الخاص بك] authfile=/etc/yubikey_mappings
يقوم كل مستخدم بإنشاء ملف ~/.yubico/authorized_yubikeys
داخل الدليل الرئيسي الخاص به ويضع التعيين في هذا الملف، ويجب أن يحتوي الملف على سطر واحد فقط:
<اسم المستخدم>:<رمز YubiKey ID1>:<رمز YubiKey ID2>
هذا هو نفس مفهوم ملف SSH Author_keys.
يمكنك الحصول على معرف رمز YubiKey بعدة طرق. الأول هو إزالة آخر 32 حرفًا من أي OTP (كلمة مرور لمرة واحدة) تم إنشاؤها باستخدام YubiKey الخاص بك. آخر هو باستخدام الآلة الحاسبة modhex.
أدخل YubiKey OTP الخاص بك وقم بتحويله، معرف رمز YubiKey المميز الخاص بك هو 12 حرفًا ومدرج على النحو التالي:
تشفير Modhex: XXXXXXX
لست متأكدا ما يعنيه هذا الجزء الأخير؟ إليك كيفية الحصول على نسخة من OTP الخاص بك.
افتح المحطة
اضغط على زر YubiKey وسيقوم بإخراج كلمة مرور لمرة واحدة (OTP) في الغلاف:
$ cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj
bash: cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj: command not found
يمكن لصق هذا في صفحة Modhex_Calculator.
يتطلب هذا تمكين وحدة pam مع تشغيل "debug". عندما يُطلب منك استخدام YubiKey، اضغط على الزر. ستقوم وحدة pam بطباعة معلومات تصحيح الأخطاء بما في ذلك OTP ومعرف الرمز المميز الخاص بك إلى Shell - انسخ المعرف في ملف التكوين الخاص بك ويجب أن تكون جاهزًا للانطلاق.
YubiKey لـ "مستخدمك": [pam_yubico.c:pam_sm_authenticate(867)] أعاد التحويل 44 بايت [pam_yubico.c:pam_sm_authenticate(885)] تخطي أول 0 بايت. الطول هو 44، وتم ضبط token_id على 12 ورمز OTP دائمًا 32. [pam_yubico.c:pam_sm_authenticate(892)] OTP: ccccccclabcabkhbdncicglfltnukadfoifadfhhhhfe معرف: cccccclabcab
قد يواجه المستخدمون الذين لديهم SELinux في وضع الفرض (الوضع الافتراضي في Fedora 17+) مشكلات في تسجيل الدخول مع الخدمات بما في ذلك تلك التي تم التحقق من صحتها عبر polkit-agent-helper-1 وsshd وتسجيل الدخول.
تم توثيق ذلك في Red Hat bugzilla بما في ذلك الحل البديل لـ ssh (يمكن إنشاء ملفات مكافئة لخدمات أخرى). الأنظمة في الوضع "المسموح" ستصدر تحذيرات AVC لكن المصادقة ستنجح.
لتحديد ما إذا كان لديك تطبيق SELinux أم لا، قم بتشغيل الأمر sestatus
.
إذا كنت تريد استخدام YubiKey لمصادقتك على عمليات تسجيل الدخول إلى وحدة تحكم Linux، أضف ما يلي إلى أعلى /etc/pam.d/login
:
مصادقة كافية pam_yubico.so id = تصحيح أخطاء [معرف عميل API الخاص بك].
راجع نموذج ملحقات مخطط Active Directory الخاص بـ Michael Ludvig لتخزين/ارتباط سمة معرف YubiKey العام بحساب مستخدم معين: https://github.com/mludvig/yubikey-ldap/tree/master/microsoft-schema
إنشاء ملف "/etc/pam.d/openvpn":
المصادقة مطلوبة pam_yubico.so ldap_uri=ldap://contoso.com معرف التصحيح=[معرف API الخاص بك] yubi_attr=YubiKeyID ldapdn=DC=contoso,DC=com ldap_filter=(&(sAMAccountName=%u)(objectClass=user)( memberOf=CN=somegroup,DC=contoso,DC=com)) [ldap_bind_user=CN=binduser,OU=حسابات الخدمة,DC=contoso,DC=com] ldap_bind_password=bind_password Try_first_pass الحساب مطلوب pam_yubico.so
إنشاء ملف "openvpn.conf"
البرنامج المساعد openvpn-plugin-auth-pam.so openvpn