Questo tutorial ti mostrerà come configurare l'autenticazione a due fattori SSH sul server Ubuntu utilizzando il noto Google Authenticator. Migliorerà notevolmente la sicurezza del servizio SSH sul tuo server Ubuntu.
Come funziona l'autenticazione a due fattori
Normalmente, devi solo inserire una password o utilizzare la chiave SSH per accedere al tuo server Ubuntu da remoto. L'autenticazione a due fattori (2FA) richiede l'inserimento di due informazioni per accedere. Quindi dovrai anche inserire una password monouso basata sul tempo per accedere al tuo server SSH. Questa password monouso viene calcolata utilizzando l'algoritmo TOTP, che è uno standard IETF. Al giorno d'oggi molti siti Web e servizi (Facebook, Google, Twitter, ecc.) offrono agli utenti la 2FA per proteggere i propri account ed è una buona idea abilitare anche la 2FA sul tuo server SSH.
Questo tutorial ti mostrerà come configurare
- Autenticazione password con 2FA
- Autenticazione con chiave pubblica con 2FA
Nota :Il software server open source che useremo in questo articolo si chiama libpam-google-authenticator
, che viene installato dal repository Ubuntu predefinito. Google l'azienda non è coinvolta nel processo di autenticazione in alcuna forma o forma. Il software del server e l'app mobile non richiedono l'accesso alla rete.
Passaggio 1:installa e configura Google Authenticator su Ubuntu Server
Accedi al tuo server Ubuntu ed esegui il comando seguente per installare Google Authenticator dal repository di pacchetti Ubuntu predefinito.
sudo apt install -y libpam-google-authenticator
Quindi esegui google-authenticator
comando per creare una nuova chiave segreta nella tua home directory.
google-authenticator
Alla domanda "Vuoi che i token di autenticazione siano basati sul tempo?" Rispondi s .
Quindi vedrai un codice QR che puoi scansionare utilizzando un'app TOTP sul tuo telefono. Ci sono due app che ti consiglio:
- Autenticatore Google è l'app mobile TOTP più conosciuta. Puoi installarlo tramite Google Play o l'App Store di Apple sul tuo cellulare.
- Il Google Authenticator l'app mobile non è open source. Se non ti fidi di Google, puoi utilizzare FreeOTP, un'app mobile TOTP open source sviluppata da Red Hat.
Scansiona il codice QR con Google Authenticator o FreeOTP sul tuo cellulare. Tieni presente che è necessario ingrandire la finestra del terminale per eseguire la scansione del codice QR completo.
Il codice QR rappresenta la chiave segreta, che è conosciuta solo dal tuo server SSH e dalla tua app mobile TOTP. Una volta scansionato il codice QR, puoi vedere una password monouso a sei cifre sul tuo telefono. Per impostazione predefinita, cambia ogni 30 secondi. Dovrai inserire questa password monouso in seguito per accedere al server Ubuntu tramite SSH.
Nella finestra del terminale, puoi vedere la chiave segreta, il codice di verifica e il codice scratch di emergenza. Si consiglia di salvare queste informazioni in un luogo sicuro per un uso successivo.
Quindi puoi inserire y per rispondere a tutte le restanti domande. Questo aggiornerà il file di configurazione di Google Authenticator, disabiliterà più utilizzi dello stesso token di autenticazione, aumenterà la finestra temporale e abiliterà la limitazione della velocità per proteggersi dai tentativi di accesso con forza bruta.
Passaggio 2:configura il demone SSH per l'utilizzo di Google Authenticator
- Autenticazione password con 2FA
- Autenticazione con chiave pubblica con 2FA
Autenticazione password con 2FA
Se non utilizzi la chiave SSH, segui le istruzioni seguenti.
Apri il file di configurazione del server SSH.
sudo nano /etc/ssh/sshd_config
Trova i due parametri seguenti nel file e assicurati che entrambi siano impostati su yes .
UsePAM yes ChallengeResponseAuthentication yes
PAM sta per modulo di autenticazione collegabile. Fornisce un modo semplice per collegare diversi metodi di autenticazione al tuo sistema Linux. Per abilitare Google Authenticator con SSH, è necessario abilitare l'autenticazione PAM e Challenge-Response.
Se desideri consentire all'utente root di utilizzare 2FA, trova il PermitRootLogin
parametro e impostarne il valore su yes
. Non può essere PermitRootLogin no
o PermitRootLogin prohibit-password
.
PermitRootLogin yes
Salva e chiudi il file. Quindi, modifica il file della regola PAM per il demone SSH.
sudo nano /etc/pam.d/sshd
All'inizio di questo file, puoi vedere la riga seguente, che abilita l'autenticazione della password quando ChallengeResponseAuthentication
è impostato su yes
.
@include common-auth
Per abilitare 2FA in SSH, aggiungi le due righe seguenti.
# two-factor authentication via Google Authenticator auth required pam_google_authenticator.so
Salva e chiudi il file. Quindi riavvia il demone SSH per rendere effettive le modifiche.
sudo systemctl restart ssh
D'ora in poi il demone SSH richiederà di inserire la password utente e un codice di verifica (la password monouso generata da Google Authenticator). Lo screenshot seguente mostra una sessione di accesso SSH da una casella CentOS a un server Ubuntu 20.04.
Autenticazione con chiave pubblica con 2FA
Se utilizzi la chiave SSH per accedere al server SSH, segui le istruzioni seguenti.
Apri il file di configurazione del server SSH.
sudo nano /etc/ssh/sshd_config
Trova i due parametri seguenti nel file e assicurati che entrambi siano impostati su yes .
UsePAM yes ChallengeResponseAuthentication yes
PAM sta per modulo di autenticazione collegabile. Fornisce un modo semplice per collegare diversi metodi di autenticazione al tuo sistema Linux. Per abilitare Google Authenticator con SSH, è necessario abilitare l'autenticazione PAM e Challenge-Response.
Se desideri consentire all'utente root di utilizzare 2FA, trova il PermitRootLogin
parametro e impostarne il valore su yes
. Non può essere PermitRootLogin no
o PermitRootLogin prohibit-password
.
PermitRootLogin yes
Quindi, aggiungi la seguente riga alla fine di questo file. Questo dice al demone SSH che l'utente deve passare sia l'autenticazione con chiave pubblica che l'autenticazione challenge-response.
AuthenticationMethods publickey,keyboard-interactive
Salva e chiudi il file. Quindi, modifica il file della regola PAM per il demone SSH.
sudo nano /etc/pam.d/sshd
All'inizio di questo file, puoi vedere la riga seguente, che abilita l'autenticazione della password quando ChallengeResponseAuthentication
è impostato su yes
. Dobbiamo commentare questa riga, perché useremo la chiave SSH invece della password.
@include common-auth
Per abilitare 2FA in SSH, aggiungi le due righe seguenti.
# two-factor authentication via Google Authenticator auth required pam_google_authenticator.so
Salva e chiudi il file. Quindi riavvia il demone SSH per rendere effettive le modifiche.
sudo systemctl restart ssh
D'ora in poi devi utilizzare la chiave SSH e il codice di verifica di Google Authenticator per accedere.
Note
- Ogni utente sul tuo server Ubuntu deve eseguire
google-authenticator
comandare e scansionare il codice QR per utilizzare l'autenticazione a due fattori. Se l'utente non ha eseguito la configurazione e tenta di accedere, viene visualizzato il messaggio di errore "Autorizzazione negata (tastiera interattiva) ” verrà visualizzato. - Il codice Scratch di emergenza è il tuo codice di backup. Se perdi il telefono, puoi inserire uno dei cinque codici scratch di emergenza invece di una password monouso per completare la verifica in due passaggi. Questi codici sono monouso.
- Se desideri modificare la chiave segreta, accedi semplicemente al tuo server ed esegui
google-authenticator
comando di nuovo per aggiornare il~/.google_authenticator
file. - Poiché la password monouso viene calcolata utilizzando la chiave segreta condivisa e l'ora corrente, è una buona idea abilitare la sincronizzazione dell'ora NTP sul server Ubuntu per mantenere l'ora esatta, sebbene in precedenza fosse consentito uno sfasamento temporale di 4 minuti tra il server Ubuntu e l'app mobile. Il tuo server Ubuntu e l'app mobile TOTP possono utilizzare fusi orari diversi.
Come disabilitare l'autenticazione a due fattori SSH
Modifica il file della regola PAM per il demone SSH.
sudo nano /etc/pam.d/sshd
Commenta la riga seguente.
auth required pam_google_authenticator.so
Salva e chiudi il file. Se hai aggiunto la seguente riga in /etc/ssh/sshd_config
file,
AuthenticationMethods publickey,keyboard-interactive
Rimuovi keyboard-interactive
metodo di autenticazione.
AuthenticationMethods publickey
Salva e chiudi il file. Quindi riavvia il demone SSH.
sudo systemctl restart ssh