Configurare OpenSSH per un utilizzo di base ma ottimale

Spesso quando si cerca di configurare un servizio di ssh su server casalinghi (o comunque di basso interesse) si riscontrano problemi d'accesso e restituzione di Permission Denied per problemi dovuti alle publickey, che, avendo registrato le chiave pubbliche degli accessi, non riconosce la nuova provenienza come "fidata". Risolviamo il problema ed eseguiamo una configurazione di base.

Scarichiamo il tarball di OpenSSH oppure procuriamoci il pacchetto
In Debian è sufficente un la prima connessione, per poi verificare e confrontare la chiave salvata con quella inviata dal server ad ogni nuovo login. Se queste assumono valori diversi il server assume la differenza come un possibile attacco man-in-the-middle e quindi blocca istantaneamente l'accesso e restituisce un "Permission Denied".

Innanzitutto dobbiamo prendere delle precauzioni iniziali: se si guarda in /etc/ssh si vedranno diversi file che assumono come nome ssh_host_dsa_key, ssh_host_dsa_key.pub e la stessa cosa per RSA.
Questi sono i file contenenti le chiavi generate dal server al momento dell'installazione, è buona norma farne un backup, perchè la perdita di queste chiavi può compromettere la sicurezza del servizio.
Spostiamoci nella directory /etc/ssh:
# cd /etc/ssh
# cp /etc/ssh/ssh_host*_key* /mnt/backupdevice


Nel caso in cui le chiavi vengano perse bisogna rigenerarne
# ssh-keygen -t rsa -b 1024
(con -b si possono modificare i bit disponibili alla chiave).

Ora andiamo a modificare il file di configurazione che risiede in /etc/ssh/sshd_config

Ecco le variabili essenziali da modificare per garantire un livello base di sicurezza:
# Per impedire che possano essere fatti accessi root tramite ssh
PermitRootLogin  no
# Per impedire che l'uso e l'invio di password vuote durante il login
PermitEmptyPassword  no


Ed infine:
# Con questa variabile si ignora l'utilizzo dei file ~/.ssh/known_hosts, in questo modo si evitano problemi dovuti ai mismatch delle chiavi pubbliche e ci si bassa unicamente sul login tramite user e password
IgnoreUserKnownHosts  yes


E' possibile anche aggiungere una maggiore ristrettezza ai login utilizzando queste opzioni:

AllowUsers utente1 utente2 utente3
AllowGroups group1 group2 group3


Ma bisogna utilizzare con cautela perchè il server SSH gestisce questi parametri come AND: ossia il login deve essere sia un user permesso sia un group permesso.

Al contrario è anche possibile configurare SSH per far eseguire il login senza password, unicamente tramite le chiavi pubbliche.
Per fare questo è sufficiente copiare la nostra chiave pubblica in fondo all'apposito file di configurazione (o comunque dell'utente a cui si vuole permettere l'accesso):

# cat pubkey_user.pub >> ~/.ssh/authorized_keys

Al contrario, per revocare il permesso di una chiave basta semplicemente editare il file authorized_keys e rimuovere la chiave.

ATTENZIONE: per effettuare questo tipo di login (quindi unicamente basato sulle chaivi) è necessario che l'opzione IgnoreUserKnownHosts sia commentata o settata su no

# IgnoreUserKnownHosts yes
oppure
IgnoreUserKnownHosts no

Infine per puro senso estetico o pratico è possibile anche inserire un banner per ogni login nel nostro server SSH.
Bisogna abilitare la seguente opzione sempre in /etc/ssh/sshd_config:
banner /dir/banner_server.txt

Una volta applicati i cambiamenti restartiamo il server ssh:
# /etc/init.d/sshd restart

Questo è tutto quello che serve per una configurazione essenziale di un server ssh senza troppe pretese.

Privacy Policy