Autenticazione a due fattori SSH (2FA) con yubikey


12

Quindi ho questo piccolo sdrucciolevole yubikey e voglio aggiungere un ulteriore livello di sicurezza durante l'autenticazione delle sessioni ssh. Sul lato server ho già disabilitato l'autenticazione con password e autorizzo solo l'uso delle chiavi ssh durante l'accesso.

Il problema è che, dopo aver configurato sshd e PAM per yubikey auth, sshd richiede ancora solo una chiave ssh, non mi viene mai chiesto di fornire una risposta da yubikey.

Come posso richiedere sia una chiave ssh che una 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

A proposito, se non ricevi una risposta soddisfacente in un paio di giorni, chiamami e farò una sana ricompensa alla domanda. Ho un rappresentante da bruciare e sono interessato anche a questa risposta. :)
EEAA,

Risposte:


4

Ok, l'ho continuato e penso di aver trovato una soluzione ragionevole. La cosa principale che prima mi mancava era quella di sshd AuthenticationMethods publickey,password. Ciò impone il requisito sia di una chiave pubblica che di una password - la "password" viene ora gestita da PAM->auth-yubi. Sono state inoltre necessarie ulteriori modifiche, vedere di seguito:

(ubuntu 14.04 - fidato):

/etc/pam.d/yubi-auth

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

Nota: è possibile ottenere l'ID di accesso e la chiave segreta qui

/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

Verifica

SSH da un host remoto senza chiave pubblica

root@0a6442bcb21c:/# ssh ben@192.168.1.20
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 da un host remoto con una chiave pubblica

$ ssh ben@192.168.1.20
Authenticated with partial success.
ben@192.168.1.20's password:
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-33-generic x86_64)

Miglioramento

Sarebbe bello vedere "Yubikey Auth:" invece di "password:" dal server remoto ssh durante l'autenticazione.

Cosa succede quando il server ssh non è in grado di contattare il sistema di verifica dell'autent di yubico? Una soluzione ideale sarebbe completamente autonoma.

Commenti e suggerimenti apprezzati.


2

Configurare 2FA con Yubikey può essere complicato (pensato che ci sia patch openssh per U2F ), ma il modo più semplice è probabilmente quello descritto sul sito ufficiale di Yubico .

Fondamentalmente è il modo di archiviare la tua chiave privata su Yubikey e proteggerla con il PIN. Non è esattamente la 2FA si sono descritte (ma è qualcosa quello che hai e e ciò che si sa ), ma aumenta la sicurezza ancora più (serrature YubiKey dopo alcuni tentativi falliti).

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 user@remote.example.com

" Credo che il modulo pam sia in grado di autenticare solo Yubikeys locali, non quelli su ssh " - Non sono del tutto sicuro di cosa tu voglia dire. Vuoi dire che uno Yubikey non può essere usato per autenticarsi su un server ssh remoto tramite PAM?
MadHatter il

Sì. Perché ha bisogno del modo di comunicare con yubikey e probabilmente è fatto usando una libreria locale. Non esiste un codice per questo in ssh.
Jakuje,

Questo è decisamente sbagliato. Ho configurato il mio server remoti di accettare l'autenticazione YubiKey basata sia in modalità nativa YubiKey e modalità GIURAMENTO . Il punto centrale di uno yubikey è fornire una breve stringa (ish) da trasmettere su un canale potenzialmente non sicuro, che funga da password monouso. Se lo yubikey dovesse essere fisicamente collegato al sistema a cui stava eseguendo l'autenticazione, sarebbe molto meno utile. Penso che ti sbagli anche sul blocco yubikey in modalità PKCS.
MadHatter il

OK, hai ragione. Per la modalità OTP è possibile. Ma il bloccaggio fa parte dello standard PKCS11.
Jakuje,

1
Grazie per questo - ritengo che la tua risposta sia molto migliore per i miglioramenti e rimuoverò il mio voto negativo.
MadHatter il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.