Introduzione
SSH (secure shell) è un protocollo cifrato di comunicazione che permette di collegarsi a un server remoto. Molto spesso, lavorando su un server AlmaLinux, ti sarà capitato di connetterti a un terminale tramite il protocollo SSH attraverso un'autenticazione basata su password.
In questa guida, ti spiegheremo come migliorare la sicurezza del protocollo impostando delle chiavi SSH, le quali miglioreranno la sicurezza nel processo di login al tuo server.
Creare il paio di chiavi RSA
Il primo step da seguire è la generazione di una chiave sul client. Dalla macchina locale, quindi, occorrerà aprire il terminale e inserire il seguente comando:
$ ssh-keygen
Di default, il comando creerà un paio di chiavi RSA di 2048 bit. È possibile specificare un maggiore numero di bit da impiegare per la chiave, aggiungendo al comando l'opzione -b 4096, ad esempio, per estendere il numero di bit a 4096.
Eseguito il comando, dovresti ottenere il seguente output, in cui ti verrà richiesto di specificare il file in cui salvare la chiave.
Premendo semplicemente su ENTER, salverai nella subdirectory .ssh/, presente nella tua home, come nell'esempio.
Nel caso in cui la chiave sia già stata generata, ti verrà chiesto semplicemente se tu desideri sovrascrivere o meno il salvataggio precedente. Attenzione poichè sovrascrivere la chiave precedente ti farà perdere tutte le possibilità di autenticazione con essa.
Successivamente, ti verrà richiesta una password con cui poter proteggere il paio di chiavi generato. Ti consigliamo di farlo, in quanto aggiunge un maggiore livello di sicurezza nel complesso.
Al termine di tutto ciò, riceverai un output di conferma della creazione di una chiave pubblica e privata che potranno essere usate per l'autenticazione al server.
Il prossimo passo sarà copiare la chiave pubblica sul server AlmaLinux, in modo tale da poter usare il tuo paio di chiavi per autenticarti ad esso.
Copia della chiave pubblica nel server AlmaLinux
SSH offre uno specifico comando per copiare velocemente la tua chiave pubblica nel server AlmaLinux. Il comando si chiama ssh-copy-id.
Copia della chiave pubblica tramite ssh-copy-id
Il comando è di base incluso in molti sistemi operativi ed è molto probabile sia disponibile sulla tua macchina locale. In primis, però, bisogna che tu abbia un accesso impostato tramite password sul tuo server SSH.
Per copiare la chiave sul server, occorrerà specificare la seguente sintassi:
$ ssh-copy-id nomeutente@hostremoto
Dovresti poter vedere un output simile:
Ciò appare in questo modo poichè il tuo computer non riconosce l'host remoto. La prima volta in cui ti connetti a un nuovo host, ti ritroverai un output simile. Conferma con yes e premi ENTER per proseguire.
Il sistema ti chiederà ora di inserire la password con cui la chiave è protetta per permetterti di connetterti all'host remoto.
Inserito tutto correttamente, la chiave verrà aggiunta, nel tuo server, nel file contenente la lista delle chiavi autorizzate. Il file si troverà nel percorso ~/.ssh/authorized_keys.
Terminato l'aggiornamento della chiave sul server remoto, puoi passare al prossimo step.
È bene sapere che, a volte, il comando ssh-copy-id potrebbe non essere incluso sul tuo sistema operativo. Ci sono, per fortuna, delle alternative al metodo appena spiegato per copiare la propria chiave.
Copia della chiave pubblica tramite SSH
Una valida alternativa è il comando cat, che permette di leggere il contenuto della chiave pubblica SSH sulla tua macchina locale e comunicarla tramite una pipeline al server, usando una connessione SSH.
Potrai, infine, copiare quell'output all'interno del file authorized_keys. Per inserire le nuove chiavi pubbliche nel file, senza sovrascriverlo, sarà importante specificare il simbolo >> nella sintassi. L'opzione specificherà di "appendere" le nuove chiavi alla fine del file, invece che sovrascriverlo.
Il comando avrà una sintassi simile:
$ cat ~/.ssh/id_rsa.pub | ssh nomeutente@nomehost "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
L'iter di output sarà lo stesso del caso precedente: vi verrà chiesta una conferma, nel caso in cui sia la prima volta che ti connetti all'host, e vi verrà chiesto di inserire la password associata alla chiave pubblica.
Al termine, come nel caso precedente, la chiave pubblica, contenuta in id_rsa.pub, verrà copiata e "appesa" alla fine del file authorized_keys.
Copia manuale della chiave pubblica
In questa sezione ti faremo vedere come copiare la tua chiave pubblica manualmente all'interno del file authorized_keys, accedendo alla tua macchina remota.
Il primo step è mostrare il contenuto del file id_rsa-pub, tramite il comando:
$ cat ~/.ssh/id_rsa.pub
L'output dovrebbe essere simile a questo:
A questo punto, esegui l'accesso alla tua macchina remota per proseguire. Ocorrerrà, prima di tutto, creare la directory ~/.ssh per ospitare la lista delle chiavi autorizzate nell'apposito file authorized_keys.
Per cominciare con la directory, usa:
$ mkdir -p ~/.ssh
Ora, puoi creare o modificare il file delle chiavi autorizzate, usando , anche in questo caso, il carattere >> per "appendere" la chiave pubblica all'interno del file.
$ echo tuachiavepubblica >> ~/.ssh/authorized_keys
Al posto di tuachiavepubblica, dovrai incollare l'ouput ottenuto precedentemente dalla tua macchina locale. È bene sapere che una chiave, solitamente, inizia con una sintassi simile: ssh-rsa AAAA.
A questo punto, dovrai sistemare i permessi per l'accesso a quel file:
$ chmod -R go= ~/.ssh
Questo comando rimuoverà in automatico tutti i permessi per quella directory a tutti i gruppi di utenti del server.
A questo punto, occorrerebbe non ricorrere all'utente root per gestire le chiavi del server. È quindi opportuno, loggandosi con l'utente root una volta, assegnare a un utente specifico i privilegi della cartella ~/.ssh.
chown -R nomeutente:nomeutente ~/.ssh
A questo punto del tutorial, ti sono stati elencati i diversi metodi per l'impostazione delle chiavi SSH.
Accedere al server AlmaLinux tramite le chiavi SSH.
È arrivato il momento di eseguire il login nel server sfruttando le chiavi SSH invece che le password degli account remoti.
Il primo passo è simile a quello della autenticazione tramite password:
$ ssh nomeutente@nomehost
Come nei casi precedenti, alla prima connessione il sistema chiederà una conferma.
A conferma data, se nel server sarà stata registrata la chiave pubblica, il login sarà immediato senza ulteriori richieste.
Disabilitare l'accesso al server tramite Password
Se sei stato in grado di accedere al server usando la chiave SSH e non la password, sarai riuscito a configurare con successo l'autenticazione SSH. A questo punto, occorre disabilitare il meccanismo di autenticazione con password.
Il motivo di questa scelta è la prevenzione di attacchi di tipo bruteforce, in cui vengono eseguiti innumerevoli tentativi di login con combinazioni di possibili password, fino a riuscire a trovare quella giusta. Ci sono altri modi per limitare queste possibilità agli utenti malintenzionati, come visto in altri tutorial riguardanti la sicurezza server.
Per procedere con questa modifica, assicurati di avere l'autenticazione SSH attiva per accedere con un utente root o, ancora meglio, con un utente non-root con privilegi sudo.
Eseguito l'accesso, apri il file di configurazione con un editor di testo. Nell'esempio:
$ sudo vi /etc/ssh/sshd_config
Nel file, ricerca la direttiva PasswordAuthentication e rimuovi dalla stringa il carattere # (per decommentare la riga e renderla una direttiva effettiva). Secondariamente, aggiungi il valore no dopo la voce sulla password.
In sintesi, la direttiva dovrebbe apparire in questo modo:
...
PasswordAuthentication no
...
Conclusi i cambiamenti, utilizza il tasto ESC e inserisci la stringa :wq per sovrascrivere il file e uscire dall'editor. Infine, riavvia il servizio tramite il comando:
$ sudo systemctl restart sshd
Prima di chiudere completamente , apri una nuova finestra di terminale e prova una connessione al server, così da poter capire subito se i cambiamenti siano stati eseguiti e chiudere in maniera sicura il server.
Nella nuova finestra, prova l'accesso:
$ ssh nomeutente@nomehost
A questo punto, se riuscirai ad autenticarti correttamente, saprai di essere riuscito a disabilitare l'uso delle password sul tuo server e a ricorrere solo alle chiavi SSH.
Conclusioni
Al termine del tutorial, sarai riuscito a configurare l'autenticazione tramite chiavi SSH e a disabilitare l'autenticazione tramite password.
È possibile approfondire ulteriori metodi per mettere in sicurezza altri tipi di server sui nostri tutorial, come l'impostazione di un numero massimo di accessi consentiti o la durata di una connessione senza autenticazione, prima che essa venga chiusa. Non dimenticare di approfondire tali norme perchè potrebbero proteggerti da diversi tipi di attacchi al tuo server.