مثال على وحدة PAM التي توضح مصادقة ثنائية العوامل لتسجيل الدخول إلى الخوادم عبر SSH ، OpenVPN ، إلخ ...
لا يتعلق هذا المشروع بتسجيل الدخول إلى Google أو Facebook أو غيرها من أنظمة TOTP/HOTP الثانية ، حتى لو كانوا يوصون باستخدام تطبيقات Google Authenticator.
تم تحديد كلمة المرور المستندة إلى HMAC (HOTP) في RFC 4226 ويتم تحديد كلمة المرور لمرة واحدة (TOTP) المستندة إلى الوقت (TOTP) في RFC 6238.
./bootstrap.sh
./configure
make
sudo make installإذا لم يكن لديك إمكانية الوصول إلى "Sudo" ، فيجب عليك أن تصبح "Root" يدويًا قبل الاتصال "Make".
بالنسبة لأعلى أمان ، تأكد من طلب كل من كلمة المرور و OTP حتى إذا كانت كلمة المرور و/أو OTP غير صحيحة. هذا requisite أنه على الأقل أول pam_unix.so (أو أي وحدة أخرى required استخدامها للتحقق من كلمات المرور) و pam_google_authenticator.so . ربما لا يمكن أن يكون الأمر required ، لكن قد يعتمد ذلك على بقية تكوين PAM الخاص بك.
إذا كنت تستخدم HOTP (على عكس العداد على عكس الوقت) ، فأضف الخيار no_increment_hotp للتأكد من أن العداد لم يتم زيادة المحاولات الفاشلة.
أضف هذا السطر إلى ملف تكوين PAM الخاص بك:
auth required pam_google_authenticator.so no_increment_hotp
قم بتشغيل google-authenticator Binary لإنشاء مفتاح سري جديد في الدليل المنزلي الخاص بك. سيتم تخزين هذه الإعدادات في ~/.google_authenticator .
إذا كان نظامك يدعم مكتبة "libqrencode" ، فسيتم عرضك على تطبيق QRCode الذي يمكنك مسحه باستخدام تطبيق Android "Google Authenticator".
إذا لم يكن نظامك يحتوي على هذه المكتبة ، فيمكنك إما اتباع عنوان URL الذي يتم إخراج google-authenticator ، أو عليك إدخال المفتاح السري الأبجدي الرقمي يدويًا في تطبيق Android "Google Authenticator".
في كلتا الحالتين ، بعد إضافة المفتاح ، النقر والاحتفال حتى تظهر قائمة السياق. ثم تحقق من أن قيمة التحقق من المفتاح تتطابق (قد لا تكون هذه الميزة متوفرة في جميع بنيات تطبيق Android).
في كل مرة تقوم فيها بتسجيل الدخول إلى نظامك ، ستتم مطالبتك الآن برمز TOTP الخاص بك (كلمة مرور لمرة واحدة على أساس الوقت) أو HOTP (على أساس مضاد) ، اعتمادًا على الخيارات المقدمة إلى google-authenticator ، بعد إدخال معرف المستخدم العادي الخاص بك وكلمة مرور حساب UNIX العادية.
أثناء عملية التشغيل الأولية ، قد تجد أنه لم ينشأ جميع المستخدمين مفتاحًا سريًا حتى الآن. إذا كنت لا تزال ترغب في أن تكون قادرة على تسجيل الدخول ، فيمكنك تمرير خيار "Nullok" على سطر أوامر الوحدة النمطية:
auth required pam_google_authenticator.so nullok
إذا قام نظامك بتشفير الدلائل المنزلية حتى بعد إدخال المستخدمين لديك كلمة مرورهم ، فيجب عليك إعادة ترتيب الإدخالات في ملف تكوين PAM لفك تشفير الدليل الرئيسي قبل طلب رمز OTP ، أو عليك تخزين الملف السري في موقع غير قياسي:
auth required pam_google_authenticator.so secret=/var/unencrypted-home/${USER}/.google_authenticator
سيكون خيارًا ممكنًا. تأكد من وضع الأذونات المناسبة. عليك أيضًا أن تخبر المستخدمين بنقل ملف .google_authenticator يدويًا إلى هذا الموقع.
بالإضافة إلى "$ {user}" ، يتعرف secret= الخيار أيضًا على كل من "~" و ${HOME} كمستحضرات قصيرة للدليل الرئيسي للمستخدم.
عند استخدام secret= Option ، قد ترغب أيضًا في تعيين خيار user= . يفرض هذا الأخير وحدة PAM على التبديل إلى معرف مستخدم متصل مرمّزًا قبل القيام بأي عمليات ملفات. عند استخدام خيار user= ، يجب ألا تتضمن "~" أو "$ {home}" في اسم الملف.
يمكن أن يكون خيار user= مفيدًا أيضًا إذا كنت ترغب في مصادقة المستخدمين الذين ليس لديهم حسابات UNIX التقليدية على نظامك.
انظر "الدلائل المنزلية المشفرة" ، أعلاه.
يتجاوز موجه الرمز المميز الافتراضي. إذا كنت ترغب في تضمين مسافات في المطالبة ، لف الوسيطة بأكملها بين قوسين مربعة:
auth required pam_google_authenticator.so [authtok_prompt=Your secret token: ]
إجبار وحدة PAM على التبديل إلى معرف مستخدم مرمز قبل القيام بأي عمليات ملفات. شائع الاستخدام مع secret= .
خيار خطير!
بشكل افتراضي ، تتطلب وحدة PAM أن يكون ملف الأسرار مملوكًا للمستخدم الذي يقوم بتسجيل الدخول (أو إذا تم تحديد user= ، مملوكة من قبل هذا المستخدم). هذا الخيار يعطل هذا التحقق.
يمكن استخدام هذا الخيار للسماح لخطوط الجذر كجذر للتعامل مع ملفات التكوين التي لا تملكها هذا المستخدم ، على سبيل المثال المملوكة للمستخدمين أنفسهم.
خيار خطير!
بشكل افتراضي ، تتطلب وحدة PAM أن يكون ملف الأسرار قابلاً للقراءة فقط بواسطة مالك الملف (الوضع 0600 افتراضيًا). في المواقف التي يتم فيها استخدام الوحدة النمطية في تكوين غير متفرغ ، قد يحتاج المسؤول إلى المزيد من أذونات ملفات متساهلة ، أو إعداد محدد لحالة الاستخدام.
تمكين المزيد من رسائل السجل المطوّلة في syslog.
لا يمكن لبعض عملاء PAM مطالبة المستخدم بأكثر من مجرد كلمة المرور. للعمل حول هذه المشكلة ، تدعم وحدة PAM هذه التراص. إذا قمت بتمرير خيار forward_pass ، فإن وحدة pam_google_authenticator تتسابق مع المستخدم لكل من كلمة مرور النظام ورمز التحقق في مطالبة واحدة. يقوم بعد ذلك بإعادة توجيه كلمة مرور النظام إلى وحدة PAM التالية ، والتي يجب تكوينها باستخدام خيار use_first_pass .
بدوره ، تدعم وحدة pam_google_authenticator أيضًا خيارات use_first_pass القياسية و try_first_pass . لكن معظم المستخدمين لن يحتاجوا إلى تعيين هؤلاء على pam_google_authenticator .
إذا اكتشفت أن رمز TOTP الخاص بك لا يعمل أبدًا ، فهذا هو النتيجة الأكثر شيوعًا على مدار الساعة على الخادم الخاص بك يختلف عن جهاز Android الخاص بك. تقوم وحدة PAM بمحاولة للتعويض عن انحراف الوقت. يمكنك تعليمه حول مقدار الانحراف الذي تواجهه ، من خلال محاولة تسجيله ثلاث مرات على التوالي. تأكد من أنك تنتظر 30s دائمًا (ولكن لم يعد) ، بحيث تحصل على ثلاثة رموز TOTP مميزة.
يفضل بعض المسؤولين عدم تعديل انحراف الوقت تلقائيًا ، لأن القيام بذلك يؤدي إلى تكوين نظام أقل أمانًا قليلاً. إذا كنت ترغب في تعطيله ، فيمكنك القيام بذلك على سطر أوامر الوحدة النمطية:
auth required pam_google_authenticator.so noskewadj
لا تزيد العداد لمحاولات HotP الفاشلة. عادةً ما يجب عليك تعيين محاولات كلمة المرور الفاشلة هذه من قبل مهاجم بدون رمز لا تقفل المستخدم المعتمد.
السماح للمستخدمين بتسجيل الدخول بدون OTP ، إذا لم يقوموا بإعداد OTP بعد.
يتطلب PAM إجابة SUCCESS واحدة على الأقل من الوحدة النمطية ، ويؤدي nullok إلى قول هذه الوحدة IGNORE . هذا يعني أنه إذا تم استخدام هذا الخيار على الأقل ، فيجب أن يكون هناك وحدة واحدة أخرى تقول SUCCESS . طريقة واحدة للقيام بذلك هي إضافة auth required pam_permit.so حتى نهاية تكوين PAM.
بشكل افتراضي ، لا تتردد وحدة PAM على رمز التحقق عند إدخاله بواسطة المستخدم. في بعض الحالات ، قد يفضل المسؤول سلوكًا مختلفًا. تمرير خيار echo_verification_code إلى الوحدة من أجل تمكين الصدى.
إذا كنت ترغب في الحصول على رموز التحقق التي يتم قائم عليها بدلاً من الوقت ، فاستخدم google-authenticator Binary لإنشاء مفتاح سري في الدليل المنزلي الخاص بك مع الخيار المناسب. في هذا الوضع ، يكون الانحراف على مدار الساعة غير ذي صلة ويطبق خيار حجم النافذة الآن على عدد الرموز التي تتجاوز الكودات الحالية التي سيتم قبولها ، لتقليل مشاكل التزامن.
في حالة عدم وجود فترة سماح ، لن يتم خلالها طلب رمز التحقق الثاني. حاول تعيين ثواني إلى 86400 للسماح ليوم كامل بين الرموز الطالبة ؛ أو 3600 لمدة ساعة.
يعمل هذا عن طريق إضافة زوج (عنوان IP ، الطابع الزمني) إلى ملف الأمان بعد تسجيل الدخول الناجح لمرة واحدة ؛ يتم تتبع عناوين IP المتميزة فقط عشرة آخرون.
خيار خطير!
من خلال هذا الخيار ، يمكن للمهاجم الذي يتمتع بإمكانية ملء نظام الملفات (خادم الفيضان بطلبات الويب ، أو إذا كان لديهم حساب فقط ملء القرص) يمكن أن يجبروا على موقف يمكن فيه إعادة استخدام كلمات تمرير لمرة واحدة ، مما يهزم الغرض من "" الهزيمة ". مرة واحدة ".
بشكل افتراضي ، إذا تم تعريف خيار grace_period ، يتطلب وحدة PAM بعض المساحة الحرة لتخزين عنوان IP وجهاز الزمن الطابع الزمني لآخر تسجيل الدخول. يمكن أن يمنع الوصول إذا لم يكن لدى الخادم مساحة حرة أو في حالة خطأ في ملف تكوين التحديث. باستخدام خيار allow_readonly ، يمكنك تجاهل أي أخطاء يمكن أن تحدث أثناء تحديث ملف التكوين.