Come parte del processo di messa in sicurezza del tuo VPS (vedi l'articolo «Come mettere in sicurezza un VPS con sistema operativo Ubuntu Linux»), l'accesso SSH tramite nome utente e password potrebbe essere un elemento critico per la sicurezza. Tendenzialmente si cerca di utilizzare password facili da memorizzare (anche se contengono caratteri speciali, esempio Ci@oM0nd0): questo può esporti a tentativi d'accesso da parte di utenti malintenzionati — utilizzando la tecnica del brute force, infatti, è possibile trovare la tua password.
Questa tecnica d'attacco si basa sostanzialmente sul provare ad accedere al server utilizzando un database di password conosciute, finché non si riesce a trovare quella corretta. Se hai seguito la guida indicata all'inizio di questo articolo, hai già configurato un utente senza privilegi che può utilizzare sudo e hai installato Fail2ban per tenere alla larga i tentativi di accesso non desiderati. Con i prossimi step andremo ad aumentare ulteriormente la sicurezza del VPS.
Prerequisiti
- Un VPS con sistema operativo Linux
- Un utente con privilegi adeguati, ovvero sudo (in questo esempio si chiama utente_vps)
- Il proprio computer deve utilizzare macOS o una qualsiasi distribuzione basata su Linux
- L'applicazione ssh-keygen, normalmente presente su Linux e macOS
- L'applicazione ssh-copy-id, normalmente presente su Linux e macOS
In questa guida vedremo come creare la coppia di chiavi SSH utilizzando ssh-keygen, che è parte di OpenSSH.
Come funziona l'accesso tramite chiavi SSH
Prima di partire, facciamo un piccolo accenno al funzionamento. Una coppia di chiavi SSH è costituita, per l'appunto, da due chiavi crittografiche, una pubblica e una privata, utilizzate per autenticare un client su un server SSH. La chiave privata viene conservata dal client e deve essere tenuta al sicuro e non divulgata: se viene compromessa, persa o rubata consentirà a chi ne è in possesso di accedere al server. La corrispondente chiave pubblica può essere condivisa senza alcuna conseguenza, oltre che essere normalmente caricata sul server a cui si vuole accedere. Quest'ultima, infatti, viene utilizzata per criptare i «messaggi» che solo la chiave privata può decriptare.
In una configurazione standard, la chiave pubblica viene inserita all'interno del file authorized_keys presente nella cartella ~/.ssh/ di ogni utente abilitato. Quando un client prova a collegarsi in SSH sul server, il servizio verifica se l'utente è in possesso della chiave privata: in caso di esito positivo sarà garantito l'accesso.
Step 1 — Creazione delle chiavi con ssh-keygen
- Apri l'applicazione Terminale
- Digita il comando:
oppure, se sei su Linux:$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/tuo_utente_macos/.ssh/id_rsa):
Ti chiederà dove salvare la coppia di chiavi: puoi lasciare il percorso che ti propone o sceglierne uno che preferisci. Nel caso in cui dovesse esistere già una coppia di chiavi, comparirà il messaggio:Enter file in which to save the key (/home/tuo_utente_linux/.ssh/id_rsa):
In questo caso sta a te decidere se sovrascriverle o se interrompere la procedura e ripeterla cambiando il percorso di salvataggio delle nuove chiavi./Users/tuo_utente_macos/.ssh/id_rsa already exists. Overwrite (y/n)? - Per una maggiore sicurezza puoi specificare anche una passphrase, che dovrai inserire ogni volta che userai le chiavi. Sta a te decidere: se premi INVIO senza scrivere nulla, non ti servirà alcuna password.
A questo punto abbiamo creato la coppia di chiavi, salvata nel percorso indicato all'inizio della procedura (normalmente la directory nascosta .ssh all'interno del tuo profilo utente): nell'esempio le puoi trovare in /Users/tuo_utente_macos/.ssh/ oppure /home/tuo_utente_linux/.ssh/. All'interno della cartella troverai due file, id_rsa e id_rsa.pub: come suggerisce il nome, id_rsa.pub è la chiave pubblica, che dovrà essere caricata sul tuo VPS, mentre id_rsa è la chiave privata e non dovrà assolutamente essere condivisa.
Step 2 — Copiamo la chiave sul VPS
Procediamo alla copia della chiave pubblica sul VPS. In questo caso ci viene in aiuto il comando ssh-copy-id: dall'applicazione Terminale sul tuo macOS o Linux, digita:
$ ssh-copy-id Nome_Utente@IPv4_del_VPS
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/tuo_utente_macos/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Nome_Utente@IPv4_del_VPS's password:
In ogni caso devi inserire la password del tuo utente sul VPS per confermare la copia.
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'Nome_Utente@IPv4_del_VPS'"
and check to make sure that only the key(s) you wanted were added.
Se è stato fatto tutto correttamente, collegandoti ora in SSH sul VPS con l'utente senza privilegi accederai direttamente alla console remota senza che venga richiesta la password — salvo che tu non abbia impostato la passphrase al momento della creazione delle chiavi: in quel caso non userai la password del tuo utente sul VPS, bensì la passphrase che hai deciso di impostare.
Conclusioni
A questo punto potrai fare accesso al tuo VPS con un pizzico di sicurezza in più. C'è un ulteriore accorgimento che puoi mettere in campo: ora che le chiavi funzionano, puoi disabilitare del tutto l'accesso con password al servizio SSH.
Guida pubblicata originariamente sul blog di VPS GREEN, il servizio VPS sul nostro cloud privato green.