Visualizzazione post con etichetta raspberry. Mostra tutti i post
Visualizzazione post con etichetta raspberry. Mostra tutti i post

martedì 28 aprile 2015

SSH Pam Fun

Come già raccontavo nel post "Raspberry pi: two factor authentication", l'utilizzo dei Pluggable Authentication Module consente di affinare la fase di autenticazione.
Ben presto mi sono accorto che il dover inserire sempre un doppio codice (password e codice d'accesso), sebbene renda la connessione ssh più resistente al brute force, si può dire superfluo (e anche un po' fastidioso) quando si accede da postazione "sicura" (es: macchina locale).

Pam_access.so

Questo modulo consente di regolare l'accesso basandosi su login, indirizzo ip di provenienza, dominio ecc. Di norma le regole vengono prese dal file /etc/security/access.conf ma è possibile indicare un percorso differente tramite il parametro accessfile.
Nel file si definiscono, quindi, le regole per l'accesso. Se per ipotesi volessimo l'accesso consentito solo alla rete locale, la regola sarebbe:

debe@raspberrypi /etc/pam.d $ cat /etc/security/access-local.conf
# only allow from local IP range
+ : ALL : 192.168.1.0/24
+ : ALL : LOCAL
- : ALL : ALL
A questo punto se configurassi pam_access.so in /etc/pam.d/ssh come required mi troverei con ssh accessibile solo da rete locale. Ma quello che voglio io è bypassare il modulo di google nel caso pam_access.so abbia successo (cioè ci sia un match con le regole).
Ecco quindi la riga completa:
auth    [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
auth       required     pam_google_authenticator.so
Fra parentesi quadre si vede che in caso di successo, si indica al sistema di "saltare" il successivo passo (quello del Google authenticator). In tutti gli altri casi, il modulo e' ignorato.

venerdì 19 aprile 2013

Raspberry PI: Two Factor Authentication via Google

Ebbene sì: sono uno dei fortunati possessori di una RaspberryPI. In realtà ne posseggo due, una utilizzata per i test e l'altra che se ne sta allegramente collegata al modem di casa per "fare cose". Quest'ultima è direttamente accessibile dalla Grande Rete attraverso la più classica delle connessioni SSH.
La raspberryPI e la maglietta. Stiloso!
Un bel giorno mi sovvenne l'idea di rendere il login un pochino più sicuro, introducendo la Two Factor Authentication:
un metodo di autenticazione che si basa sull'utilizzo congiunto di due metodi di autenticazione individuale.
Nello specifico i due metodi sarebbero:
  1. qualcosa che si conosce (la coppia user/password);
  2. qualcosa che si possiede (un generatore di codici);
Nulla di nuovo, insomma. Diversi istituti bancari da tempo utilizzano questa modalità per l'accesso all'e-banking. Anche Google consente di attivare il meccanismo sui suoi account utilizzando, come generatore di password temporanee, una applicazione per smartphone. Il tutto è generosamente rilasciato sotto forma di modulo PAM.
Ma veniamo alla pratica e cerchiamo di farla valere più della grammatica.
Prendiamo la raspberry sulla quale sta girando la raspbian e installiamo il modulo che serve.
debe@raspberrypi ~ $ sudo apt-get install libpam-google-authenticator
Fatto? Bene! Passiamo alla configurazione.
Lanciando il tool google-authenticator viene chiesto se si vuole utilizzare un token time-based (TOTP) cioè che cambia a intervalli regolari, oppure no.
Do you want authentication tokens to be time-based (y/n) n
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://hotp/utente@host%3Fsecret%3DCHIAVESEGRETISSIMA
Your new secret key is: CHIAVESEGRETISSIMA
Your verification code is 123456
Your emergency scratch codes are:
  xxxxxxxx
  yyyyyyyy
  zzzzzzzz
  qqqqqqqq
  hhhhhhhh
 Do you want me to update your "/home/debe/.google_authenticator" file (y/n)
Se decidiamo per la prima strada, bisogna tener presente che il clock della macchina deve essere corretto e quindi, probabilmente, serve installare anche un client ntp.
Scelto il tipo, ci viene fornito il materiale per sincronizzare l'applicazione che genera i codici. Si può scansionare il QR Code direttamente in console (generato tramite la libreria libqrencode3), seguendo il link fornito, oppure inserendo manualmente la chiave di partenza. Al termine salviamo il file di configurazione.
Ora indichiamo a sshd di utilizzare il modulo appena installato. Aggiungiamo al file /etc/pam.d/sshd (dopo tutte le autenticazioni di default) la riga.
auth required pam_google_authenticator.so nullok
nullok serve per consentire l'accesso anche a chi non ha un file di configurazione (quindi solo con user-pass).
I codici di emergenza servono, con somma fantasia, in caso in cui non abbiamo a disposizione qualcosa per generare il codice.
Prima di far ripartire sshd manca ancora un passo: nel file /etc/ssh/sshd_config il parametro ChallengeResponseAuthentication deve essere yes.
Facciamo ripartire il servizio sshd e tentiamo il login:

debe@host1:~> ssh <indirizzoIP>
Password:
Verification code:
Linux raspberrypi 3.6.11+ #371 PREEMPT Thu Feb 7 16:31:35 GMT 2013 armv6l
debe@raspberrypi ~ $
Il verification code è quello generato dalla applicazione.

That's all folks!
Ciao
Debe