Bentrovati! Oggi vi parlo di come configurare SSH!
Bene se avete una Debian tra le mani (tutti avete installato Debian vero?) potete tranquillamente installare SSH digitando da root aptitude update
e aptitude install ssh
che provvederà ad installare automaticamente il daemon SSH che fungerà da Server.
Adesso che è installato i troviamo i files di configurazione in /etc/ssh
e quello che dobbiamo modificare per configurare in modo corretto il nostro Server SSH è /etc/ssh/sshd_config
, quindi apriamolo col nostro editor di testo preferito e cominciamo a spulciarlo.
Port 22
Di default viene aperta la porta 22 per questioni di sicurezza e per evitare si essere trovata da un portscan occasionale è consigliato cambiarla possibilmente scegliendone una superiore alla 1024, in quanto fino alla 1024 sono riservate per servizi noti.
ListenAddress 0.0.0.0
Di default è 0.0.0.0 che indica l’ascolto in tutte le interfacce di rete configurate e tutti gli indirizzi IP associati, pertanto è utile cambiarlo con l’indirizzoIP specifico nel quale ci si aspettano connessioni
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ù files ripetendo HostKey e cambiando il file di destinazione
Protocol 2
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
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 perla 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 e non deve essere eccessivamente elevato per evitare il cracking della chiave utilizzata nella sessione corrente
PermitRootLogin no
In genere di default è impostato su yes ma è altamente sconsigliato permettere ad un utente di effettuare il login remoto come root; è molto più sicuro far si che si effettui un login come normal user e da li guadagnare i permessi di root.
IgnoreRhosts yes
Dichiara di ignorare i files 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
Questo serve per proteggere i files nelle home degli user che di solito vengono lasciati “world-writable”.
X11Forwarding no
Ci 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
Si ignora l’utilizzo si ~/.ssh/known_host e per il login ci si basa unicamente su user e password
SyslogFacility AUTH
LogLevel INFO
Ci indica 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 pertanto non è consigliato
RSAAuthentication yes
Indica se sono concessi i login con solo RSA
PasswordAuthentication yes
Indica se utilizzare come metodo di accesso le password o meno
PermitEmptyPasswords no
Non permette i login senza user o senza password
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 punto 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 punto o altro
Bene, fatta questa panoramica abbastanza ampia sul file id configurazione del demone SSH vi propongo la configurazione del mio server.
# What ports, IPs and protocols we listen for
Port 1001
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
ListenAddress 192.168.1.4
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 1024
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
AllowUsers art3k
AllowGroups chrooted
Ciao,
purtroppo quando digito sudo gedit /etc/ssh , mi appare la scritta che dice impossibile aprire etc/ssh
perchè /etc/ssh non è un file modificabile, è una directory… devi modificare /etc/ssh/sshd_config
comunque è possibile che tu stia modificando la configurazione via terminale per cui è preferibile utilizzare un editor da linea dicomando come VIM (VI iMproved) o nano (cfr. pico) con
vim /etc/ssh/sshd_config
oppure
pico /etc/ssh/sshd_config
grazie per essere passato/a 🙂
Ricorda prima di fare una copia dell`originale. Bip Docet
questo articolo va quanto men rivisto… 😉 terrò conto del consiglio….
bip è il master
Ho appena testato la guida su Debian 4.0r3 su una macchina Sun UltraSPARC IIi (sparc64)… funziona senza modifiche anche su questa architettura 😉
Aiuto! Ho applicato i diversi suggerimenti… Adesso però non riesco più a connettermi via Putty… Sono un novizio, per piacere HELP!
@giuseppe: che errori ti da esattamente?
ciao,
E’ possibile evitare login multipli con ssh?
@Giacomo: ciao, nelle ultime versioni di SSH è possibile utilizzare come altri parametri di configurazione “MaxSessions” e “MaxStartups” il primo in teoria si riferisce alle sessioni autenticate contemporaneamente presenti e l’altro a quelle non autenticate.
Personalmente ho provato entrambi questi parametri settando
MaxSessions 1
MaxStartups 1
nel file di configurazione, tuttavia “MaxSesions” non sembra funzionare correttamente, mentre “MaxStartups” svolge egregiamente il suo ruolo droppando ogni tentativo di connessione oltre il primo.
Per intenderci: apri una shell e cerchi di connetterti lasciandola in sospeso mentre ti chiede la password; se poi apri un’altra shell e provi ad effettuare un’altra connessione questa sarà droppata in tronco perchè con MaxStartups abbiamo detto che vogliamo non più di una connessione non autenticata aperta.
Ti ringrazio per la risposta.
Però sul man di MaxStartups c’è scritto che ve bene solo per le connessione non autenticate… a me serve anche per le connessioni autenticate…
Bell’articolo!Preciso e conciso!
Grazie!
Saluti.
Complimenti per l’articolo, ho una domanda.
Ho un applicazione che usa ssh per comunicare con il server, vorrei vedere che commandi usa.
Dove si trova il log di ssh?
Posso impostarlo per avere queste informazioni
@Carlo: ciao! grazie per i complimenti.
Andiamo al sodo: per vedere i comandi che vengono lanciati che io sappia c’è un solo modo: lanciare il comando
history
nella macchina remota (quella in cui invii i comandi per intenderci) in quanto SSH non salva il log dei comandi inviati (ne il server ne il client) e inoltre, se il server usa il protocollo SSH2, siccome li manda criptati non c’è modo di ricavarli facendo packet sniffing (ho fatto questa precisazione perché se il server usasse SSH1 smanettando un po’ con ettercap/wireshark/ethereal si potrebbero sniffare).Spero di esserti stato utile… e scusa il ritardo ma in questo periodo non ho il tempo per nulla 🙂 .
Ottima guida.
Una domanda come posso disabilitare il rilascio automatico delle HostKey? Vorrei poter far accedere solo le persone a cui fornisco io le chiavi e non che chiunque possa acquisire i certificati in automatico. Questo non rende più sicuro il sistema, ma rende più difficoltoso un tentativo di accesso indesiderato.
a questo punto non ti conviene disabilitare l’accesso tramite login e password e passare direttamente ad un accesso tramite certificati?