OpenSSH: differenze tra le versioni

Nessun oggetto della modifica
 
(35 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili | Lenny | Squeeze | Wheezy | Jessie}}
{{SSH
 
|successivo=SFTP: SSH File Transfer Protocol
}}{{Versioni compatibili}}{{OpenSSH}}
== Installazione ==
== Installazione ==


È bene premettere che se lo scopo di chi legge è solo collegarsi ad altri computer, ma non permettere la connessione a quello in uso, allora è sufficiente l'installazione del solo client (normalmente già effettuata durante l'installazione di debian), viceversa è sufficiente l'installazione del solo server.
È bene premettere che se lo scopo di chi legge è solo collegarsi ad altri computer, ma non permettere la connessione a quello in uso, allora è sufficiente l'installazione del solo client (normalmente già effettuata durante l'installazione di debian), viceversa è sufficiente l'installazione del solo server.
Premesso questo, per installare sia client che server digitare da terminale:
Premesso questo, per installare sia client che server digitare da terminale con [[privilegi di amministrazione]]:


<pre># aptitude install ssh</pre>
<pre># apt-get install ssh</pre>


Per installare il solo client:
Per installare il solo client:


<pre># aptitude install openssh-client</pre>
<pre># apt-get install openssh-client</pre>


Per installare il solo server:
Per installare il solo server:


<pre># aptitude install openssh-server</pre>
<pre># apt-get install openssh-server</pre>
 
Opzionalmente è possibile installare anche il pacchetto <code>openssh-blacklist</code>
 
<pre># aptitude install openssh-blacklist</pre>


== Utilizzo base ==
== Utilizzo base ==
Riga 40: Riga 37:
</pre>
</pre>


Naturalmente l'utente non è obbligato ad effettuare un simile controllo e quindi può limitarsi ad accettare "andando sulla fiducia". Sebbene potenzialmente rischioso come comportamento, il buon senso aiuta sempre in queste situazioni, quindi se l'utente si collega ad un computer della propria LAN oppure alla macchina di un noto provider, è evidente che il rischio di collegarsi ad una macchina "maligna" sarà nullo o ragionevolmente trascurabile.
Naturalmente l'utente non è obbligato ad effettuare un simile controllo e quindi può limitarsi ad accettare "andando sulla fiducia". Sebbene potenzialmente rischioso come comportamento, il buon senso aiuta sempre in queste situazioni, quindi se l'utente si collega ad un computer della propria LAN oppure alla macchina di un noto provider, è evidente che il rischio di collegarsi ad una macchina "maligna" sarà nullo o ragionevolmente trascurabile. Una volta accettato comparirà il seguente messaggio:


<pre>Warning: Permanently added 'xxxx.xxxxx.xxxxx' (ECDSA) to the list of known hosts.</pre>
<pre>Warning: Permanently added 'xxxx.xxxxx.xxxxx' (ECDSA) to the list of known hosts.</pre>


Una volta accettata la chiave pubblica remota viene richiesta la password dell'account remoto cui si sta tentando di accedere. Una volta inseritala comprarirà il prompt dei comandi della macchina remota e l'utente potrà operare come se stesse usando una normalissima istanza del terminale del suo computer.<br/>
A questo punto sarà richiesta la password dell'account remoto cui si sta tentando di accedere. Una volta inseritala comparirà il prompt dei comandi della macchina remota e l'utente potrà operare come se stesse usando una normalissima istanza del terminale del suo computer.<br/>
Per terminare una connessione è sufficiente digitare:
Per terminare una connessione è sufficiente digitare:
<pre>$ Exit</pre>
<pre>$ exit</pre>
eventualmente più volte se nel frattempo si è assunta l'identità di root col comando <code>su</code> (o di qualche altro utente).<br/>
eventualmente più volte se nel frattempo si è assunta l'identità di root col comando <code>su</code> (o di qualche altro utente).<br/>


Riga 66: Riga 63:




== Metodi di autenticazione ==
== Autenticazione con chiavi ==


Come già scritto il metodo di autenticazione utilizzabile fin da subito, cioè l'inserimento della password relativa all'account remoto, non è il più sicuro poiché suscettibili di attacchi a forza bruta o in ogni caso di rivelare la stessa nel caso di collegamento a server fittizi gestiti da malintenzionati.<br/>
Come già scritto il metodo di autenticazione utilizzabile fin da subito, cioè l'inserimento della password relativa all'account remoto, non è il più sicuro poiché suscettibili di attacchi a forza bruta o in ogni caso di rivelare la stessa nel caso di collegamento a server fittizi gestiti da malintenzionati.<br/>
Riga 73: Riga 70:
# chiave client ('''hostbased'''), concettualmente simile al metodo della chiave pubblica, ma con la differenza che il server remoto verifica l'identità della macchina client e non degli utenti;
# chiave client ('''hostbased'''), concettualmente simile al metodo della chiave pubblica, ma con la differenza che il server remoto verifica l'identità della macchina client e non degli utenti;
# chiave pubblica ('''publickey'''), in sintesi la macchina remota invia all'utente una stringa cifrata con una chiave pubblica precedentemente indicata dall'utente stesso, se il client dell'utente possiede la chiave privata corretta procede a decodificare tale stringa e quindi prova la sua identità al computer remoto che gli garantisce l'accesso;
# chiave pubblica ('''publickey'''), in sintesi la macchina remota invia all'utente una stringa cifrata con una chiave pubblica precedentemente indicata dall'utente stesso, se il client dell'utente possiede la chiave privata corretta procede a decodificare tale stringa e quindi prova la sua identità al computer remoto che gli garantisce l'accesso;
# keyboard-interactive, utilizza una serie di autenticazioni caratterizzate da richieste, fatte dal server SSH, che devono essere confermate dalle risposte mandate dal client SSH. Se le risposte coincidono con quelle memorizzate sul Server, l'utente è autorizzato ad accedere da remoto alla macchina Linux altrimenti questi non può accedere alla macchina Linux;
# keyboard-interactive (''ChallengeResponseAuthentication''), utilizza una serie di autenticazioni caratterizzate da richieste, fatte dal server SSH, che devono essere confermate dalle risposte mandate dal client SSH. Se le risposte coincidono con quelle memorizzate sul Server, l'utente è autorizzato ad accedere da remoto alla macchina Linux altrimenti questi non può accedere alla macchina Linux. Di default avviene tramite [[PAM]], e corrisponde alla richiesta di password dell'account remoto a cui si intende accedere;
# '''password''', si richiede la password dell'utenza indicata in fase di login per verificare se l'utente è autorizzato ad accedere a tale utenza sulla macchina remota Linux.
# '''password''' (''PasswordAuthentication''), si richiede la password dell'utenza indicata in fase di login per verificare se l'utente è autorizzato ad accedere a tale utenza sulla macchina remota Linux, a prescindere dalla procedura prevista per l'autenticazione sulla macchina remota.


Ai fini di questa guida saranno trattate, in aggiunta all'ultimo tipo già descritto, anche le modalità ''hostbased'' e ''publickey'', tuttavia prima di procedere a descriverle nel dettaglio è bene precisare che i due metodi sono simili tra loro poiché entrambi sfruttano l'accoppiata chiave pubblica e privata per suggellare l'autenticazione dell'utente.
Ai fini di questa guida saranno trattate, in aggiunta all'ultimo tipo già descritto, anche le modalità ''hostbased'' e ''publickey'', tuttavia prima di procedere a descriverle nel dettaglio è bene precisare che i due metodi sono simili tra loro poiché entrambi sfruttano l'accoppiata chiave pubblica e privata per suggellare l'autenticazione dell'utente.


{{Box|Nota|Dei due metodi ''hostbased'' e ''publickey'', solo il secondo può dirsi sicuramente più sicuro di quello basato su password.}}
{{Box|Nota|Dei due metodi ''hostbased'' e ''publickey'', solo il secondo può dirsi sicuramente più sicuro di quello basato su password.
 
Ed entrambi aggiungeranno una nuova possibilità di autenticazione, senza rimuovere quella tramite password, attiva di default. Se si intende rendere possibile l'autenticazione unicamente via chiave pubblica dell'utente oppure del client, è necessario disabilitare l'autenticazione via password ("<code>PasswordAuthentication no</code>" e, se abilitato, "<code>ChallengeResponseAuthentication no</code>") modificando il [[OpenSSH: file di configurazione | file di configurazione]].}}


=== hostbased ===
=== hostbased ===
Riga 129: Riga 128:
<pre>
<pre>
[...]
[...]
#  RSAAuthentication yes
#  PasswordAuthentication yes
#  PasswordAuthentication yes
     HostbasedAuthentication yes
     HostbasedAuthentication yes
Riga 140: Riga 138:
==== Server ====
==== Server ====


È necessario modificare il file <code>/etc/ssh/ssdh_config</code> decommentando <code>HostbasedAuthentication</code> e indicando ''yes'' come valore, oltre ad assicurarsi che lo siano anche i parametri <code>RSAAuthentication</code> e <code>PubkeyAuthentication</code>:
È necessario modificare il file <code>/etc/ssh/ssdh_config</code> decommentando <code>HostbasedAuthentication</code> e indicando ''yes'' come valore, oltre ad assicurarsi che lo sia anche il parametro <code>PubkeyAuthentication</code>:
<pre>
<pre>
[...]
[...]
RSAAuthentication yes
PubkeyAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile    %h/.ssh/authorized_keys
#AuthorizedKeysFile    %h/.ssh/authorized_keys
Riga 150: Riga 147:
IgnoreRhosts yes
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
# similar for protocol version 2
HostbasedAuthentication yes
HostbasedAuthentication yes
Riga 180: Riga 176:
{{Box|Sicurezza e codice di sblocco|La sicurezza della procedura di autenticazione NON dipende in alcun modo dal codice di sblocco eventualmente scelto, infatti quest'ultimo serve solo a cifrare la propria chiave privata in modo che questa possa essere utilizzata solo dopo aver inserito correttamente il suddetto codice. Il fine è evidente, cioè impedire l'utilizzo immediato della chiave da parte di persone non autorizzate che in qualche modo siano riuscite a farsene una copia. Si noti che indicare un codice di sblocco implica il doverlo inserire ogni volta che si deve usare tale chiave.}}
{{Box|Sicurezza e codice di sblocco|La sicurezza della procedura di autenticazione NON dipende in alcun modo dal codice di sblocco eventualmente scelto, infatti quest'ultimo serve solo a cifrare la propria chiave privata in modo che questa possa essere utilizzata solo dopo aver inserito correttamente il suddetto codice. Il fine è evidente, cioè impedire l'utilizzo immediato della chiave da parte di persone non autorizzate che in qualche modo siano riuscite a farsene una copia. Si noti che indicare un codice di sblocco implica il doverlo inserire ogni volta che si deve usare tale chiave.}}


Supponendo di voler creare una coppia di chiavi ''rsa'' basterà quindi digitare:
Supponendo di voler creare una coppia di chiavi ''rsa'' basterà quindi digitare sulla '''macchina client''':
<pre>$ ssh-keygen</pre>
<pre>$ ssh-keygen</pre>
Se invece si vuole aumentare la robustezza delle chiavi è possibile aumentarne il numero di bit (e quindi anche leggermente il tempo di creazione) da 2048 a 4096:
Se invece si vuole aumentare la robustezza delle chiavi è possibile aumentarne il numero di bit (e quindi anche leggermente il tempo di creazione) da 2048 a 4096:
Riga 197: Riga 193:
==== Client ====
==== Client ====


Nessuna modifica da apportare al file <code>/etc/ssh/ssh_config</code> poiché i valori predefiniti delle variabili <code>RSAAuthentication</code> e <code>PubkeyAuthentication</code> risultano già essere impostati a ''yes''.
Nessuna modifica da apportare al file <code>/etc/ssh/ssh_config</code> poiché il valore predefinito della variabile <code>PubkeyAuthentication</code> risulta già essere impostato a ''yes''.
 
==== Server ====
 
Nessuna modifica da apportare al file <code>/etc/ssh/sshd_config</code> poiché i valori predefiniti delle variabili <code>RSAAuthentication</code> e <code>PubkeyAuthentication</code> risultano già essere impostati a ''yes''.


È tuttavia necessario appendere la chiave pubblica dell'utenza sul client al file <code>~/.ssh/authorized_keys</code> della stessa utenza sulla macchina remota. Tale operazione può essere eseguita manualmente dall'utente, ad esempio copiando e incollando il contenuto della chiave pubblica nel succitato file <code>authorized_keys</code>, oppure usando il seguente comando:
È tuttavia necessario appendere la chiave pubblica dell'utenza sul client al file <code>~/.ssh/authorized_keys</code> della stessa utenza sulla macchina remota. Tale operazione può essere eseguita manualmente dall'utente, ad esempio copiando e incollando il contenuto della chiave pubblica nel succitato file <code>authorized_keys</code>, oppure usando il seguente comando:
<pre>ssh-copy-id -i ~/.ssh/id_rsa.pub utenteremoto@nomeremoto</pre>
<pre>ssh-copy-id -i ~/.ssh/id_rsa.pub utenteremoto@nome_host_remoto</pre>
posto di aver utilizzato il percorso predefinito suggerito da <code>ssh-keygen</code>, diversamente sostituire tale percorso col proprio.<br/>
posto di aver utilizzato il percorso predefinito suggerito da <code>ssh-keygen</code>, diversamente sostituire tale percorso col proprio.<br/>
Si noti che usare <code>scp</code> è fattibile, tuttavia in tal caso si andrà a sovrascrivere il file <code>authorized_keys</code> cancellando quindi eventuali altre chiavi pubbliche presenti. Ad ogni modo il comando da usare in questo caso è:
Si noti che usare <code>scp</code> è fattibile, tuttavia in tal caso si andrà a sovrascrivere il file <code>authorized_keys</code> cancellando quindi eventuali altre chiavi pubbliche presenti. Ad ogni modo il comando da usare in questo caso è:
<pre>$ scp ~/.ssh/id_rsa.pub utenteremoto@nomeremoto:~/.ssh/authorized_keys</pre>
<pre>$ scp ~/.ssh/id_rsa.pub utenteremoto@nome_host_remoto:~/.ssh/authorized_keys</pre>


{{Box|Nota|Se si trasferisce manualmente la chiave pubblica facendo copia ed incolla tra due editor di testo si presti ATTENZIONE a non spezzare la chiave su più righe. È infatti obbligatoria l'indicazione di '''una sola chiave per riga'''.}}
==== Server ====


== Analisi di /etc/ssh/sshd_config ==
Nessuna modifica da apportare al file <code>/etc/ssh/sshd_config</code> poiché il valore predefinito della variabile <code>PubkeyAuthentication</code> risulta già essere impostato a ''yes''.


La sua struttura è molto intuitiva, però potrebbe valer la pena osservare alcune opzioni:
Rimane in ogni caso consigliato di:
* impedire l'autenticazione con utente <code>root</code> (<code>PermitRootLogin no</code>)
* disabilitare l'autenticazione tramite password (<code>PasswordAuthentication no</code>), ma evidentemente solo dopo aver verificato che l'autenticazione tramite chiave pubblica funziona.


{|
|style="width:20em;vertical-align:top;"|''Port <Numero porta d'ascolto>''
|Il valore di questa keyword indica la porta d'ascolto dell'OpenSSH Server, il cui valore predefinito è 22. Per questioni di sicurezza e per evitare che il nostro server SSH possa essere trovato da un portscan occasionale è consigliato cambiarla, scegliendone una superiore alla 1024 che non sia già usato da altri [http://www.iana.org/assignments/port-numbers servizi locali o di Internet], poiché le porte fino alla 1024 sono riservate per servizi noti.
|-
|style="width:20em;vertical-align:top;"|''Protocol 2''
|Indica il protocollo da utilizzare. Possono essere indicati 1 o 2 o entrambi, separandoli con la virgola (1,2), tuttavia per motivi di sicurezza non è consigliato permettere connessioni con il protocollo 1.
|-
|style="width:20em;vertical-align:top;"|''PermitRootLogin no''
|Il valore di questa keyword evita l'accesso come root da remoto con '''una sola''' autenticazione. Ciò garantisce maggior sicurezza alla vostra Linux-Box poiché, se si volesse accedere come root, sarebbe necessario prima autenticarsi come utente normale per poi autenticarsi come root tramite il comando ''su''. In altre parole, con questa keyword impostata su '''no''', chi volesse accedere come root da remoto, dovrebbe autenticarsi '''due''' volte anziché '''una'''.
|-
|style="width:20em;vertical-align:top;"|''PasswordAuthentication yes''
|Il valore di questa keyword permette l'autenticazione mediante un semplice Login (Username e Password) da remoto.
|-
|style="width:20em;vertical-align:top;"|KerberosAuthentication no''
|Il valore di questa keyword evita che la password fornita mediante l'autenticazione tramite password sia convalidata dal KDC (Kerberos Key Distribution Center).
|-
|style="width:20em;vertical-align:top;"|''PermitEmptyPasswords no''
|Il valore di questa keyword evita che l'autenticazione mediante un semplice Login remoto avvenga senza la richiesta di una password se la keyword ''PasswordAuthentication'' è impostata sul ''yes''.
|-
|style="width:20em;vertical-align:top;"|''ChallengeResponseAuthentication no''
|Il valore di questa keyword non permette l'autenticazione mediante richieste-risposte ben precise fra il server ed il client SSH.
|-
|style="width:20em;vertical-align:top;"|''PubkeyAuthentication yes''
|Il valore di questa keyword permette l'autenticazione mediante una coppia di chiavi, una '''pubblica''', memorizzata sul server, ed una '''privata''' salvata sul client.
|-
|style="width:20em;vertical-align:top;"|''AuthorizedKeysFile <File chiavi pubbliche>''
|Il valore di questa keyword è il nome del file in cui vengono memorizzate le chiavi pubbliche degli utenti remoti che servono per verificare se una di queste derivi dalla chiave privata memorizzata dal client SSH che cerca di effettuare una connessione SSH utilizzando un''''autenticazione a chiave pubblica'''. Logicamente, tale keyword viene considerata soltanto se la keyword ''PubkeyAuthentication'' è impostata su ''yes''. Il valore di tale keyword deve contenere il path assoluto o relativo di questo file compreso il nome stesso (il valore di default è <code>.ssh/authorized_keys</code>). Normalmente, il path assoluto si usa quando il gestore del Server vuole tenere sott'occhio un unico file (che può anche essere memorizzato, per motivi di sicurezza, su un'altra macchina); mentre il path relativo alla home directory di ogni utente remoto viene, normalmente, usato per far sì che ogni utente gestisca lui stesso il file mettendo una o più delle sue chiavi pubbliche.
|-
|style="width:20em;vertical-align:top;"|''GSSAPIAuthentication no''
|Il valore di questa keyword non permette l'autenticazione utilizzando l'API GSSAPI.
|-
|style="width:20em;vertical-align:top;"|''Ciphers aes256-cbc,aes256-ctr,3des-cbc''
|Il valore di questa keyword permette di scegliere quali algoritmi simmetrici verranno usati per cifrare i dati trasferiti. Siccome l'utente del client SSH o il client stesso possono decidere quale sarà l'algoritmo simmetrico da utilizzare per l'intera sessione di lavoro, conviene "obbligare" l'utente o il client SSH a scegliere gli algoritmi che garantiscono la massima sicurezza con un occhio di riguardo alla velocità di trasferimento dei dati fra il server ed il client (e viceversa).
|-
|style="width:20em;vertical-align:top;"|''ClientAliveInterval 60''
|Il valore di questa keyword imposta il numero di secondi dopo i quali, se da un client SSH remoto non viene inviato al server SSH alcun dato, tale server invia un messaggio di verifica, nel canale criptato, dell'ancora esistenza del client (detto alive message) ed aspetta una risposta. Se tale risposta non arriva, interviene la keyword ''ClientAliveCountMax''.
|-
|style="width:20em;vertical-align:top;"|''ClientAliveCountMax 3''
|Il valore di questa keyword indica quante volte mandare un alive message, sempre nel canale criptato, al client SSH che non risponde. Se, dopo l'ultima richiesta "di vita", il client SSH non risponde, il server SSH termina la connessione con quel client. Quindi, impostando correttamente i valori delle keyword ''ClientAliveInterval'' e ''ClientAliveCountMax'' si evita il sovraccarico del vostro server (con un risparmio delle sue risposte) impostando '''una disconnessione automatica''' del client da parte del Server ogni 180 (60&middot;3) secondi.
|-
|style="width:20em;vertical-align:top;"|''TCPKeepAlive no''
|Il valore di questa keyword non permette di mandare dei '''TCP keepalive message''' per verificare se la rete è caduta o se il client SSH remoto è andato in crash. Poiché i TCP keepalive message non vengono mandati nel canale criptato e possono contenere delle informazioni sensibili, si preferisce disabilitare questa tecnica di analisi sullo stato delle connessioni SSH usufruendo delle keyword ''ClientAliveInterval'' e ''ClientAliveCountMax'' per eliminare le connessioni SSH non più utilizzate.
|-
|style="width:20em;vertical-align:top;"|''Subsystem subname subcommand''
|Il valore di questa keyword permette di configurare un sottosistema esterno, come un server FTP, da avviare insieme al servizio SSH. Di base nessun sistema è indicato, tuttavia se l'utente lo desiderasse potrebbe dichiarare qualcosa di simile a <code>Subsystem sftp /usr/lib/openssh/sftp-server</code>.
|-
|style="width:20em;vertical-align:top;"|''ListenAddress 0.0.0.0''
|Di default è 0.0.0.0 e indica che il [[demone]] SSH è in ascolto su tutte le interfacce di rete configurate e tutti gli indirizzi IP associati. Potrebbe essere utile cambiarlo con l’indirizzo IP specifico sul quale ci si aspettiamo connessioni SSH
|-
|style="width:20em;vertical-align:top;"|''HostKey /etc/ssh/ssh_host_key''
|Specifica la posizione che contiene le chiavi private di un host e può essere lasciato il valore di default. Possono essere specificati più file ripetendo HostKey e cambiando il file di destinazione
|-
|style="width:20em;vertical-align:top;"|''UsePrivilegeSeparation yes''
|yes è il valore di default, e indica che per ogni login viene creato un processo figlio con i privilegi dell’user che ha effettuato il login per evitare tecniche di “privilege escalation” basati sui privilegi dei processi
|-
|style="width:20em;vertical-align:top;"|''ServerKeyBits 1024''
|Dice quanti bit devono essere utilizzati per la creazione della chiave di criptazione della connessione. Si preferisce di solito utilizzare 1024 che è un buon compromesso tra velocità ed efficacia di crittazione.
|-
|style="width:20em;vertical-align:top;"|''LoginGraceTime 120''
|Rappresenta il tempo massimo in secondi che intercorre tra il momento in cui viene stabilita la connessione e quello in cui avviene un login con successo.
|-
|style="width:20em;vertical-align:top;"|''KeyRegenerationInterval 3600''
|Rappresenta il massimo tempo in secondi che il demone aspetta prima di rigenerare una nuova chiave per la connessione corrente. Non deve essere eccessivamente elevato per evitare il cracking della chiave utilizzata nella sessione corrente
|-
|style="width:20em;vertical-align:top;"|''IgnoreRhosts yes''
|Dichiara di ignorare i file <code>rhosts</code> e <code>shosts</code> per l’autenticazione.
|-
|style="width:20em;vertical-align:top;"|''IgnoreUserKnownHosts yes''
|Dice al daemon di ignorare la lista degli hosts conosciuti presente in <code>$HOME/.ssh/known_hosts</code> durante la RhostsRSAAuthentication.
|-
|style="width:20em;vertical-align:top;"|''StrictModes yes''
|Serve per proteggere i file nelle home degli user che di solito vengono lasciati “world-writable”.
|-
|style="width:20em;vertical-align:top;"|''X11Forwarding no''
|Permette di disabilitare o abilitare il forwarding su X11. Se non abbiamo una GUI installata nel server (di solito è così) possiamo settarlo su ''no''.
|-
|style="width:20em;vertical-align:top;"|''PrintMotd yes''
|Abilita la visualizzazione di <code>/etc/motd</code> a login avvenuto.
|-
|style="width:20em;vertical-align:top;"|''IgnoreUserKnownHost yes''
|Ignora l’utilizzo di <code>~/.ssh/known_host</code> e per il login si basa unicamente su user e password
|-
|style="width:20em;vertical-align:top;"|''SyslogFacility AUTH''<br/>''LogLevel INFO''
|Indicano il grado di prolissità dei log. I valori possibili sono QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3. Utilizzare un flag di DEBUG viola la privacy degli utenti e pertanto non è consigliato
|-
|style="width:20em;vertical-align:top;"|''RSAAuthentication yes''
|Indica se sono concessi i login con solo RSA
|-
|style="width:20em;vertical-align:top;"|''AllowUsers user1 user2''
|Permette il login via SSH solo agli user specificati. Da notare che gli user sono separati da spazi vuoti, quindi niente virgole o punti o altro
|-
|style="width:20em;vertical-align:top;"|''AllowGroups group1 group2''
|Permette il login via SSH solo ai gruppi specificati. Da notare che i gruppi sono separati da spazi vuoti, quindi niente virgole o punti o altro
|}


{{Box|Nota|Se si trasferisce manualmente la chiave pubblica facendo copia ed incolla tra due editor di testo si presti ATTENZIONE a non spezzare la chiave su più righe. È infatti obbligatoria l'indicazione di '''una sola chiave per riga'''.}}
<br/>
{{Warningbox|Se non si riuscisse a collegarsi ricevendo invece il messaggio ''Permission denied (publickey)'' verificare che:
* la chiave privata usata in fase di autenticazione sia quella corretta;
* la chiave pubblica necessaria sia stata effettivamente (e correttamente) aggiunta al file <code>authorized_keys</code>;
* il file <code>~/.ssh/authorized_keys</code> sia accessibile solo e soltanto al proprietario (600);
* la home dell'utenza che si vuole usare sia scrivibile solo da essa (755, 750 o 700)}};
<br/>


== Strumenti complementari opzionali ==
== Analisi dei file di configurazione ==
 
=== Fail2ban ===
 
Questo strumento serve per limitare gli accessi indesiderati, bandendo per "X" secondi un IP che ha superato un numero di accessi impostato.
 
{{Warningbox|
* Il ban riguarda solo la porta interessata.
* Indicare più volte consecutivamente uno username errato in un client SSH, anche solo per un errore di battitura, attiva l'interdizione dell'IP.}}
 
Per maggiori informazioni sull'uso di tale applicativo si rimanda alla documentazione ufficiale o alla [[Fail2ban | guida presente sul wiki di debianizzati]].
 
Per fare una prova e verificare subito se tutto funziona è possibile seguire le istruzioni indicate nella sezione [[Fail2ban#Prova 2 | Prova 2]] della precedente guida, avendo cura di usare la seguente riga di comando invece di quella mostrata (relativa a ''proftp''):
<pre># fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf</pre>
 
=== Moblock ===
 
{{Warningbox|<code>moblock blockcontrol mobloquer</code> sono ormai considerati deprecati, si usi invece [http://sourceforge.net/p/peerguardian/wiki/pgl-Install-DebianUbuntu/ PeerGuardian Linux]}}
 
L'uso di <code>blockcontrol</code> è spiegato [http://e-zine.debianizzati.org/web-zine/numero_4/?page=82 nell'e-zine n°4] e nella guida [[Moblock - mobloquer]], quindi ci si limiterà ad alcune considerazioni.
 
L'unica eccezione che si aggiunge alla guida sull'e-zine riguarda l'apertura delle porte per la connessione all'interno del file di configurazione <code>''/etc/blockcontrol/blockcontrol.conf''</code>, dove sarà inserito in TCP-in e TCP-out la porta impostata per SSH.
 
<pre># Do a "blockcontrol restart" (sometimes even "reload" is enough) when you have
# edited this file.
 
WHITE_TCP_OUT="2974"
WHITE_TCP_IN="2974"</pre>
 
Grazie all'aggiunta di filtri, è possibile chiudere l'accesso a diversi range di IP. Per un server si consiglia il filtro proxy per ovviare al cambio IP se qualcuno viene bandito.


Si considerino inoltre validi anche i filtri nazioni in cui non ci si recherà mai e dalle quali non ci si aspetto connessioni, come Cina, Taiwan, Korea e Russia dalle quali è più probabile ricevere connessioni malevole.
Si veda [[OpenSSH: file di configurazione | la guida dedicata]].


Per maggiori informazioni sulle liste disponibili, visitare: http://www.iblocklist.com/lists.php


== Altri client OpenSSH compatibili ==
== Altri client OpenSSH compatibili ==
Riga 357: Riga 235:


Al prompt inserire <code>nome_user@indirizzo_server:porta</code>, et voilà, dopo aver inserito la password si sarà dentro.
Al prompt inserire <code>nome_user@indirizzo_server:porta</code>, et voilà, dopo aver inserito la password si sarà dentro.
=== PuTTY (Windows) ===
Prestare attenzione oltre alla generazione delle chiavi a come viene esportata la chiave in modo che sia compatibile con openssh.
Finché è aperta la finestra del generatore di chiave sarà possibile copiarla, altrimenti se la si salva sarà necessario eliminare le prime due righe ed inserire ssh-rsa per rsa oppure ssh-dss per dsa, quindi lasciare uno spazio vuoto e inserire in un'unica riga il testo della chiave.
[[Immagine:MmteamPutty001.JPG |320px | center]]
Alla fine ci deve essere il simbolo =, la parte seguente è opzionale e potete ometterla senza problemi.
Salvare ora la chiave privata in un luogo sicuro.
Per la connessione indicare a putty dove risiede la propria chiave privata .
[[Immagine:Mmteamputty2.JPG |320px | center]]
e nella schermata principale inserire i dati per la connessione.
[[Immagine:MmteamPutty003.JPG |320px | center]]
Al login inserire la password impostata nella chiave.


== Esempi ==
== Esempi ==
Riga 386: Riga 242:
Una delle personalizzazioni più semplici che si può adottare è la modifica della porta predefinita, ovvero l'indicazione di un numero di porta differente dalla 22. Tale scelta può essere una necessità pratica, dovuta ad esempio alla necessità di collegarsi a più macchine tutte poste dietro uno stesso router/NAT, oppure un piccolo artificio per rendere un po' più difficili gli attacchi al proprio server SSH da parte di malintenzionati.
Una delle personalizzazioni più semplici che si può adottare è la modifica della porta predefinita, ovvero l'indicazione di un numero di porta differente dalla 22. Tale scelta può essere una necessità pratica, dovuta ad esempio alla necessità di collegarsi a più macchine tutte poste dietro uno stesso router/NAT, oppure un piccolo artificio per rendere un po' più difficili gli attacchi al proprio server SSH da parte di malintenzionati.


{{Box|Nota|Se si decide di cambiare numero di porta è bene ricordare che i numeri fino a 1024 sono riservati al sistema, pertanto '''l'utente dovrà scegliere sempre dei valori maggiori di 1024'''.}}
{{Box|Nota|Se si decide di cambiare numero di porta è bene ricordare che i numeri fino a 1023 sono riservati al sistema, pertanto '''l'utente dovrà scegliere sempre dei valori maggiori o uguali a 1024'''.}}


==== Client ====
==== Client ====
Riga 437: Riga 293:
[...]
[...]
</pre>
</pre>
== Informazioni superate ==
Opzionalmente è possibile installare anche il pacchetto <code>openssh-blacklist</code>
<pre># apt-get install openssh-blacklist</pre>
Nelle precedenti versioni di questa guida era scritto di impostare <code>RSAAuthentication yes</code>. Oggigiorno il parametro <code>RSAAuthentication</code> è stato deprecato.


== Approfondimenti ==
== Approfondimenti ==
Riga 451: Riga 315:
* [http://users.telenet.be/mydotcom/howto/linux/sshpasswordless.htm SSH passwordless]
* [http://users.telenet.be/mydotcom/howto/linux/sshpasswordless.htm SSH passwordless]
* [https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Host-based_Authentication Host based authentication]
* [https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Host-based_Authentication Host based authentication]


{{Autori
{{Autori
|Autore = [[Utente:Mm-barabba|Mm-barabba]] 00:55, 20 nov 2010 (CET)
|Autore = [[Utente:Mm-barabba|Mm-barabba]] 00:55, 20 nov 2010 (CET)
|Estesa_da =
:[[Utente:Wtf|Wtf]] 13:05, 20 set 2015 (CEST)
|Verificata_da=
|Verificata_da=
:[[Utente:Wtf|Wtf]] 13:05, 20 set 2015 (CEST)
:[[Utente:Wtf|Wtf]] 13:05, 20 set 2015 (CEST)
|Numero_revisori=1
:[[Utente:HAL 9000|HAL 9000]] 13:56, 26 set 2015 (CEST)
|Estesa_da =
:[[Utente:Ferdybassi|Ferdybassi]] 15:42, 12 mar 2016 (CET)
:[[Utente:Wtf|Wtf]] 13:05, 20 set 2015 (CEST)
|Numero_revisori=3
}}
}}


[[Categoria:SSH_server_e_amministrazione_remota]]
[[Categoria:SSH_server_e_amministrazione_remota]]
2 894

contributi