Cercando di ottenere SSH con chiave pubblica (senza password) + autenticatore google funzionante su Ubuntu 14.04.1


20

Sto usando Ubuntu 14.04.1 (con OpenSSH 6.6 e libpam-google-authenticator 20130529-2).

Sto provando a configurare gli accessi SSH in cui la chiave pubblica esegue l'autenticazione (senza password) e a un utente viene richiesto un codice dall'autenticatore di Google.

Seguire / adattare queste istruzioni mi ha procurato una richiesta di password e una richiesta di Google Auth:

Ho installato il pacchetto, modificato il mio /etc/ssh/sshd_confige /etc/pam.d/sshfile

In /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
AuthenticationMethods  publickey,keyboard-interactive
UsePAM yes

e in fondo a /etc/pam.d/ssh:

auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")

So che PAM dipende dall'ordine, ma lo è sshd_configanche?

Che cosa sto facendo di sbagliato? Qualsiasi aiuto sarebbe apprezzato.

Risposte:


28

Hanno funzionato bene, prima ho fatto:

apt-get install libpam-google-authenticator

In /etc/pam.d/sshdHo modificato / aggiunto le seguenti righe (in alto):

# @include common-auth
auth required pam_google_authenticator.so

E in /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

Funziona bene e ora ricevo un prompt "Codice di verifica" dopo l'autenticazione con chiave pubblica. Non sono sicuro di come consentire l'autenticazione con password + token O chiave + token, poiché ora ho rimosso efficacemente il metodo di autenticazione della password da PAM.

Uso di Ubuntu 14.04.1 LTS (GNU / Linux 3.8.0-19-generico x86_64) con ssh -v: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2, OpenSSL 1.0.1f 6 gen 2014


Quindi, per l'amor dei posteri, ho capito il mio problema. Ci avevo provato anche io PasswordAuthentication no, ma non era quello. Il problema è / era che avevo / ho ControlMaster autoe ControlPathdirettive nel mio file ~ / .ssh / config. Volevo assicurarmi di non bloccarmi, quindi avrei sempre lasciato aperta una sessione SSH. Dato che il mio computer li avrebbe semplicemente riutilizzati, sono sempre entrato senza che il sistema chiedesse un token. Ho contrassegnato la tua risposta come corretta, dal momento che qualcuno che la segue avrebbe effettivamente una configurazione funzionante. Grazie!
JT.

2
Sto usando CentOS 7. Ho PasswordAuthentication no, ChallengeResponseAuthentication yes, AuthenticationMethods publickey,keyboard-interactive, e UsePAM yesin sshd_config. Convalida la mia chiave e quindi mi chiede il token di Google Authenticator e quindi mi chiede la mia password. Mi fa fare tutte e tre le cose: non posso saltare nessuna di esse. Ho anche provato AuthenticationMethods publickey,keyboard-interactive:pamcome suggerito dalla pagina man, ma questo non ha cambiato nulla. Qualche idea?
Nick Williams,

6
@NickWilliams Avevo lo stesso problema. Ciò che mi ha risolto è stato che dovevo lodare la @include common-authlinea mostrata dalle risposte. All'inizio ho pensato che fosse un commento per la pam_google_authenticatorriga in /etc/pam.d/sshd.
freb

5
Grazie! La mia soluzione non era esattamente la stessa (avevo bisogno di commentare auth substack password-auth), ma il tuo commento ha risolto il mio problema!
Nick Williams,


7

Finalmente sono riuscito a farlo funzionare posizionandomi auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullokin cima /etc/pam.d/sshd.

Secondo la pagina man pam.d :

  • success=done significa che se Google Authenticator si disconnette, non verrà più eseguita l'autenticazione, ovvero nessuna richiesta di password aggiuntiva.
  • default=die significa che se Google Authenticator rifiuta il tentativo di accesso, l'autenticazione fallirà immediatamente, saltando la richiesta della password.

Quindi [success=done new_authtok_reqd=done default=die]è una specie di mix tra i valori di controllo sufficiente requisite, dal momento che vogliamo un comportamento da entrambi: in caso di successo, terminare immediatamente (sufficiente), e in caso di fallimento, anche terminare immediatamente (requisito).

Si noti che l' nullokargomento di pam_google_authenticator.so significa che se un ~/.google_authenticatorfile non viene trovato per un utente, l'autenticazione con chiave pubblica procede normalmente. Questo è utile se voglio bloccare solo un sottoinsieme dei miei account con 2FA.


6

La risposta di Linus Kendall dovrebbe funzionare su sistemi più vecchi, ma su macchine Linux più recenti è problematica; sul mio server web basato su Linux Arch che la configurazione porta a pam che richiede il mio codice di autenticazione e la mia password dopo aver ricevuto la mia chiave ssh (cioè ho bisogno di tutti e 3).

Una soluzione più semplice che previene questo problema e che dovrebbe funzionare su ogni sistema è quella di modificare la voce in /etc/pam.d/sshd:

auth sufficient pam_google_authenticator.so

E poi per apportare le stesse modifiche a `` / etc / ssh / sshd` che Linus ha menzionato:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

Ciò dovrebbe richiedere il tuo token di autenticazione dopo che il server ha accettato la tua chiave pubblica. Non dovrebbe chiedere la tua password.

Come nota a margine, se desideri avere un account utente sftp, probabilmente dovrai bypassare l'autenticatore di Google per farlo funzionare. Ecco un suggerimento su come farlo in sicurezza usando una prigione sftp. In etc/ssh/sshd_config:

Subsystem sftp internal-sftp
Match User ftp-user
  PasswordAuthentication yes
  AuthenticationMethods password
  ChrootDirectory /path/to/ftp/dir
  ForceCommand internal-sftp

Avrete bisogno di fare i permessi su / path / to / ftp / dir radice scrittura solo (ad esempio chown root:root /path/to/ftp/dir, chmod 755 /path/to/ftp/dir. Tutti i genitori di cui sopra quella directory anche bisogno di autorizzazioni sicure. Il modo in cui faccio di solito questo è di rendere la directory chroot /home/shared/user, la creazione di un directory lì dentro (es. 'data') e poi montando qualsiasi directory che voglio condividere in questo modo:sudo mount -o bind /path/to/ftp/dir /home/shared/user/data

Se segui tutti questi passaggi, avrai la chiave pubblica + l'accesso a Google Authenticator per i tuoi utenti ssh e un account sftp funzionale protetto da password per il trasferimento dei dati.


Funziona benissimo. E poiché per qualche ragione non mi sento a mio agio nel commentare common-auth, questo era più ideale della soluzione di Linus.
Luke Sapan,

Molte grazie! sprecato una notte debug ssh, chiedendosi perché devo ancora digitare la password dopo pubkey + authcode ……
felix021
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.