Beste Möglichkeit, einige SSH-Benutzer nur auf die Authentifizierung mit öffentlichem Schlüssel zu beschränken (Kennwortauthentifizierung deaktivieren)

7

Ich verwende Mac OS X Server.app unter Yosemite und habe SSH für Benutzer mit den Standardeinstellungen in /etc/sshd_configaktiviert ( Standardmäßig sind die Authentifizierung mit öffentlichem Schlüssel und Kennwort aktiviert). Ich muss jedoch den gitlokalen Benutzer so einschränken, dass er NUR über SSH Zugriff auf öffentliche Schlüssel hat.

Bei vollständiger Offenlegung aktiviert die Server.app einige zusätzliche Kerberos- und GSSAPI-Optionen (obwohl ich nicht 100% sicher bin, wie sich diese auf meine folgenden Fragen auswirken):

# Kerberos options
KerberosAuthentication yes
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
GSSAPIStrictAcceptorCheck yes
GSSAPIKeyExchange no

/etc/sshd_config sagt folgendes:

# To disable tunneled clear text passwords both PasswordAuthentication and
# ChallengeResponseAuthentication must be set to "no".

Da dies ChallengeResponseAuthenticationjedoch in Übereinstimmungsanweisungen nicht zulässig ist, habe ich versucht, nur die Kennwortauthentifizierung zu deaktivieren:

Match User git
      PasswordAuthentication no

Dies funktioniert nicht - ich konnte mich immer noch mit Benutzername / Passwort bei [email protected] anmelden :(

Das Hinzufügen KbdInteractiveAuthentication noschien jedoch richtig zu funktionieren:

Match User git
      PasswordAuthentication no
      KbdInteractiveAuthentication no

Jetzt bekomme ich Permission denied (publickey,gssapi-keyex,gssapi-with-mic)beim Versuch mich ohne öffentlichen Schlüssel anzumelden. Dies scheint darauf hinzudeuten, dass es neben publickey noch Methoden gibt, die die Anmeldung des gitBenutzers ermöglichen (dh gssapi-keyexund gssapi-with-mic).

Es scheint ein besserer Ansatz zu sein, die Authentifizierungsmethode einfach auf Folgendes zu beschränken publickey:

Match User git
    AuthenticationMethods publickey

Dies gibt die Antwort `Berechtigung verweigert (publickey).

Fragen:

  1. Was ist der Unterschied zwischen ChallengeResponseAuthenticationund KbdInteractiveAuthentication? Warum ist KbdInteractiveAuthenticationin Übereinstimmungsanweisungen erlaubt, aber nicht ChallengeResponseAuthentication?
  2. Gibt es irgendwelche Nachteile / Sicherheitsbedenken bei dem AuthenticationMethods publickeyAnsatz?
  3. (Bonus, wenn Sie mir helfen können, zu verstehen gssapi-keyex/ gssapi-with-micund wie sie sich auf die aktivierten GSSAPI / Kerberos-Optionen beziehen)
cdwilson
quelle

Antworten:

5

Es gibt eine schöne Zusammenfassung des Unterschieds zwischen ChallengeResponseAuthenticationund KbdInteractiveAuthenticationunter http://blog.tankywoo.com/linux/2013/09/14/ssh-passwordauthentication-vs-challengeresponseauthentication.html - Zusammenfassung ist, dass ChallengeResponse häufig nur nach einem Passwort fragt ( besteht jedoch darauf, dass es interaktiv geliefert wird).

KbdInteractiveAuthenticationund ChallengeResponseAuthenticationsind verschiedene Dinge. Es ist nur so, dass ChallengeResponseAuthenticationin einfachen Fällen nur nach einem Passwort gefragt werden kann.

ChallengeResponseAuthenticationist eine globale Einstellung und kann nicht in einer MatchKlausel angegeben werden. Weitere sshd_configInformationen finden Sie in der Manpage.

Angabe Explizit AuthenticationMethods publickeyfür den gitBenutzer sollte gut funktionieren und ist besser als als die , die das Deaktivieren Sie nicht wollen (wie die Liste ändern könnte).

Die gssapiOptionen kommen ins Spiel, wenn Sie in einer KerberosUmgebung (z. B. einer Active Directory-Domäne) arbeiten.

Paul Haldane
quelle
Danke für den hilfreichen Link. Irgendeine Idee zum zweiten Teil von Frage 1 oben? Warum ist KbdInteractiveAuthenticationin Übereinstimmungsanweisungen erlaubt, aber nicht ChallengeResponseAuthentication? Sind das tatsächlich verschiedene Dinge oder ändert sich der Name nur innerhalb eines Übereinstimmungsblocks?
cdwilson
Siehe Update zur Antwort (zusammen mit sshd_configManpage für Details)
Paul Haldane
1
Ich habe das Kopfgeld vergeben, weil ich die Antwort sehr schätze, aber die Manpage und die anderen von Ihnen bereitgestellten Links geben immer noch keine gute Beschreibung der Unterschiede zwischen KbdInteractiveAuthenticationund ChallengeResponseAuthentication(und warum Match nur akzeptiert KbdInteractiveAuthentication). Wenn Sie (oder jemand anderes) diese Antwort bearbeiten können, um weitere Details bereitzustellen, würde ich mich freuen.
cdwilson
Der betreffende Link adressiert das Schlüsselwort KbdInteractiveAuthenticationüberhaupt nicht.
Dan Pritts
0

Es ist mir nicht ganz klar, ob es einen Unterschied gibt, aber zumindest scheint ChallengeResponseAuthentication KbdInteractiveAuthentication zu erfordern. Es wird automatisch aktiviert, wenn Challenge-Response aktiviert ist.

Ich habe das Gefühl, dass sie während der SSH1-Ära eine Challenge-Response entwickelt haben. Es wurde als tastaturinteraktiv mit SSH2 standardisiert, aber die Serverkonfigurationsdatei wurde nicht sofort geändert, damit alte Konfigurationen weiterhin funktionieren.

Ich habe Folgendes in der OpenSH-Portable-Quelle gefunden (Stand 20181214).

sshd.c ab Zeile 1685:

 /* challenge-response is implemented via keyboard interactive */
 if (options.challenge_response_authentication)
    options.kbd_interactive_authentication = 1;

sshconnect2.c ab Zeile 375:

 if (options.challenge_response_authentication)
    options.kbd_interactive_authentication = 1;
Dan Pritts
quelle