Wie verwende ich den SSH-Server mit PAM, ohne die Kennwortauthentifizierung zuzulassen?

13

In vielen Tutorials erfahren Sie, wie Sie Ihren SSH-Server folgendermaßen konfigurieren:

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

Aber mit diesem Setup können Sie PAM nicht verwenden, da ich 2-Faktor-Authentifizierung mit Google Authenticator (OTP Onetime Password) verwenden möchte. Ich benötige PAM.

Also, wie man ein frisches Debian-Jessie-SSH-Deamon konfiguriert, wenn ich die Anmeldung mit dem normalen Passwort verhindern möchte, aber dennoch zulasse, PAM zu verwenden.

Vielleicht ist die genaue Frage, wie man Pam so konfiguriert, dass Passwörter nicht zugelassen werden.

Details zur PAM-Authentifizierung

Das Deaktivieren der PAM-basierten Kennwortauthentifizierung ist nicht intuitiv. Es wird auf so ziemlich allen GNU / Linux-Distributionen (mit Ausnahme von Slackware) zusammen mit FreeBSD benötigt. Wenn Sie nicht aufpassen, können Sie PasswordAuthentication auf 'no' setzen und sich trotzdem mit nur einem Passwort über die PAM-Authentifizierung anmelden. Es stellt sich heraus, dass Sie 'ChallengeResponseAuthentication' auf 'no' setzen müssen, um die PAM-Authentifizierung wirklich zu deaktivieren. Die FreeBSD-Manpages haben folgendes zu sagen, was dazu beitragen kann, die Situation ein wenig zu klären:

Beachten Sie, dass wenn ChallengeResponseAuthentication 'yes' ist und die PAM-Authentifizierungsrichtlinie für sshd pam_unix (8) enthält, die Kennwortauthentifizierung über den Challenge-Response-Mechanismus unabhängig vom Wert von PasswordAuthentication zulässig ist.

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

c33s
quelle

Antworten:

23

Vielleicht ist die genaue Frage, wie man Pam so konfiguriert, dass Passwörter nicht zugelassen werden.

Richtig. Sie sind bereits auf die Tatsache gestoßen, dass die Einstellung UsePAM noim Allgemeinen ein schlechter Rat ist. Es verhindert nicht nur jede Form von PAM-basierter Authentifizierung, sondern deaktiviert accountund sessionmoduliert auch. Zugriffssteuerung und Sitzungskonfiguration sind gute Dinge.

Lassen Sie uns zunächst eine Liste der Anforderungen erstellen:

  • OTP über pam_google_authenticator.so. Dies erfordert UsePAM yesund ChallengeResponseAuthentication yes. Schließlich fordern Sie sie zur Eingabe eines Berechtigungsnachweises auf!
  • Keine andere Form der Passwortauthentifizierung über PAM. Dies bedeutet, authdass alle Module deaktiviert werden, die möglicherweise die Übermittlung eines Kennworts über keyboard-interactiveAnmeldungen zulassen . (die wir für OTP aktiviert lassen müssen)
  • Schlüsselbasierte Authentifizierung. Wir benötigen eine publickeyAuthentifizierung und möglicherweise, gssapi-with-micwenn Sie Kerberos konfiguriert haben.

Normalerweise überspringt die Authentifizierung mit einem Schlüssel die PAM-basierte Authentifizierung vollständig. Dies hätte uns in unseren Tracks mit älteren Versionen von openssh aufgehalten, aber Debian 8 (jessie) unterstützt die AuthenticationMethodsDirektive. Dies ermöglicht es uns, mehrere Authentifizierungsmethoden zu erfordern, funktioniert jedoch nur mit Clients, die SSHv2 implementieren.


sshd config

Nachstehend die Zeilen, für die ich einen Vorschlag mache /etc/ssh/sshd_config. Stellen Sie sicher, dass Sie eine Möglichkeit haben, auf dieses System zuzugreifen, ohne dass sshdSie etwas beschädigen!

# 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

Vergessen Sie nicht neu zu laden, sshdsobald diese Änderungen vorgenommen wurden.

PAM-Konfiguration

Wir müssen PAM noch konfigurieren. Unter der Annahme einer sauberen Installation von Debian 8 (gemäß Ihrer Frage):

  • Kommentar @include common-authvon /etc/pam.d/sshd.
  • Überprüfen /etc/pam.d/sshdund bestätigen Sie, dass keine Zeilen authvorhanden sind, die mit beginnen. Wenn dies eine saubere Installation ist, sollte es keine geben, aber es ist am besten, sicher zu sein.
  • authEintrag für hinzufügen pam_google_authenticator.so.

Denken Sie daran, dass lokale Kennwörter weiterhin funktionieren.

Wir haben keine Änderungen vorgenommen, die sich auf die Anmeldung über eine lokale Konsole auswirken oder verhindern würden, dass Benutzer Kennwörter verwenden, um ihre Berechtigungen über zu aktualisieren. sudo.Dies lag außerhalb des Bereichs der Frage. Wenn Sie sich dazu entschließen, die Dinge weiterzuführen, denken Sie daran, dass root immer berechtigt sein sollte, sich lokal über ein Passwort anzumelden. Sie könnten sich versehentlich aus dem System ausschließen.

Andrew B
quelle
Ich habe es noch nicht getestet, aber es sieht logisch aus und mit 5 positiven Stimmen denke ich, dass ich es akzeptieren kann.
c33s
Ich habe mich selbst getestet. Wenn Sie das Kennwort vollständig deaktivieren möchten, müssen Sie auch ChallengeResponseAuthentication No. Siehe blog.tankywoo.com/linux/2013/09/14/…
anonym
@ anonym Siehe die Frage des OP und die erste Kugel. Durch das Deaktivieren wird ChallengeResponseAuthenticationdie tastaturinteraktive Authentifizierungsmethode unterbrochen, die für PAM-Authentifizierungsmodule erforderlich ist, die OTP verarbeiten. (gewünscht durch das OP) Deaktivieren von CRA nur sicher ist , ausführen , wenn Sie wirklich haben null PAM - Module in dem authStapel , dass Bedarf an Feuer. Wenn PasswordAuthenticationund GSSAPIAuthenticationdeaktiviert sind, wird ein Passwort nur akzeptiert, wenn PAM ein aktiviertes Authentifizierungsmodul hat, das danach fragt.
Andrew B
(das heißt, es ist immer noch ein guter Link)
Andrew B
0

um die Passwortanfrage abzulehnen

Kommentar zu dieser Zeile

#auth       substack     password-auth

in /etc/pam.d/sshd

und stellen Sie sicher, dass am Ende dieser Zeile kein nullok steht, es sei denn, die Authentifizierung über ssh ohne Verwendung von OTP ist in Ordnung

auth required pam_google_authenticator.so
JOduMonT
quelle