أرغب في السماح بهذين النوعين من المصادقة: المفتاح العام + مصادقة Google أو كلمة المرور + مصادقة Google.

لدي ما يلي في بلدي sshd_config:

AuthenticationMethods publickey,keyboard-interactive:pam password,keyboard-interactive:pam
UsePAM yes
ChallengeResponseAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication yes

وفي /etc/pam.d/sshأنا uncommented

#@include common-auth and added auth required pam_google_authenticator.so

في نهاية الملف.

لا يزال مسار المفتاح + الرمز المميز يعمل ، ولكن لسبب ما يتم دائمًا رفض كلمة المرور الخاصة بي برسالة "تم رفض الوصول".

اكتشفت أنه كلما ضبطت UsePAMعلى "نعم" ، تفشل مصادقة كلمة المرور. غير متأكد من السبب؟

محتويات /etc/pam.d/sshd: (يبدو هذا الملف طويلاً جدًا بالنسبة لي ولكنه كان مجرد ملف افتراضي لـ ubuntu ، فربما يمكنني تقصير ذلك؟)

# PAM configuration for the Secure Shell service

# Standard Un*x authentication.
#@include common-auth

# Disallow non-root logins when /etc/nologin exists.
account    required     pam_nologin.so

# Uncomment and edit /etc/security/access.conf if you need to set     complex
# access limits that are hard to express in sshd_config.
# account  required     pam_access.so

# Standard Un*x authorization.
@include common-account

# SELinux needs to be the first session rule.  This ensures that any
# lingering context has been cleared.  Without this it is possible     that a
# module could execute code in the wrong domain.
session [success=ok ignore=ignore module_unknown=ignore default=bad]            pam_selinux.so close

# Set the loginuid process attribute.
session    required     pam_loginuid.so

# Create a new session keyring.
session    optional     pam_keyinit.so force revoke

# Standard Un*x session setup and teardown.
@include common-session

# Print the message of the day upon successful login.
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
session    optional     pam_motd.so  motd=/run/motd.dynamic noupdate
session    optional     pam_motd.so # [1]

# Print the status of the user's mailbox upon successful login.
session    optional     pam_mail.so standard noenv # [1]

# Set up user limits from /etc/security/limits.conf.
session    required     pam_limits.so

# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
session    required     pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
session    required     pam_env.so user_readenv=1     envfile=/etc/default/locale

# SELinux needs to intervene at login time to ensure that the process     starts
# in the proper default security context.  Only sessions which are intended
# to run in the user's context should be run after this.
session [success=ok ignore=ignore module_unknown=ignore default=bad]            pam_selinux.so open

# Standard Un*x password updating.
@include common-password

auth required pam_google_authenticator.so

محتويات /etc/pam.d/common-auth:

#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
auth    [success=1 default=ignore]  pam_unix.so nullok_secure
# here's the fallback if no module succeeds
auth    requisite           pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around 
auth    required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth    optional            pam_cap.so 
# end of pam-auth-update config

ينقسم سؤالي إلى: كيف يمكنني استخدام "UsePAM yes" مع "كلمة مرور AuthenticationMethods". ربما ينبغي علي حذف هذا السؤال وفتح سؤال جديد؟

answer

I found out that whenever I set UsePAM to yes, the password authentication fails. Not sure why?

UsePAMالخيار يجعل طريقة المصادقة passwordتستخدم نفس وحدة PAM التي تريد استخدامها للعامل الثاني. هذا هو سبب رفضها لكلمة المرور الخاصة بك.


هذا هو الرد على سؤالك ، موضحًا "لماذا" ، ولكن ليس الحل الكامل "كيفية تحسينه". إعداد هذه المجموعة أمر صعب. أردت أن أتعلم كيفية القيام بذلك بشكل بسيط وصحيح ، ولكن كان لدي الوقت حتى الآن. لكنني منفتح على أفكارك :)

قضيت كل صباح أحاول الحصول على هذا للعمل. AFAIK الآن ، تحدث طريقة مصادقة المفتاح العام خارج مكدس PAM.

من ما يمكن أن نلاحظ، بعد أن ChallengeResponseAuthentication yesو UsePAM yesسيلة أن قيمة PasswordAuthenticationوتجاهلت بشكل فعال ويمكن اعتبارها no. هذا يعني أن passwordقيمة AuthenticationMethodsسوف تفشل دائمًا.

وهو ما لن يمثل مشكلة إذا تمكنا من ملاحظة حالة نجاح أو فشل تسجيل دخول المفتاح العام داخل مكدس PAM. لكن لا يمكننا - يبدو أنه يتم التعامل معها بالكامل داخل SSH.

هذا يعني أنه يمكننا القيام ( AuthenticationMethodsكمجموعات صالحة ):

  • publickey ولا شيء غير ذلك
  • كومة PAM بأكملها
  • publickey ومكدس PAM بأكمله

ولكن ليس كما نريد ، publickeyوجزء من مجموعة PAM يعتمد على ما إذا publickeyكان ناجحًا.

أحب أن تثبت خطأ في هذا!

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

"مصادقة كلمة المرور" هو طلب بسيط لكلمة مرور واحدة. لا توجد مطالبة محددة يرسلها الخادم إلى العميل. إنه العميل الذي يختار كيفية تسمية الموجه - مثل عندما يسأل "أدخل كلمة المرور للمستخدم @ host :".

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

في معظم الحالات ، يتم استخدام المصادقة التفاعلية باستخدام لوحة المفاتيح لطلب مطالبة كلمة المرور "السرية" الفردية ، لذلك لا يوجد فرق مقارنة بمصادقة كلمة المرور للمستخدم النهائي.

نظرًا لأن لوحة المفاتيح التفاعلية هي آلية مصادقة تسمح للخادم بإرسال أزواج متعددة من الأزواج التحدي / الاستجابة ، فإن المكون الإضافي Google Authenticator PAM يحتاج إليها لإرسال سؤالين - كلمة المرور وكلمة المرور لمرة واحدة.

لذا لن تعمل مصادقة كلمة المرور مطلقًا مع Google Authenticator ، نظرًا لأنه لا يمتلك القدرة على المطالبة بأكثر من شيء واحد. سيعمل Google Authenticator مع المفاتيح الخاصة وكلمة المرور لمرة واحدة في موجه كلمة المرور (ولكن ليس بشكل مثالي). سيعمل Google Authenticator باستخدام لوحة المفاتيح التفاعلية مع كلمة المرور وكلمة المرور لمرة واحدة. لن يعمل Google Authenticator مع مطالبة كلمة المرور لأنه لا يمكنه طلب المعلومات الصحيحة.

في برنامج العميل الخاص بك ، قم بإعطاء الأولوية للتفاعل مع لوحة المفاتيح على كلمة المرور وسيتم إعدادك بالحصول على الموجهين مع التكوين الحالي الخاص بك. لتجنب وجودها على الإطلاق ، يمكننا تعطيل مصادقة كلمة المرور تمامًا.

My question actually breaks down to: How do I use "UsePAM yes" together with "AuthenticationMethods password"

للإجابة على هذا السؤال مباشرة ، لا يمكنك ذلك. قم بإزالة كلمة المرور كطريقة مصادقة مدعومة واعتمد على لوحة المفاتيح التفاعلية لمصادقة كلمة المرور الخاصة بك. اضبط "PasswordAuthentication no" في / etc / ssh / sshd_config

لذلك: / etc / ssh / sshd_config

UsePAM yes
PasswordAuthentication no
ChallengeResponseAuthentication yes
PubkeyAuthentication yes
# I don't use AuthenticationMethods at all and rely on my yes/no's

/etc/pam.d/sshd (في الأسفل)

auth required pam_google_authenticator.so nullok