
Aktualisierung 1: Ich kann mit dieser grundlegenden Konfiguration alle öffentlichen Schlüssel + Passwörter + OTP anwenden /etc/pam.d/common-auth
.
auth [success=ok] pam_unix.so
auth [success=1] pam_google_authenticator.so nullok echo_verification_code [authtok_prompt=Enter your OTP:]
auth requisite pam_deny.so
auth required pam_permit.so
pam_faillock.so
Ich werde versuchen , dies so umzusetzen, wie es der ursprüngliche Plan vorsah.
Ursprüngliche Frage:
Ich verwende Debian 10 und 12 und möchte, dass meine Benutzer nur dann erfolgreich per SSH auf den Server zugreifen können, wenn sie den passenden öffentlichen Schlüssel haben, dann ihr Passwort eingeben und anschließend OTP (Google Authenticator) eingeben. Kurz gesagt: SSH sollte öffentlichen Schlüssel + Passwort + OTP erfordern.
Ich habe die Kombination aus publickey + password
oder bereits erfolgreich konfiguriert publickey + OTP
, habe aber immer noch Probleme, alle drei zu kombinieren.
Bitte helfen Sie mir bei der Konfiguration.
Mein bisheriger Versuch:
/etc/pam.d/common-auth
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=1800
auth sufficient pam_unix.so try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=5 fail_interval=120 unlock_time=1800
auth sufficient pam_faillock.so authsucc audit deny=5 fail_interval=120 unlock_time=1800
auth required [success=1] pam_google_authenticator.so echo_verification_code
auth requisite pam_deny.so
auth required pam_permit.so
/etc/pam.d/sshd
@include common-auth
account required pam_nologin.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
@include common-session
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
session optional pam_mail.so standard noenv # [1]
session required pam_limits.so
session required pam_env.so # [1]
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
@include common-password
/etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf
MaxAuthTries 5
MaxSessions 1
PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
KbdInteractiveAuthentication yes
UsePAM yes
X11Forwarding yes
PrintMotd no
ClientAliveInterval 60
ClientAliveCountMax 15
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,password,keyboard-interactive
Beim Verbindungsversuch:ssh -i <key_path> user@server -vvv
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: <key_path>
debug3: sign_and_send_pubkey:
debug3: sign_and_send_pubkey: signing using rsa-sha2-512
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
Authenticated with partial success.
debug1: Authentications that can continue: password
debug3: start over, passed a different list password
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup password
debug3: remaining preferred: ,keyboard-interactive,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
user@server's password:
debug3: send packet: type 50
debug2: we sent a password packet, wait for reply
debug3: receive packet: type 51
Authenticated with partial success.
debug1: Authentications that can continue: keyboard-interactive
debug3: start over, passed a different list keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup keyboard-interactive
debug3: remaining preferred: password
debug3: authmethod_is_enabled keyboard-interactive
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug3: send packet: type 50
debug2: we sent a keyboard-interactive packet, wait for reply
debug3: receive packet: type 60
debug2: input_userauth_info_req: entering
debug2: input_userauth_info_req: num_prompts 1
(user@server) Password:
debug3: send packet: type 61
debug3: receive packet: type 51
debug1: Authentications that can continue: keyboard-interactive
debug2: userauth_kbdint
debug3: send packet: type 50
debug2: we sent a keyboard-interactive packet, wait for reply
debug3: receive packet: type 60
debug2: input_userauth_info_req: entering
debug2: input_userauth_info_req: num_prompts 1
(user@server) Password:
debug3: send packet: type 61
debug3: receive packet: type 51
debug1: Authentications that can continue: keyboard-interactive
debug2: userauth_kbdint
debug3: send packet: type 50
debug2: we sent a keyboard-interactive packet, wait for reply
debug3: receive packet: type 60
debug2: input_userauth_info_req: entering
debug2: input_userauth_info_req: num_prompts 1
(user@server) Password:
debug3: send packet: type 61
debug3: receive packet: type 51
debug1: Authentications that can continue: keyboard-interactive
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
user@server: Permission denied (keyboard-interactive).
Schritt 3 (Tastatur-Interaktion) schlug fehl und einige Dinge unterschieden sich von der normalen OTP-Verifizierung:
- Es wurde nicht nach dem gefragt,
Verification code:
sondern nur nach(user@server) Password:
. echo_verification_code
Trotz Konfiguration wurde der Roh-OTP-Code bei der Eingabe nicht angezeigtcommon-auth
.
P/s: Ich habe auch die Konfiguration pam_faillock.so
so konfiguriert, dass Benutzer bei fehlgeschlagenen Anmeldeversuchen gesperrt werden.
Antwort1
Nach einigen Versuchen und dankdieser Beitragkann ich pam_faillock.so
meine Lösung um die Überprüfung von Protokollierungsversuchen und die Sperrung des Benutzers bei Bedarf erweitern.
Seien Sie vorsichtigbeim Bearbeiten der unten aufgeführten Authentifizierungsdateien. ImmerErstelle eine Sicherungder Datei zuerst. UndDenken Sie daran, eine Root-Sitzung aufrecht zu erhalten, und testen Sie Ihre Anmeldung in der anderen Sitzung.
Sehen wir uns meine Konfigurationsdateien an:
Erste: Bearbeiten /etc/pam.d/common-auth
, um es auf alle Arten von Anmeldemethoden anzuwenden:
auth requisite pam_faillock.so preauth audit deny=5 fail_interval=120 unlock_time=1800
auth [success=1] pam_unix.so try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=5 fail_interval=120 unlock_time=1800
auth [success=2] pam_google_authenticator.so nullok echo_verification_code [authtok_prompt=Enter your OTP:]
auth sufficient pam_faillock.so authsucc audit deny=5 fail_interval=120 unlock_time=1800
auth requisite pam_deny.so
auth required pam_permit.so
Einige Erklärungen Zeile für Zeile:
- Verwenden Sie es
pam_faillock.so
mitpreauth
undrequisite
um den Status des Benutzers zu überprüfen. Wenn der Benutzer gesperrt ist, wird die Kennwortabfrage verhindert. Gefolgt von einigen Konfigurationen,faillock
die Sie überprüfen könnenHier. - Wird verwendet
pam_unix.so
, um das Passwort des Benutzers zu überprüfen.[success=1]
Wenn das Passwort korrekt ist, wird die nächste Zeile übersprungen. Wird verwendettry_first_pass
, um die Eingabe des ersten Schritts zu verwenden. pam_faillock.so
mitauthfail
wird der fehlgeschlagene Versuch protokolliert und der Authentifizierungsprozess wird mit fortgesetzt[default=die]
. Wenn Sie nicht möchten, dass der Benutzer weiß, wo der Fehler liegt (Passwort oder OTP), vertauschen Sie die Zeilen 3 und 4.- Verwenden Sie diese Option
pam_google_authenticator.so
, um das OTP zu überprüfen. Weitere Informationen finden Sie hierHier.[success=2]
überspringt die nächsten beiden Zeilen, wenn das OTP korrekt ist. pam_faillock.so
Mitauthsucc
der Markierung wird dieser Versuch als gut markiert und die Datensätze für schlechte Versuche werden gelöscht, sodass der Benutzer fortfahren kann.pam_deny.so
mitrequisite
wird der Anmeldeversuch abgelehnt. Daher überspringen einige der obigen Zeilen diese Zeile, wenn die Informationen korrekt sind.pam_permit.so
Erlauben Sie den Zugriff einfach nach der Durchführung aller oben genannten Überprüfungen.
Zweite: Bearbeiten Sie /etc/pam.d/common-account
diese Zeile und fügen Sie sie am Anfang hinzu, um Folgendes zu verwenden faillock
:
account required pam_faillock.so
Dritte: /etc/pam.d/sshd
Für SSH-Verbindung bearbeiten. Ich habe nichts an der Standardkonfiguration geändert, sondern sie hier nur aufgelistet, damit ihr sie vergleichen könnt.
@include common-auth
account required pam_nologin.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
@include common-session
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
session optional pam_mail.so standard noenv # [1]
session required pam_limits.so
session required pam_env.so # [1]
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
@include common-password
Vierte: Bearbeiten /etc/ssh/sshd_config
, um die SSH-Sitzung zu konfigurieren
Include /etc/ssh/sshd_config.d/*.conf
MaxAuthTries 5
MaxSessions 1
PubkeyAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
KbdInteractiveAuthentication yes
UsePAM yes
X11Forwarding yes
PrintMotd no
ClientAliveInterval 60
ClientAliveCountMax 15
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
AuthenticationMethods publickey,keyboard-interactive
Einige wichtige Punkte:
KbdInteractiveAuthentication
=yes
zur Verwendungkeyboard-interactive
der Methode.ChallengeResponseAuthentication
ist hierfür ein veralteter Alias.UsePAM
muss eingestellt sein,yes
um alle oben genannten PAM-Konfigurationen zu verwenden- In
AuthenticationMethods
erkläre ich nurkeyboard-interactive
die Eingabeaufforderung für Passwort und OTP.
Laden Sie den Dienst nach dem Bearbeiten der sshd_config
Datei neu, sshd
um die neue Konfiguration zu aktualisieren.
systemctl reload sshd
Und so kann ich alles überprüfen public key + password (of the user) + OTP
.