Autenticazione in tre passaggi?


9

Sto usando Ubuntu.

Mi chiedo solo se è possibile avere libpam-google-authenticator (che consente di accedere utilizzando un codice generato dal telefono) E l'autenticazione del certificato impostata per funzionare insieme, e se è possibile, come farei impostandolo. Quindi - per accedere al mio account, dovresti avere la mia password, il mio telefono (e il suo passcode) E il mio certificato / chiave privata e la sua password.

Ho avuto entrambi a lavorare in modo indipendente ma non sono mai stato in grado di farli lavorare insieme. Sono sicuro che in qualche modo è possibile però.

Grazie.


Di solito non guadagni molto da fattori duplicati. Un generatore di certificati e codici si adatta al fattore "qualcosa che hai". Una password si adatta al "qualcosa che conosci". L'altro fattore comune è "qualcosa che sei" (biometria).
Zoredache,

Risposte:


8

È possibile farlo concatenando i moduli PAM. Ma prima di entrare nei dettagli:

La configurazione errata di PAM può e ti impedirà di accedere al tuo sistema

Per fortuna puoi sempre avviare in modalità utente singolo e risolvere il problema, ma tieni presente che PAM non è qualcosa con cui vuoi pasticciare più del necessario.

In ogni caso, l'idea alla base di questo è che è possibile utilizzare moduli PAM accatastamento fare in modo che pam-google-authenticator, pam_unix(questo assegni la password) e il modulo certificato tutti devono avere successo per consentire l'accesso. Per impostazione predefinita, PAM è configurato per consentire a qualsiasi modulo di autenticazione di autenticarti, saltando gli altri.

In /etc/pam.d/common-auth, vedrai nella parte superiore una linea simile alla seguente:

auth    [success=2 default=ignore]  pam_unix.so nullok_secure try_first_pass

Questo dice a PAM che dovrebbe pam_unix.soavere successo, salterà le prossime due regole (che di solito sono un altro modulo di autenticazione e quindi pam_deny.so) e procederà ai moduli opzionali. Tuttavia, se il modulo fallisce, verrà ignorato e il controllo passerà al modulo successivo nella catena. Questo continua verso il basso ogni modulo di autenticazione fino a quando il controllo non salta al blocco opzionale o PAM colpisce pam_deny.so e fallisce proprio lì.

Questo può essere sfruttato per garantire che pam-google-authenticator, pam_unix.soe il modulo PAM certificato, tutti debbano riuscire a consentirti l'accesso. Non conosco il nome del modulo di autenticazione di Google o del modulo di certificato che stai utilizzando, ma dovresti riuscire a trovarli nel tuo file common-auth. Quindi mettendo qualcosa di simile in alto:

auth    requisite   pam_unix.so nullok_secure
auth    requisite   pam_google_authenticator.so
auth    requisite   pam_certificate_auth.so
auth    [success=<n>]   pam_permit.so

Sostituendo <n>con il numero di moduli tra il modulo pam_permit.so qui e il pam_permit.somodulo successivo - in altre parole, questo dovrebbe essere impostato sul codice [success = n default = ignore] del modulo più in alto + 1. Questa sintassi è un po 'funky , ma essenzialmente salta i moduli auth dopo che i moduli sopra hanno avuto successo.

Naturalmente, ti starai chiedendo come limitare questa autenticazione in tre passaggi solo al tuo account utente. Questo può essere fatto con un pam_succeed_if.somodulo e deve essere inserito sopra il blocco di autenticazione in tre passaggi sopra descritto:

auth    [success=ignore default=4]  pam_succeed_if.so user = <username>

Dove <username>viene sostituito dal tuo nome utente. Questa riga dice semplicemente che se pam_succeed_if.so dovesse riuscire (ovvero il tuo nome utente corrisponde al nome utente su quella linea), PAM dovrebbe procedere con i moduli successivi, che sono i moduli di autenticazione in tre fasi. Altrimenti, PAM dovrebbe passare ai moduli reali, che distano 4 moduli da questo.

Per abbinare più elementi, ad esempio l'appartenenza a un gruppo insieme a un determinato nome utente, è necessario utilizzare più righe, ad esempio:

auth    [success=1 default=ignore]  pam_succeed_if.so user = <username>
auth    [success=ignore default=4]  pam_succeed_if.so user ingroup <group>

Prima di fare qualsiasi cosa, farei il backup del file common-auth e acquisirò familiarità con la modalità utente singolo e come ripristinare il vecchio file in caso di emergenza. Questa configurazione non è stata testata da me, ma dovrebbe funzionare.

Per testarlo la prima volta, apri uno o due shell di root e lasciali soli. Questi fungono da fallback nel caso in cui qualcosa vada storto, poiché puoi facilmente sostituire common-auth con il backup. Quindi, apporta queste modifiche. Successivamente, prova a utilizzare super accedere al tuo account utente: dovresti eseguire il processo di autenticazione in tre passaggi.

La documentazione completa per il pam_succeed_if.somodulo è disponibile all'indirizzo http://linux.die.net/man/8/pam_succeed_if


Risposta eccellente! Se potessi votare questo più di una volta, lo farei.
Aaron Miller,

Grazie! Anche se - Per l'accesso al certificato sto aggiungendo la mia chiave pubblica in .ssh / authorized_keys (usando le impostazioni RSAAuthentication e PubkeyAuthentication in sshd_config) e per il codice OTP sto usando pam_google_authenticator - google-authenticator.googlecode.com/hg . Quindi come funzionerebbe?
Jesse W,

@JesseW Perché questo funzioni, devi impostare SSHD per usare PAM e una chiave pubblica. Anche se non sono sicuro dei dettagli, dovrai certamente impostare ChallengeResponseAuthenticatione UsePAM"sì", quindi impostare le righe dettagliate nella mia risposta sopra in /etc/pam.d/sshd o /etc/pam.d/common -auth, a seconda se si desidera eseguire questa operazione per tutti gli accessi o solo SSH. Ricorda di rimuovere la riga di riempimento 'pam_certificate_auth.so' e di conseguenza modificare la riga [success = <n>.
Xenopathic,

2

Ho letto questo post e ho pensato che suonasse bene - ecco come ho ottenuto l'autenticazione a tre fattori per funzionare. Ho scritto un post sul blog qui .

Fondamentalmente, ho impostato Google Authenticator e la password in PAM, quindi in seguito ho impostato l'autenticazione con chiave pubblica in OpenSSH (questo ignora gli altri due) e infine ho richiesto a OpenSSH di autenticarsi anche tramite PAM (l'ultima riga)

Da / etc / ssh / sshd_conf

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

1

Solo Pubkey + GoogleAuth devi aggiungere in cima al tuo /etc/pam.d/sshd

#auth    requisite    pam_unix.so nullok_secure #if you want password, too :)
auth    requisite    pam_google_authenticator.so
auth    [success=2]  pam_permit.so

Suppongo che tu abbia OpenSSH> = 6.2 e sshd_config modificati

Per una maggiore sicurezza paranoica aggiungi alcune configurazioni extra: D

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.