SSH Two-Factor-Authentifizierung (2FA) mit einem Yubikey

12

Also habe ich diesen kleinen Yubikey und möchte beim Authentifizieren von ssh-Sitzungen eine zusätzliche Sicherheitsebene hinzufügen. Auf der Serverseite habe ich die Kennwortauthentifizierung bereits deaktiviert und erlaube nur die Verwendung von SSH-Schlüsseln beim Anmelden.

Das Problem ist, dass nach der Konfiguration von sshd und PAM für yubikey auth sshd immer noch nur einen ssh-Schlüssel benötigt. Ich werde nie gebeten, eine Antwort vom yubikey zu geben.

Wie benötige ich sowohl einen SSH- Schlüssel als auch einen Yubikey?

(ubuntu 14.04 - trusty)

/etc/pam.d/common-auth:

auth    required    pam_yubico.so mode=client try_first_pass id=<id> key=<secret>
auth    [success=1 default=ignore]  pam_unix.so nullok_secure try_first_pass
# 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

/etc/ssh/sshd_config:

...

PasswordAuthentication no
ChallengeResponseAuthentication yes
UsePAM yes
ben lemasurier
quelle
Übrigens, wenn Sie in ein paar Tagen keine zufriedenstellende Antwort bekommen, rufen Sie mich an und ich werde die Frage mit einem gesunden Kopfgeld beantworten. Ich muss einen Repräsentanten verbrennen, und diese Antwort interessiert mich auch. :)
EEAA

Antworten:

4

Ok, ich habe weitergemacht und ich denke, ich habe eine vernünftige Lösung gefunden. Das Wichtigste, was ich bisher vermisst habe, war das von sshd AuthenticationMethods publickey,password. Dies erzwingt die Anforderung sowohl eines öffentlichen Schlüssels als auch eines Passworts - "Passwörter" werden jetzt von verarbeitet PAM->auth-yubi. Zusätzliche Änderungen waren ebenfalls erforderlich, siehe unten:

(Ubuntu 14.04 - vertrauenswürdig):

/etc/pam.d/yubi-auth

auth    required pam_yubico.so mode=client try_first_pass id=<id> key=<key>

Hinweis: Sie können Ihre Zugangskennung und geheimen Schlüssel erhalten hier

/etc/pam.d/sshd

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

# Yubikey auth
@include yubi-auth

/ etc / ssh / sshd_config

UsePAM yes
ChallengeResponseAuthentication no
AuthenticationMethods publickey,password
PasswordAuthentication yes

service ssh restart

Nachprüfung

SSH von einem Remote-Host ohne öffentlichen Schlüssel

root@0a6442bcb21c:/# ssh [email protected]
The authenticity of host '192.168.1.20 (192.168.1.20)' can't be established.
ECDSA key fingerprint is ea:2a:e3:98:35:72:66:b1:e0:65:6b:3f:60:8a:af:ab.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.20' (ECDSA) to the list of known hosts.
Permission denied (publickey).

SSH von einem Remote-Host mit einem öffentlichen Schlüssel

$ ssh [email protected]
Authenticated with partial success.
[email protected]'s password:
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-33-generic x86_64)

Verbesserung

Es wäre schön, wenn Sie beim Authentifizieren "Yubikey Auth:" anstelle von "password:" vom Remote-SSH-Server sehen würden.

Was passiert, wenn der SSH-Server keine Verbindung zum Authentifizierungssystem von yubico herstellen kann? Eine ideale Lösung wäre völlig in sich geschlossen.

Kommentare und Vorschläge erwünscht.

ben lemasurier
quelle
2

Das Einrichten von 2FA mit Yubikey kann schwierig sein (obwohl es einen OpenSh- Patch für U2F gibt ), aber der einfachste Weg ist wahrscheinlich der auf der offiziellen Yubico-Website beschriebene .

Es ist im Grunde die Art und Weise, Ihren privaten Schlüssel auf dem Yubikey zu speichern und ihn mit einer PIN zu schützen. Es ist nicht genau das 2FA, das Sie beschrieben haben (aber es ist etwas, was Sie haben und was Sie wissen ), aber es erhöht die Sicherheit noch mehr (Yubikey sperrt nach einigen erfolglosen Versuchen).

TL: DR;

OPENSC_LIBS=`locate opensc-pkcs11.so`
yubico-piv-tool -s 9a -a generate -o public.pem
yubico-piv-tool -a verify-pin -P 123456 -a selfsign-certificate -s 9a \
  -S "/CN=SSH key/" -i public.pem -o cert.pem
yubico-piv-tool -a import-certificate -s 9a -i cert.pem
ssh-keygen -D $OPENSC_LIBS/opensc-pkcs11.so -e
ssh -I $OPENSC_LIBS/opensc-pkcs11.so [email protected]
Jakuje
quelle
" Ich glaube, das Pam-Modul kann nur lokale Yubikeys authentifizieren, nicht die über ssh " - ich bin mir nicht ganz sicher, was Sie damit meinen. Meinen Sie damit, dass ein Yubikey nicht zur Authentifizierung bei einem Remote-SSH-Server über PAM verwendet werden kann?
MadHatter
Ja. Weil es die Art und Weise braucht, mit dem yubikey zu kommunizieren und es wahrscheinlich mit einer lokalen Bibliothek gemacht wird. Es gibt keinen Code dafür in ssh.
Jakuje,
Das ist definitiv falsch. Ich habe meine Remote-Server so konfiguriert, dass sie die yubikey-basierte Authentifizierung sowohl im nativen yubikey-Modus als auch im OATH-Modus akzeptieren . Der springende Punkt eines yubikey ist es, eine kurze (ish) Zeichenfolge bereitzustellen, die über einen potenziell unsicheren Kanal übertragen wird und als Einmalpasswort fungiert. Wenn der Yubikey physisch mit dem System verbunden sein müsste, für das er authentifiziert wurde, wäre er viel weniger nützlich. Ich denke, du liegst falsch, was das Sperren von Yubikeys im PKCS-Modus angeht.
MadHatter
OK du hast recht. Im OTP-Modus ist dies möglich. Die Verriegelung ist jedoch Teil des PKCS11-Standards.
Jakuje,
1
Vielen Dank dafür - ich bin der Meinung, dass Ihre Antwort für die Verbesserungen viel besser ist, und werde meine Ablehnung entfernen.
MadHatter