OpenSSH: file di configurazione: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
Nessun oggetto della modifica
Riga 11: Riga 11:


La sua struttura è molto intuitiva, però potrebbe valer la pena osservare alcune opzioni:
La sua struttura è molto intuitiva, però potrebbe valer la pena osservare alcune opzioni:
* <code>'''Port 22'''</code>
Di default viene aperta la porta 22. Però per questioni di sicurezza e per evitare che il nostro server SSH possa essere trovato da un portscan occasionale è consigliato cambiarla, possibilmente scegliendone una superiore alla 1024, poiché le porte fino alla 1024 sono riservate per servizi noti.
* <code>'''ListenAddress 0.0.0.0'''</code>
* <code>'''ListenAddress 0.0.0.0'''</code>
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
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
* <code>'''HostKey /etc/ssh/ssh_host_key'''</code>
* <code>'''HostKey /etc/ssh/ssh_host_key'''</code>
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
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
* <code>'''Protocol 2'''</code>
Indica il protocollo da utilizzare. Possono essere indicati 1 o 2 o entrambi, separandoli con la virgola (1,2), tuttavia non è consigliato permettere connessioni con il protocollo 1
* <code>'''UsePrivilegeSeparation yes'''</code>
* <code>'''UsePrivilegeSeparation yes'''</code>
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
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
Riga 27: Riga 23:
* <code>'''KeyRegenerationInterval 3600'''</code>
* <code>'''KeyRegenerationInterval 3600'''</code>
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
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
* <code>'''PermitRootLogin no'''</code>
In genere di default è impostato su yes, ma è altamente sconsigliato permettere ad un utente di effettuare il login remoto come root; è molto più sicuro fare in modo che si effettui un login come normal user per poi guadagnare i permessi di root.
* <code>'''IgnoreRhosts yes'''</code>
* <code>'''IgnoreRhosts yes'''</code>
Dichiara di ignorare i file <code>rhosts</code> e <code>shosts</code> per l’autenticazione.
Dichiara di ignorare i file <code>rhosts</code> e <code>shosts</code> per l’autenticazione.
Riga 46: Riga 40:
* <code>'''RSAAuthentication yes'''</code>
* <code>'''RSAAuthentication yes'''</code>
Indica se sono concessi i login con solo RSA
Indica se sono concessi i login con solo RSA
* <code>'''PasswordAuthentication yes'''</code>
Indica se utilizzare come metodo di accesso le password o meno
* <code>'''PermitEmptyPasswords no'''</code>
Non permette i login senza user o senza password
* <code>'''AllowUsers user1 user2'''</code>
* <code>'''AllowUsers user1 user2'''</code>
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
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
* <code>'''AllowGroups group1 group2'''</code>
* <code>'''AllowGroups group1 group2'''</code>
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
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
{|
|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>.
|}


==Configurazione di sshd per l'autenticazione mediante password==
==Configurazione di sshd per l'autenticazione mediante password==

Versione delle 15:46, 20 set 2015

OpenSSH: configurazione di base

Installazione lato server SSH digitando da root:

# apt-get install ssh

APT provvederà ad installare automaticamente il daemon SSH.

Analisi dei file di configurazione

I file di configurazione di OpenSSH si trovano in /etc/ssh. Per configurare in modo corretto il nostro Server SSH il file da modificare è /etc/ssh/sshd_config.

La sua struttura è molto intuitiva, però potrebbe valer la pena osservare alcune opzioni:

  • 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

  • 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

  • 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

  • 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.

  • 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.

  • 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

  • IgnoreRhosts yes

Dichiara di ignorare i file rhosts e shosts per l’autenticazione.

  • IgnoreUserKnownHosts yes

Dice al daemon di ignorare la lista degli hosts conosciuti presente in $HOME/.ssh/known_hosts durante la RhostsRSAAuthentication.

  • StrictModes yes

Serve per proteggere i file nelle home degli user che di solito vengono lasciati “world-writable”.

  • 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.

  • PrintMotd yes

Abilita la visualizzazione di /etc/motd a login avvenuto.

  • IgnoreUserKnownHost yes

Ignora l’utilizzo di ~/.ssh/known_host e per il login si basa unicamente su user e password

  • SyslogFacility AUTH
  • 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

  • RSAAuthentication yes

Indica se sono concessi i login con solo RSA

  • 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

  • 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


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 servizi locali o di Internet, poiché le porte fino alla 1024 sono riservate per servizi noti.
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.
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.
PasswordAuthentication yes Il valore di questa keyword permette l'autenticazione mediante un semplice Login (Username e Password) da remoto.
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).
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.
ChallengeResponseAuthentication no Il valore di questa keyword non permette l'autenticazione mediante richieste-risposte ben precise fra il server ed il client SSH.
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.
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 è .ssh/authorized_keys). 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.
GSSAPIAuthentication no Il valore di questa keyword non permette l'autenticazione utilizzando l'API GSSAPI.
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).
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.
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·3) secondi.
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.
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 Subsystem sftp /usr/lib/openssh/sftp-server.

Configurazione di sshd per l'autenticazione mediante password

# nano /etc/ssh/sshd_config

Il consiglio è di decommentare ed impostare

  • PermitRootLogin no

Riavviare il servizio con il comando

# /etc/init.d/sshd restart

Configurazione del client per la connessione remota

Installazione del client sul client

# apt-get install openssh-client
  • Connessione al server remoto
ssh [IP del server]

oppure

ssh [utente@hostname]

Essendo la prima connessione, ssh mostrerà un messaggio simile a questo:

utente@localhost:~# ssh server@xxxx.xxxx.xxxxxx 
The authenticity of host 'xxxx.xxxxx.xxxxx (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? 

Rispondiamo yes

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

Ci verra' infine richiesto di inserire nome utente e password per l'accesso

server@xxx.xxxx.xxxxx password: # 	password of the user
utente@xxx.xxxx.xxxxx:~$ # 		logined

Guida basata sull'originale presente sul sito: Oscene.net




Guida scritta da: Ferdybassi 17:49, 22 dic 2009 (CET) Swirl-auth20.png Debianized 20%
Estesa da:
Nydebianized 12:14, 12 set 2015 (CEST)
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized