تخبرك العديد من البرامج التعليمية بتكوين خادم ssh الخاص بك مثل هذا:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

ولكن مع هذا الإعداد ، لا يمكنك استخدام PAM ، لأنني أخطط لاستخدام مصادقة ثنائية مع Google Authenticator (كلمة مرور OTP لمرة واحدة) أحتاج إلى PAM.

إذن ، كيف يتم تكوين debian jessie ssh deamon جديدًا ، إذا كنت أرغب في منع تسجيل الدخول بكلمة المرور العادية مع السماح باستخدام PAM.

ربما يكون السؤال الدقيق هو كيفية تكوين بام لعدم السماح بكلمات المرور؟

Details on PAM Authentication

Disabling PAM-based password authentication is rather un-intuitive. It is needed on pretty much all GNU/Linux distributions (with the notable exception of Slackware), along with FreeBSD. If you're not careful, you can have PasswordAuthentication set to 'no' and still login with just a password through PAM authentication. It turns out that you need to set 'ChallengeResponseAuthentication' to 'no' in order to truly disable PAM authentication. The FreeBSD man pages have this to say, which may help to clarify the situation a bit:

Note that if ChallengeResponseAuthentication is 'yes', and the PAM authentication policy for sshd includes pam_unix(8), password authentication will be allowed through the challenge-response mechanism regardless of the value of PasswordAuthentication.

http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html

answer

maybe the exact question is how to configure pam to disallow passwords?

صيح. لقد عثرت بالفعل على حقيقة أن الإعداد UsePAM noهو نصيحة سيئة بشكل عام. ليس فقط أنها لا تمنع أي شكل من أشكال التوثيق PAM القائمة، وهي أيضا تعطيل accountو sessionحدات. يعد التحكم في الوصول وتكوين الجلسة من الأشياء الجيدة.

أولاً ، لنبني قائمة بالمتطلبات:

  • OTP عبر pam_google_authenticator.so. هذا يتطلب UsePAM yesو ChallengeResponseAuthentication yes. أنت تطالبهم بالحصول على بيانات اعتماد ، بعد كل شيء!
  • لا يوجد شكل آخر لمصادقة كلمة المرور عبر PAM. هذا يعني تعطيل أي authوحدة قد تسمح على الأرجح بنقل كلمة المرور عبر عمليات keyboard-interactiveتسجيل الدخول. (التي يجب أن نتركها ممكّنة لـ OTP)
  • المصادقة القائمة على المفتاح. نحتاج إلى طلب publickeyالمصادقة ، وربما gssapi-with-micإذا قمت بتهيئة Kerberos.

عادةً ما تتخطى المصادقة باستخدام مفتاح المصادقة المستندة إلى PAM تمامًا. كان هذا سيوقفنا في مساراتنا مع الإصدارات القديمة من opensh ، لكن Debian 8 (jessie) يدعم AuthenticationMethodsالتوجيه. يتيح لنا ذلك طلب طرق مصادقة متعددة ، ولكنه يعمل فقط مع العملاء الذين يطبقون SSHv2.


تكوين sshd

فيما يلي الأسطر التي أقترحها /etc/ssh/sshd_config. تأكد من أن لديك طريقة للوصول إلى هذا النظام دون الحاجة إلى sshdكسر شيء ما!

# Require local root only
PermitRootLogin no

# Needed for OTP logins
ChallengeResponseAuthentication yes
UsePAM yes

# Not needed for OTP logins
PasswordAuthentication no

# Change to to "yes" if you need Kerberos. If you're unsure, this is a very safe "no".
GSSAPIAuthentication no


# Require an OTP be provided with key based logins
AuthenticationMethods publickey,keyboard-interactive

# Use this instead for Kerberos+pubkey, both with OTP
#
#AuthenticationMethods gssapi-with-mic,keyboard-interactive publickey,keyboard-interactive

لا تنس إعادة التحميل sshdبمجرد إجراء هذه التغييرات.

تكوين PAM

لا يزال يتعين علينا تكوين PAM. بافتراض تثبيت نظيف لـ Debian 8 (حسب سؤالك):

  • تعليق @include common-authمن /etc/pam.d/sshd.
  • راجع /etc/pam.d/sshdوتأكد من عدم وجود أسطر تبدأ authبـ. لا ينبغي أن يكون هناك ما إذا كان هذا تثبيتًا نظيفًا ، ولكن من الأفضل أن تكون آمنًا.
  • إضافة authإدخال ل pam_google_authenticator.so.

تذكر أن كلمات المرور المحلية لا تزال تعمل.

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

لعدم السماح بطلب كلمة المرور

علق على هذا الخط

#auth       substack     password-auth

في /etc/pam.d/sshd

وتأكد من عدم وجود nullok في نهاية هذا السطر ما لم يكن من الجيد المصادقة عبر ssh دون استخدام OTP

auth required pam_google_authenticator.so