SSH con 2 passaggi grazie a Google Authenticator

By | December 2, 2013

Molte policy di sicurezza prevedono di cambiare il numero della porta del servizio SSH per garantire una maggiore sicurezza in un sistema Linux. Situazione ormai ovvia in tutto il mondo IT e utilizzata maggiormente dagli utenti che possiedono un proprio server privato. Oggi voglio farvi vedere come aggiungere un’altra policy di sicurezza al servizio SSH senza dover cambiare porta. Si tratta di inglobare il famosissimo Google Authenticator al servizio ssh, in modo tale da avere una sicurezza a due passaggi, ovvero, inserendo la propria password più la combinazione data dall’applicazione G.A. Vediamo dunque come fare tutto questo…

Il primo passo da fare è configurare l’NTP sul nostro OS Linux per avere un orario allineato con il server di Google.

Successivamente scaricare sul proprio dispositivo mobile l’applicazione Google Authenticator:

Prepariamo dunque l’installazione sul nostro sistema Linux.

Installiamo le dipendenze per poter far funzionare correttamente il prodotto:

Per Debian/Ubuntu

# apt-get install build-essential libpam0g-dev libpam0g make

Per CentOS\RHEL (aver abilitato i repo EPEL come descritto QUI)

# yum --enablerepo=epel install gcc gcc++ pam-devel subversion python-devel git

Per ArchLinux (se necessario)

# pacman -Sy pam wget

Completata l’installazione delle dipendenze procediamo con la compilazione della libreria necessaria. Scarichiamo la libreria con il comando:

# wget https://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2 -O googleauth.tar.bz2

estraiamo il contenuto:

# tar -xf googleauth.tar.bz2

entriamo nella directory:

# cd libpam-google-authenticator-1.0/

Modifichiamo il MakeFile con il nostro editor preferito:

# nano Makefile

Aggiungiamo, subito dopo la direttiva “VERSION := 1.0“, la riga “LDFLAGS=”-lpam“”:

...
VERSION := 1.0
LDFLAGS="-lpam"
...

A questo punto salviamo il file e lanciamo i comandi di compilazione:

# make && make install

Se l’installazione è andata a buon termine eliminiamo i file scaricati con i comandi:

# cd ..
# rm -rf googleauth.tar.bz2 libpam-google-authenticator-1.0/

a questo punto possiamo lanciare il comando per la prima configurazione:

# google-authenticator

una volta lanciato ci verrà chiesto:

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

rispondiamo “y” e diamo invio.

a questo punto apparirà un output del genere:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@myserver%3Fsecret%3D3LXXXXXXXXXXXX
 Your new secret key is: 3LOXXXXXXXXXXXX
 Your verification code is 722511
 Your emergency scratch codes are:
 83222658
 89225401
 50442214
 61802255
 22629775
Do you want me to update your "/root/.google_authenticator" file (y/n)

copiamo il link: https://www.google.com/chart?chs=200×200&…. e incolliamolo nella barra degli indirizzi del nostro browser, facendo apparire il qrcode.

code_ga

Apriamo l’applicazione G.A. sul nostro dispositivo mobile, andiamo su “Menu” -> “Configura Account

Screenshot_2013-12-02-18-07-07

Successivamente facciamo TAB su “Leggi codice a barre

Screenshot_2013-12-02-18-07-12

Posizioniamo lo smartphone sullo schermo per leggere il codice a barre e generare i codici di accesso.

Apparirà subito dopo la voce relativa al vostro server (es: root@hostname):

Screenshot_2013-12-02-18-05-36

A questo punto l’applicazione è pronta, ritorniamo sul nostro sistema Linux e continuiamo la configurazione. Eravamo rimasti alla domanda:

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

diamo nuovamente si “y” anche altre domande.

A questo punto non rimane altro da fare che editare il file di configurazione di pam con il nostro editor preferito:

# nano /etc/pam.d/sshd

e aggiungere alla fine del file:

auth required pam_google_authenticator.so

salvate e modificate il file di configurazione sshd_config con il vostro editor preferito:

# nano /etc/ssh/sshd_config

modificando la voce da:

ChallengeResponseAuthentication no

a

ChallengeResponseAuthentication yes

salvate e riavviate il servizio sshd con il comando:

Per Debian/Ubuntu

# service ssh restart

Per RHEL/CentOS

# service sshd restart

Per ArchLinux

# systemctl restart sshd

A questo punto, se tutto andato bene, proviamo connettendoci al server in ssh:

sshok

Per abilitare lo stesso codice su altri utenti di sistema basta copiare il file /root/.google_authenticator nella home del proprio utente. Mentre se si vuole un Token a utente basta rilanciare il comando google-authenticator con l’utente desiderato.

Con questo è tutto!!! alla prossima!!! ;-)



  • Francesko1973

    Ciao Alessio,sto cercando di controllare da remoto il desktop con il mio samsung android.
    Sul server vnc (archlinux con xfce) ho installato come da wiki il pacchetto vncserver(tigervnc), mentre sul client android ho installato androidVNC.
    Purtroppo non riesco ad accedere.
    Quando su androidVNC mi chiede di inserire l’Ip della macchian, a quale IP si riferisce?a quello pubblico forse?
    Su arch non ho ancora installato SSH, volevo intanto provare senza protezione.
    Scusa se la domanda è un po’ fuori tema, grazie!

    • Lantuin

      Ciao Francesco,

      intervengo io. Innanzitutto scusami ma per dovere di cronaca devo dirti che sei un po’ OT :-) Comunque sia provo a risolvere la tua problematica.

      VNC e SSH innanzitutto sono due protocolli completamente differenti e l’utilizzo dell’uno non influisce sull’utilizzo dell’altro. Se hai correttamente configurato il server vnc, l’ip che devi inserire in androidVNC sarà quello della tua lan interna se vuoi collegarti attraverso la tua rete casalinga, quello pubblico (solo se hai aperto però la regola sul firewall del tuo switch/modem) se vuoi collegarti attraverso la rete internet.

      Spero di aver risolto il tuo problema :)

      • Francesko1973

        Ciao, grazie della risposta.
        Adesso ho le idee molto più chiare, non mi resta che verificare la configurazione del server e riprovare.