Progetto

Generale

Profilo

La gestione delle chiavi SSH » Cronologia » Versione 7

Simone Piccardi, 03-09-2024 15:12

1 1 Simone Piccardi
h1. La gestione delle chiavi SSH
2
3 5 Simone Piccardi
L'utilizzo di una connessione cifrata con il protocollo SSH (Secure SHell) è ormai una necessità imprescindibile per poter effettuare in sicurezza la gestione remota di un server tramite la riga di comando. Nel caso di Linux questa funzionalità viene universalmente fornita dal progetto OpenSSH, che fornisce sia la parte server (il servizio da installare sul server, che consente di collegarsi allo stesso) che la parte client col comando @ssh@ da eseguire sulla propria workstation. Il protocollo può essere usato, per la parte client, anche nel mondo Windows dove però è più comune utilizzare come client un programma grafico, Putty. Benché sia il servizio SSH renda sempre possibile accedere usando la normale autenticazione con username e password, è fondamentale per la sicurezza utilizzare il supporto fornito dal progetto per l'autenticazione a chiavi, che sulle distribuzioni recenti è anche l'unico che viene attivato nell'installazione di default  per dare un accesso amministrativo con l'utente root.  Vedremo in questo articolo come effettuare una serie di operazioni relative alla gestione ed all'uso delle chiavi con OpenSSH. 
4 1 Simone Piccardi
5
h2. Creazione di una coppia di chiavi
6
7 5 Simone Piccardi
Il primo passo per l'utilizzo di questo meccanismo di autenticazione è la creazione di una coppia di chiavi personale: una chiave privata, che è quella che ci permetterà di identificarci distribuendo a destinazione la corrispondente chiave pubblica. Questa operazione viene eseguita, come la gran parte delle operazioni relative alla gestione delle chiavi, dal comando @ssh-keygen@, da invocare sulla propria workstation senza nessun argomento:
8 2 Simone Piccardi
9
<pre>
10
root@bookworm:~# ssh-keygen 
11
Generating public/private rsa key pair.
12
Enter file in which to save the key (/root/.ssh/id_rsa): 
13
Enter passphrase (empty for no passphrase): 
14
Enter same passphrase again: 
15
Your identification has been saved in /root/.ssh/id_rsa
16
Your public key has been saved in /root/.ssh/id_rsa.pub
17
The key fingerprint is:
18
SHA256:AlZFxA+olPPKhpz9KwdvRwIwDMpgNJFo7Im2IQCCVjI root@bookworm
19
The key's randomart image is:
20
+---[RSA 3072]----+
21
|@E+. ..*+        |
22
|X=B +.. o        |
23
|B..+o+   o       |
24
|o= .o..   .      |
25
|o.o= o. S        |
26
| .+ * ...        |
27
|   . + o         |
28
|    . = .        |
29
|     +.o         |
30
+----[SHA256]-----+
31
</pre>
32
33 3 Simone Piccardi
in questo caso anzitutto ci viene chiesto di indicare su quale file salvare la chiave privata (quella pubblica sarà sempre salvata in un secondo file con lo stesso nome ed un ulteriore suffisso @.pub@). Il default è usare il file @.ssh/id_rsa@ nella home dell'utente che esegue il comando. Viene chiesto poi l'inserimento di una passphrase (un modo per enfatizzare la necessità di usare qualcosa di più robusto della classica password elementare), da ripetere due volte per conferma. Si può creare una chiave senza password premendo due volte invio.
34 2 Simone Piccardi
35
Viene poi stampata una immagine in ascii-art che illustra visivamente il contenuto della chiave, indicandone anche gli algoritmi crittografici usati e le dimensioni. Il default è usare l'algoritmo RSA, ma con l'opzione @-t@ si può indicare di usarne uno delle altre due possibili alternative, @ecdsa@ e @ed25519@ (ma in genere non ci sono motivi specifici per cambiarlo). Come accennato si troveranno la chiave pubblica e la chiave privata rispettivamente nei file @.ssh/id_rsa@ e @.ssh/d_rsa.pub@.
36 1 Simone Piccardi
37 5 Simone Piccardi
h2. Installare una chiave pubblica per l'accesso remoto
38 1 Simone Piccardi
39 3 Simone Piccardi
Per poter accedere ad un server remoto usando l'autenticazione a chiavi occorre che la propria chiave pubblica venga inserita sullo stesso fra quelle autorizzate.  Pertanto quello che dovrà essere fatto dal lato client è solo quello di mettere a disposizione per l'installazione sul server la propria chiave pubblica, vale a dire il file @.ssh/d_rsa.pub@.
40 1 Simone Piccardi
41 3 Simone Piccardi
Per fornire un accesso SSH con autenticazione a chiavi OpenSSH richiede che la stessa sia inserita fra quelle installate nel file @.ssh/authorized_keys@ nella home dell'utente su cui ci si vuole collegare. Pertanto, assumendo che si stata resa disponibile la suddetta chiave pubblica a destinazione nel file @nuovachiave.pub@ (assumiamo che sia stata caricata da chi ne ha la possibilità, in genere l'amministratore del server) questa potrà essere aggiunta a quelle autorizzate semplicemente eseguendo:
42
43
<pre>
44
cat nuovachiave.pub >> ~/.ssh/authorized_keys
45
</pre>
46
47
che la aggiunge in coda (sono sempre una per riga) a quelle eventualmente già presenti.  Si tenga presente che questo comando deve essere eseguito in genere dall'utente a cui sui vuole dare accesso, che è l'unico che deve poter scrivere sul file, se lo si fa eseguire ad esempio a root per scrivere nella home di un altro utente occorrerà sincerarsi che il file sia preesistente perché altrimenti verrà creato da root, e non appartenendo più all'utente ed al suo gruppo, OpenSSH non consentirà più nessun accesso. 
48
49 4 Simone Piccardi
Una volta completata questa installazione, ci si potrà collegare alla macchina dal client invocando @ssh utente@server.remoto.it@ ma al posto della password dell'utente remoto a chi si collega verrà chiesta la passphrase della propria chiave privata (e se usa un agent SSH solo la prima volta che la utilizza). Si noti come in questo caso chi si collega non deve sapere la password dell'utente remoto e l'amministratore del server remoto può revocare l'accesso semplicemente rimuovendo la chiave pubblica, senza necessità di cambiare una password che non è neanche necessario sia presente.
50 1 Simone Piccardi
51
h2. Cambiare la passphrase di una chiave privata
52 3 Simone Piccardi
53 7 Simone Piccardi
La protezione della propria chiave privata è essenziale per la sicurezza, perché chiunque ne entri in possesso potrà avere accesso diretto a tutti i server per cui si è autorizzati. Per questo è essenziale usare una buona passphrase, ed inoltre, se si è vincolati a rispondere ai requisiti sulla normativa della privacy, sarà necessario cambiarla ogni tre o sei mesi. 
54
55 5 Simone Piccardi
Per cambiare la passphrase della propria chiave privata è sufficiente usare il comando @ssh-keygen  -p@, questo chiederà prima di indicare in quale file questa è contenuta indicando il default, che è @~/.ssh/id_rsa@. Questo verrà accettato se si preme invio (se no ne può indicare un altro con @ssh-keygen  -p -f  /path/to/file@)  e poi chiederà la vecchia passphrase e la nuova due volte, riscrivendo il file con la chiave privata cifrata dalla nuova passphrase. 
56 1 Simone Piccardi
57 7 Simone Piccardi
Dato che quanto è necessario per l'autenticazione presso i server remoti è solo il contenuto della propria chiave privata, non sarà necessario effettuare nessuna operazione sugli stessi, dato che questo non cambia, cambiano soltanto le modalità in cui la si rende accessibile al comando @ssh@, che dovrà essere fatto con la nuova passphrase.
58 1 Simone Piccardi
59
h2. Convertire una chiave pubblica di Putty per OpenSSH
60
61 7 Simone Piccardi
I comandi visti finora si applicano all'uso delle chiavi private con il client a riga di comando di Linux, ma come detto su Windows il client più comune è Putty, che non solo fornisce il programma di accesso al protocollo, ma anche un opportuno emulatore di terminale per l'uso da parte della riga di comando su una macchina Unix. Le chiavi SSH generate da Putty però usano un formato diverso rispetto a quelle di OpenSSH, in stile PEM (analogo a quello usato da OpenSSL), e sono della forma:
62 1 Simone Piccardi
63
<pre>
64
---- BEGIN SSH2 PUBLIC KEY ----
65
Comment: "rsa-key-20240709"
66
AAAAB3NzaC1yc2EAAAADAQABAAABAQCa8ajLS0A7xNSLCp/VuB+kXRbKomuqd2dX
67
...
68
BWiQN9v1n21YSaC+NCuCXO/7POJrGhfWe/ppL/jPKXTGKl0x5aEN
69
---- END SSH2 PUBLIC KEY ----
70
</pre>
71
72 7 Simone Piccardi
In queste forma le chiavi non sono adatte all'uso nel file @.ssh/authorized_keys@ usato dalla parte server di OpenSSH, pertanto se le si devono installare per fornire un accesso devono essere opportunamente convertite nel formato a riga singola usato da OpenSSH con il comando:
73 1 Simone Piccardi
74
<pre>
75
ssh-keygen -i -f putty_pub.key > openssh_key.pub
76
</pre>
77 6 Simone Piccardi
78 7 Simone Piccardi
fatto questo per l'installazione su un server remoto si potrà procedere come prima, usando il file @openssh_key.pub@ così ottenuto.