Dopo aver installato il server SSH è importante sottolineare che esistono diversi parametri che permettono di definire il suo comportamento in specifiche condizioni, come per esempio il mantenimento del numero di connessioni inattive dopo un certo limite di tempo, le tecniche di autenticazione da poter usare o il numero di bit che deve contenere la chiave del server.
In questa lezione vedremo come la configurazione di tali parametri, così come di molti altri, permetta una gestione e una pianificazione di policy di sicurezza più o meno stringente per lo stesso server SSH. Alcune di queste opzioni divengono disponibili grazie alla modifica di un file di configurazione a livello del server o a livello utente, mentre altre al momento della sua compilazione.
Questa distinzione verrà maggiormente dettagliata nel corso di questa lezione.
Avviare il server SSH
Normalmente, un server SSH viene eseguito durante l'avvio del computer host e lasciato in esecuzione come demone. In alternativa, è anche possibile invocare il server manualmente. Ciò è utile quando si vuole debuggare il server SSH per sperimentare le sue possibili opzioni di configurazione.
Nella maggior parte dei casi, su un computer è in esecuzione un solo server SSH. Questo è in grado di gestire più connessioni (connessioni multiple), grazie alla generazione di processi figli, uno per ogni connessione in entrata. Per avviare più server SSH si possono lanciare due copie del demone SSH in ascolto su porte TCP diverse. Il server SSH viene avviato semplicemente digitando il comando sshd
.
Overview configurazione
Come accennato all'inizio di questa lezione, il comportamento del server sshd
può essere gestito a tempo di compilazione, a livello di server e a livello utente. Nello specifico:
- la configurazione a tempo di compilazione avviene quando il server
sshd
viene compilato. Ad esempio, un server può essere compilato con o senza il supporto per l'autenticazionerhosts
. - La configurazione a livello di server viene eseguita da un amministratore di sistema e si applica a un'istanza in esecuzione di
sshd
. Ad esempio, un amministratore può negare l'accesso SSH a tutti gli host di un determinato dominio o mettere in ascolto il server su una particolare porta. La configurazione a livello di server può dipendere anche dalla configurazione in fase di compilazione. Ad esempio, le opzioni di autenticazione basate su host di un server funzionano solo se il server è stato compilato con il supporto per l'autenticazione basata su host. Altrimenti, la configurazione non ha effetto. - La configurazione per account viene eseguita dall'utente finale, in particolare, il proprietario dell'account a cui è stata rilasciata una connessione SSH. Ad esempio, gli utenti possono autorizzare o negare l'accesso ai propri account da determinati host, sovrascrivendo la configurazione a livello di server.
Supponiamo che l'utente A sulla macchina client.html.it
avvii un client SSH. Anche il comportamento del client è determinato da diversi fattori (similmente a quanto avviene con il server), ovvero:
- il file di configurazione del client a livello di macchina su
client.html.it
; - il file di configurazione del client dell'utente A;
- le opzioni della riga di comando usate da A quando invoca il client.
Un server SSH in esecuzione su server.html.it
accetta la connessione di A all'account B. Il comportamento del server è determinato dalle opzioni di compilazione utilizzate quando è stato compilato, dal file di configurazione del server a livello di macchina su server.html.it
, dalle opzioni della riga di comando utilizzate quando il server SSH è stato avviato e dal file delle configurazioni personali del server di B (ad esempio, il file di authorized_keys
).
Con i possibili tre livelli di configurazione del server e i diversi parametri da poter modificare le cose possono risultare complicate.
In particolare, è bene sottolineare che le diverse configurazioni possono lavorare all'unisono o annullarsi a vicenda. Per esempio, l'utente B può configurare il suo server.html.it
per accettare connessioni da client.html.it
, mentre l'amministratore di sistema del server server.html.it
può configurarlo per rifiutarle.
Gli amministratori devono quindi non solo comprendere come configurare il server, ma anche come le loro scelte possano andare a impattare con le altre tipologie di configurazioni. Di seguito daremo delle informazioni circa la configurazione lato server per mezzo di file e linea di comando, tralasciando quella in fase di compilazione, che necessiterebbe di una lezione a parte.
File di configurazione del server
Il file di configurazione del server OpenSSH si trova tipicamente al path /etc/ssh/sshd_config
(su Windows %ProgramData%\ssh\sshd_config
).
Il file contiene keywords, dette anche variabili di configurazione, e relativi valori. Le keywords non fanno distinzione tra maiuscole e minuscole: infatti, la keyword Port
o port
, PoRt
, etc., sono tutte trattate in modo identico. Ad esempio, per impostare la porta TCP su cui il server sarà in ascolto, sul file di configurazione del server SSH si dovrà andare a modificare la riga contenente la keyword Port
seguita dal valore numerico della porta, es: Port 1050
.
È possibile trovare nel file numerose righe precedute dal carattere hash (#
), per indicare che queste sono attualmente commentate e che quindi non verranno considerate dal server.
Come abbiamo accennato, i file di configurazione del server possono essere svariati e l'amministratore può decidere quale file caricare in base alle proprie necessità. Per utilizzare un file di configurazione diverso da quello predefinito, bisogna eseguire da riga di comando l'istruzione:
$ sshd -f /usr/local/ssh/nomefile_configurazione
fornendo come argomento il nome del file alternativo.
Un aspetto importante da sottolineare quando si parla di configurazioni tramite file riguarda le autorizzazioni per utente. Il server OpenSSH si aspetta di trovare la chiave pubblica del client SSH all'interno del file ~/.ssh/authorized_keys
. Questo path può essere cambiato grazie alla keyword AuthorizedKeysFile
, all'interno del file /etc/ssh/sshd_config
del server, seguito dal nuovo path.
I nomi dei file possono essere assoluti o relativi alla home directory dell'utente. Inoltre, il percorso può contenere alcuni simboli speciali: %h
per indicare la home directory dell'utente, %u
per il nome utente o %%
per il segno di percentuale. Quindi, con questa riga:
AuthorizedKeysFile /usr/local/access/%u
all'interno del file /etc/ssh/sshd_config
del server, l'utente A si autenticherà e il file di autorizzazione utente sarà copiato nella directory /usr/local/access/A
.
Dopo aver modificato un file di configurazione server come possiamo sapere che funzionerà e che avrà gli effetti desiderati?
La risposta a questo quesito è semplice e basterà avviare il server OpenSSH con l'opzione -t (test)
. Se non vengono riscontrati problemi, il server restituirà uno stato di uscita pari a zero per indicare il successo del funzionamento. Altrimenti, i messaggi di errore verranno stampati sullo standard error e il server uscirà con uno stato non nullo.
Configurazione del server tramite linea di comando
Un'altra possibilità di configurazione può avvenire quando si invoca il server tramite riga di comando. Ad esempio, il valore della porta può essere specificato direttamente dalla riga di comando con l'opzione -p
:
$ sshd -p 1050
Le opzioni della riga di comando sovrascrivono le impostazioni del file di configurazione. Pertanto, se il file di configurazione indica la porta 1030
, ma il server viene invocato con -p 2470
, la porta utilizzata sarà la 2470
.
Conclusioni
Dobbiamo tenere presente che i moderni server SSH sono attivamente sviluppati e le loro configurazioni (keyword etc. etc.) sono costantemente soggette a cambiamenti, oltre che ad essere numerose.
Quindi, è bene tenersi informati leggendo la loro documentazione e studiandola in base alle proprie necessità. Nella prossima lezione tratteremo la configurazione lato client.