Ubuntu Autenticazione in 2 Fattori

Ubuntu Autenticazione in 2 Fattori

Questo sistema permette di accedere al proprio pc tramite un codice temporaneo generato dal vostro smartphone.

Comunemente denominato: Autenticazione a 2 fattori, questo sistema permette di accedere al pc con i codici temporanei generati da soli dispositivi autorizzati. È un metodo maniacale di tenere al sicuro i propri dati.

Questo sistema funziona anche in assenza di connessione internet

Questa guida abilita il login in 2 fattori su ubuntu (versioni testate personalmente: 16.04 - 18.04).

Abilitando questa procedura utilizzerete l'applicazione Google Authenticator per generare un codice di 6 cifre basato sull'ora per accedere al computer e prima di ogni comando con privilegi di root

Preparare il PC

Installare la libreria per l'autenticazione sul computer

sudo apt-get install libpam-google-authenticator

da terminale  e tramite l'utente a cui volete abilitare l'accesso lanciate il comando:

google-authenticator

A questo punto vi verranno fornite una serie di domande a cui dovrete rispondere in base alle vostre esigenze. Per una configurazione classica, riporto di seguito le risposte che ho impostato io: 

Do you want authentication tokens to be time-based (y/n) y

Do you want me to update your "/home/utente/.google_authenticator" file? (y/n) y

qrcode
Your new secret key is: L************************I
Your verification code is ******
Your emergency scratch codes are:
  ********
  ********
  ********
  ********
  ********



Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) n

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n) y

Come si può notare, il comando genera immediatamente il qr code ed i codici sia per impostare nuove applicazioni, sia i codici da utilizzare nel caso non abbiate il telefono a portata di mano. I codici di emergenza (emergency scratch codes) dovrebbero essere stampati e portati dietro con se sempre: attenzione i codici di emergenza si possono usare una sola volta, quando saranno esauriti, bisognerà riconfigurare l'utente sul pc e l'app.

Impostare L'Applicazione di Google Authenticator

installate sul vostro telefono l'applicazione di Google Authenticator

google authenticator App

La prima volta, la schermata si presenterà così:

google authenticator app

A questo punto basta toccare su "inizia" e poi "Leggi un codice a barre" e poi basterà puntare la fotocamera dello smartphone direttamente sul codice QR generato in precedenza all'interno del terminale.

google authenticator app

Potete utilizzare subito il codice che compare per accedere al vostro pc oppure per avere i permessi di amministratore. Ricordate sempre che il codice è temporaneo e cambia ogni 30 secondi perciò non ha senso appuntarlo da qualsiasi parte.

Abilitare l'autenticazione PAM con Google Authenticator

modificare l'autenticazione pam nel file /etc/pam.d/common-auth

sudo nano /etc/pam.d/common-auth

e modificare questa riga

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

in

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

N.B. Per chi proviene come me da vari upgrade potrebbe avere solo la partizione della home criptata. Dato che prima dell'autenticazione la partizione non è leggibile, abbiamo bisogno di spostare i file in una locazione leggibile prima del login. Questo workaround è stato preso dalla documentazione ufficiale 

creare una cartella nella partizione /var (non crittatta):

sudo mkdir -p /var/unencrypted-home/utente/

impostare i permessi corretti

sudo chown -R utente.utente /var/unencrypted-home/utente/

copiare il contenuto di ~/.google_authenticator nella cartella

cp ~/.google_authenticator /var/unencrypted-home/utente/

e modificare la linea nel file /etc/pam.d/common-auth da così:

auth required pam_google_authenticator.so

a così:

auth required pam_google_authenticator.so secret=/var/unencrypted-home/${USER}/.google_authenticator