È 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.so
avere 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.so
e 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.so
modulo 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.so
modulo 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 su
per accedere al tuo account utente: dovresti eseguire il processo di autenticazione in tre passaggi.
La documentazione completa per il pam_succeed_if.so
modulo è disponibile all'indirizzo http://linux.die.net/man/8/pam_succeed_if