SDB:Configurare openSSH

Questo articolo descrive alcune delle impostazioni più comuni di OpenSSH, consentendoti di migliorare la sicurezza e la facilità d'uso. Per favore assicurati di essere già in grado di usare OpenSSH per la connessione prima di cambiare qualsiasi opzione. In questo modo potrai diagnosticare più facilmente i problemi in caso resti chiuso fuori. Prima di procedere, leggi queste nozioni base su OpenSSH per configurare la prima connessione.
Provato su openSUSE Articoli consigliati Articoli correlati
Icon-checked.png

Icon-manual.png Icon-help.png

Premessa

Per seguire questo articolo è necessaria una conoscenza base di Linux/openSUSE, incluso:

  • Saper lavorare da linea di comando;
  • Saper modificare i file di testo;
  • Saper ottenere i privilegi di amministratore root (usando su, sudo o effettuando il login come root);
  • Avere familiarità con i moduli di YaST: Gestione di utenti e gruppi e Firewall;

E ovviamente, devi avere la rete configurata e attiva. Se vuoi configurare connessioni dall'esterno della tua LAN, devi essere in grado di aprire le porte necessarie sul tuo router.


File di configurazione

Sia SSHD che SSH fanno uso di file di configurazione. Questi file possono essere modificati facilmente con il tuo editor di testo preferito. Quando dai una prima occhiata a questi file, noterai che la maggior parte delle opzioni sono commentate (per esempio # opzione). Questo vuol dire che verranno letti come "commenti" e non come istruzioni di configurazione, quindi ignorate. Se, pertanto, viene commentata una variabile di configurazione, verrà usato il relativo valore di default. Un'altra cosa utile è che le opzioni già commentate mostrano già i valori di default. Per modificare un'opzione, togli il carattere di commento (il simbolo # all'inizio della linea) e cambiane il valore. Ogni qualvolta senti che una configurazione non sta funzionando, commentala aggiungendo il carattere # e il programma userà il relativo valore di default.

SSHD – Il server

SSHD (Secure Shell Daemon) dovrebbe essere avviato sul server (l'host remoto). SSHD gestisce le connessioni in entrata, l'autenticazione, le relative regole e la crittografia.

SSHD ha solo un file di configurazione, che si può trovare in /etc/ssh/sshd_config. Puoi modificare questo file usando il tuo editor preferito e da utente root. La configurazione di sshd è piuttosto generale e solo per integrare limitazioni per gli utenti che effettuano (provano ad effettuare) il login. I parametri di connessione attuali saranno impostati lato client. Quando configuri SSHD devi ricordati di consentire solo ciò che ritieni sicuro e appropriato. Per esempio: se proibisci il forwarding di X in SSHD, configurarlo lato client sarebbe inutile. Quindi pensa saggiamente a come intendi usare la connessione SSH quando configuri SSHD.

E' anche possibile configurare SSHD tramite YaST2 installando il pacchetto yast2-sshd. Questo pacchetto fornisce una GUI che aggiornerà opportunamente il file /etc/ssh/sshd_config per te. In questo articolo ci addentreremo nella modifica diretta di /etc/ssh/sshd_config

SSH – Il Client

SSH (Secure Shell) è uno dei programmi client del pacchetto OpenSSH. Questo programma viene usato per effettuare il login su una shell remota o per eseguire comandi da remoto direttamente. In questo articolo faremo riferimento ai file di configurazione di SSH, sebbene considerazioni analoghe si possono applicare anche a SFTP e SCP.

Ci sono tre modi per configurare SSH. Tutti e tre hanno le stesse opzioni che saranno passate come argomento ad SSH.

  1. File di configurazione dell'intero sistema: /etc/ssh/ssh_config
  2. File di configurazione personale: ~/.ssh/config
  3. Argomenti da linea di comando

Quando gli argomenti sono in contraddizione, verrà utilizzato solo l'ultimo argomento dato. Quindi gli argomenti da linea di comando verranno respinti da entrambi i file di configurazione e i file di configurazione personali verranno respinti da quelli di sistema.

Se stai usando un sistema con più utenti e questi utenti hanno i loro propri privilegi o usano host remoti differenti, una maniera intelligente sarebbe:

  • Configurare delle impostazioni generali per tutto il sistema /etc/ssh/ssh_config (dovrai essere root per farlo).
  • Configurare delle impostazioni di connessione dettagliate per ogni host nel file di configurazione personale ~/.ssh/config (ogni utente potrà configurare il proprio file di configurazione personale, permettendogli di impostare in maniera dettagliata i dati di connessione, senza necessità di essere root). Potrai usare questo file per configurare quasi tutte le connessioni di cui avrai bisogno.
  • Gli argomenti da linea di comando possono essere usati per annullare un certo parametro (per esempio per test o manutenzione).

Tieni a mente che il protocollo SSH è pensato per essere usato sopra una rete non sicura tra due macchine non fidate. Questo vuol dire che la sicurezza non è un problema solo del sistema server, ma anche di quello client. Quindi, per esempio, se non ti fidi del server, non abilitare il forwarding di X. Un admin fuorviato su un server spoofato potrebbe monitorare le tue esatte combinazioni di tasti (per esempio, le password) che vengono inviate al server X. Quindi, non abilitare semplicemente tutte le funzionalità nei file di configurazione, abilita solo ciò di cui hai bisogno. La cosa buona della configurazione sottostante è che l'utente stesso può determinare la fiducia singolarmente per ogni host.

Ricaricare la configurazione

Quando effettui una modifica a /etc/ssh/sshd_config devi riavviare il demone SSHD o fargli ricaricare il suo file di configurazione invocando i comandi console:

# rcsshd restart

oppure

# rcsshd reload

Puoi farlo anche a connessione SSH attiva senza bisogno di effettuare il log out. I cambiamenti, tuttavia, avranno effetto, per ogni utente, la prossima volta che effettuano il log in.


Ascoltare connessioni in entrata

Il primo passo nella configurazione è: "Dove ascolterà SSHD?" Per rispondere possiamo impostare le seguenti opzioni:

Indirizzo

Di default il demone SSHD è in ascolto su tutti gli indirizzi locali. Se hai un computer connesso a più reti e vuoi usarne una sola con OpenSSH, puoi specificarla in questo modo. Cerca e cambia le seguenti opzioni nel file /etc/ssh/sshd_config come utente root:

-da-
#ListenAddress 0.0.0.0
-a-
ListenAddress * il tuo indirizzo IP *

Se stai usando una sola interfaccia o sei connesso ad una rete con DHCP, è conveniente mantenere la configurazione di default. Se vuoi usare più interfacce, ma non tutte, puoi specificare ciascun indirizzo con una nuova linea che comincia ListenAddress. Ogni linea ha bisogno di essere preceduta dall'opzioni Port

Porta

Di default SSHD è in ascolto sulla porta 22. Puoi scegliere se cambiarla o meno, considera ovviamente che nel caso qualche attaccante stesse cercando delle connessioni per entrare, controllerebbe prima le porte più comuni, proprio come la 22. Cambiare il numero di porta riduce in maniera considerevole il numero di attacchi automatici eseguiti da eventuali attaccanti o computer zombie. Dall'altra parte, cambiare il numero di porta implica configurarla su tutti i client che si devono connettere all'host. Negli esempi successivi useremo la porta 2222 come alternativa.

Per cambiare il numero della porta in ascolto, apri il file /etc/ssh/sshd_config da utente root e cambia:

#Port 22
-in-
Port 2222
Ricorda di aprire la nuova porta sul firewall e, se è possibile, chiudi la vecchia porta. Ricordati anche di ricaricare la nuova configurazione.

Configurare il tuo SSH per connettersi a SSHD

Ora avremo bisogno di configurare SSH (il client) per connettersi alla porta impostata precedentemente su SSHD. Prima di tutto, dobbiamo modificare il file /etc/ssh/ssh_config. Vedrai l'opzione Host *. L'asterisco indica tutti gli host remoti, quindi tutte le opzioni specificate sotto una linea “Host” in particolare si applicheranno a quell'host soltanto, fino alla prossima sezione Host, se presente. Questo vuol dire che le opzioni seguenti, nel file che stiamo considerando, si applicheranno a tutti gli host. Lascia questa opzione al suo valore di default. Controlliamo ora l'opzione Protocol. Questa deve essere tolta dal commento e impostata su 2 (Protocol 2), così ci assicuriamo che non venga usato il vecchio e ora insicuro protocollo 1. Ora salva e chiudi questo file. Quando non ci sono connessioni aperte non devi riavviare nulla per confermare i cambiamenti, diventeranno effettivi la prossima volta che apri una connessione SSH.

File di configurazione personale

In questa sezione verrà spiegato come impostare il proprio file di configurazione personale con dati relativi ad ogni singolo host. Per prima cosa controlla se la cartella .ssh esiste nella tua directory home e se è configurati con gli opportuni permessi per il proprietario (tu). Se la directory non esiste, crearla come utente normale.

$ mkdir ~/.ssh $ chmod 700 ~/.ssh

Ora crea un nuovo file di testo usando il tuo editor di testo preferito e salvalo come ~/.ssh/config. Ora possiamo configurare le connessione in maniera speicifica per ogni host:

Host ssh-server
      Hostname 192.168.100.103
      Port 2222

Qui imposti un nome semplice ("ssh-server") per l'host remoto di indirizzo 192.168.100.103. L'opzione Host può essere impostata con qualsiasi nome che preferisci, finchè viene specificata l'opzione Hostname. Se questa opzione, invece, non viene specificata avrai bisogno di immettere l'indirizzo attuale prima dell'opzione Host.

Ora possiamo connetterci all'SSHD configurato prima, in ascolto sulla porta 2222 e di indirzzo 192.168.100.103 ed effettuare il login con l'utente corrente, semplicemente scrivendo:

$ssh ssh-server

Per effettuare il login sul sistema remoto con un differente nome utente, invoca il comando:

$ssh user@ssh-server

E ti verrà chiesta la relativa password.

Puoi specificare più host e dargli i loro speicifici settaggi in questo modo:

 Host ssh-server
      Hostname 192.168.100.103
      Port 2222
Host workserver
      Hostname  ssh.host.org
      Port 5041
      Compression yes

La compressione è utile abilitarla su connessioni lente (per esempio dial-up). Se abilitata su una connessione veloce, la rallenterà soltanto, consumando molte più risorse sia sul server che sul client.


Controllo dell'accesso

Queste impostazioni sono opzionali. Usale con cura visto che puoi chiuderti fuori da solo.

Questa è una parte importante della sicurezza del tuo SSHD, ovvero a chi sarà permesso connettersi per poi poter effettuare il login sul tuo computer. Prima di tutto, non usare mai password semplici. Nella configurazione base qualsiasi host può connettersi al tuo computer. In generale, se un attaccante è venuto a conoscenza del tuo indirizzo IP e della porta di ascolto (informazioni che possono essere ottenute abbastanza facilmente), può lanciare un attacco a dizionario su di te. Se, per esempio, l'attaccante sa che il tuo nome è “John Smit”, il tuo nome utente, molto probabilmente, sarà qualcosa del tipo "john", "js", "john.smith" etc.. E, ancora, se la tua password è il nome del tuo cane, qualcuno potrà facilmente entrare nel tuo sistema. Inoltre, non fidarti di password usate in database di terze parti, come gli account email, forum, wiki... si tratta, quindi, di fare una ferrea distinzione tra le password che usi in internet e la password del tuo computer. Per il proprio computer, è sempre buona pratica di sicurezza usare caratteri casuali maiuscoli, minuscoli, alfanumerici e non, nella propria password.

Limitare gli host

Se ci sono postazioni fisse dalle quali vuoi effettuare il log in al tuo SSHD, puoi impostare un controllo degli accessi per singolo host.

Nel file /etc/hosts.allow puoi inserire le seguenti linee per specificare gli host abilitati a connettersi, per esempio:

sshd : 127.0.0.1   : allow
sshd : 192.168.    : allow
sshd : 130.57.5.70 : allow
sshd : 10.         : allow

Al contrario, nel file /etc/hosts.deny ci sono tutti quelli che NON sono abilitati ad entrare, per esempio:

sshd : ALL         : deny

Se sei interessato in un controllo degli accessi più dinamico, potresti voler usare lo script DenyHosts. Quanto spiegato in questo paragrafo ti permetterà di effettuare il login dalle postazioni che preferisci, mentre DenyHosts filtrerà gli host malevoli basandosi su regole come il numero di tentativi di accesso. DenyHosts, quindi, aggiungerà questi host malevoli al file /etc/hosts.deny. Include, inoltre, molte altre funzioni utili come la creazione di log e i rapporti via email.

Limitare gli utenti

SSHD permette di limitare il lgoin solo per utenti e gruppi speciali. Quando possibile, usa i gruppi per abilitare/disabilitare l'accesso. In questo modo è molto più semplice modificare i diritti di accesso successivamente.

Di seguito le opzioni che possono essere aggiunte in /etc/ssh/sshd_config e sono processate nell'ordine seguente:

  • PermitRootlogin
  • DenyUsers
  • AllowUsers
  • DenyGroups
  • AllowGroups

PermitRootLogin può essere impostato a yes (si) o no. Di default è yes. E' saggio cambiarlo in no, visto che ogni sistema *NIX ha l'utente root, e questo utente è onnipotente, è proprio l'utente adatto da attaccare per entrare in un sistema. Anche disabilitando questa funzionalità puoi sempre ottenere i privilegi di root invocando i comandi su o sudo dopo aver effettuato il login come utente normale. Potresti voler leggere Inibire l'uso di su.

Le altre opzioni possono essere fatte seguire da una lista di utenti e gruppi, separati da spazi. Solo i nomi sono validi; un ID utente, o di gruppo, numerico non viene riconosciuto. Per esempio, puoi modificare il file /etc/ssh/sshd_config con il tuo editor di testo preferito e aggiungere la linea:

AllowGroups sshlogin

Questo permetterà solo agli utenti che sono membri del gruppo sshlogin di effettuare il login sul server. Per creare il gruppo sshlogin apri Yast2 > Sicurezza e utenti > Gestione utenti e gruppi e aggiungici gli utenti ai quali sarà permesso effettuare il login sul server. Se ora provi ad effettuare il login con un utente non appartenete a quel gruppo, o non esistente affatto, sarà richiesta lo stesso la password per un certo numero di tentativi, dopo i quali sarà riportato ogni volta l'errore "Incorrect Password". Così gli attaccanti non sapranno se è sbagliata la password o il nome utente.


Autenticazionen

Il server OpenSSH può autenticare gli utenti usando uno dei suoi sistemi di autenticazione:

In questo articolo saranno descritti solo il metodo di autenticazione a tastiera interattiva e a chiave pubblica. Sei il benvenuto ad espandere questo articolo con altri metodi.

Tastiera interattiva

Quando si usa SSHD su openSUSE, la via più comune per autenticarsi a tastiera interattiva è PAM. PAM viene usato anche per l'autenticazione locale e fa uso delle stesse passwordi impostate tramite YaST. Le seguenti impostazioni permetto di usare PAM per l'autenticazione e il controllo degli account e della sessione:

ChallengeResponseAuthentication yes
UsePAM yes

Questi sono i valori di default.

Autenticazione a chiave pubblica

L'autenticazione a chiave pubblica ti permette di effettuare il login sul server senza una password, per migliorare la sicurezza. La coppia di chiavi viene generata lato client e la chiave privata deve essere mantenuta in un posto sicuro. La chiave pubblica viene inviata al server e conservata nel "file delle chiavi autorizzate". Questo vuol dire che il computer (e l'utente) che conservano la chiave privata possono effettuare il login sul computer che conserva la chiave pubblica.

Dall'articolo principale OpenSSH autenticazione con chiave pubblica

Generazione della chiave

Se ssh-keygen viene usato senza argomenti, verrà generata di default una chiave RSA a 2048 bit. La chiave privata sarà conservata in ~/.ssh/id_rsa e la chiave pubblica sotto ~/.ssh/id_rsa.pub. A seconda delle tue necessità, puoi scegliere se impostare una password o meno. Lasciare una linea vuota causerà la non impostazione della password.

$ ssh-keygen
Enter file in which to save the key (/home/your_user/.ssh/id_rsa): <Enter>
Enter passphrase (empty for no passphrase): <Enter>
Enter same passphrase again: <Enter>
Your identification has been saved...\

Inviare la propria chiave

Per usare la tua chiave appena generata per l'autenticazione, la chiave pubblica deve essere caricata sul server:

$ ssh-copy-id user@ssh.yourserver.org
Password:
Now try logging into the machine, with "ssh 'user@ssh.yourserver.org'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

Se vuoi saperne di più su questa procedura, includendo la completa disabilitazione dell'autenticazione tramite password per incrementare la sicurezza e l'uso di DSA o altre opzioni personalizzate, leggi l'articolo completo.


Risoluzione dei problemi

Autenticazione a chiave pubblica non più funzionante

Versione: 11.3+Il seguente paragrafo si applica a partire da openSUSE 11.3.

Da OpenSSH 5.4, i percorsi assoluti relativi non sono più ammessi nella configurazione. Assicurati di usare %h/ davanti al percorso, quando si punta al file delle chiavi autorizzate. Per le versioni più vecchie se ne può fare a meno.

In /etc/ssh/sshd_config cambia:

AuthorizedKeysFile .ssh/authorized_keys
-in-
AuthorizedKeysFile %h/.ssh/authorized_keys

Vedere anche

Pagine dei manuali

$ man hosts_access
$ man ssh
$ man ssh_config
$ man sshd
$ man sshd_config

Articoli correlati

Link esterni