Installazione e configurazione server SSH su ubuntu

esperienze avute con Linux e la configurazione di qualche periferica o programma. Postate solo configurazioni effettuate con successo
Avatar utente
brigantelukano
Fresh Pinguinus
Fresh Pinguinus
Messaggi: 10
Iscritto il: mercoledì, 21.10.2009, 16:34
Indica il numero centrale della lista (tre): 3
Contatta:

Installazione e configurazione server SSH su ubuntu

Messaggioda brigantelukano » mercoledì, 21.10.2009, 17:16

Posto questa guida realizzata da me unendo parti di diverse fonti reperite su internet.
Provata con successo su ubuntu 9.04

Installazione server shh e configurazione

Introduzione

OpenSSH è un insieme di programmi in grado di svolgere diverse operazioni mantenendo un elevato grado
di sicurezza:
• controllare un computer remoto tramite terminale;
• copiare file da un computer remoto al computer locale e viceversa;
• cifrare qualunque traffico di dati tra computer locale e computer remoto tramite il tunneling.

OpenSSH sostituisce i vecchi programmi telnet, rlogin e ftp, considerati poco sicuri poichè trasmettono in
chiaro i dati relativi all'autenticazione (nome utente, password etc).

Preparativi
È necessario disporre di un server ssh su ogni computer al quale ci si vuole connettere (chiamato in seguito
«computer remoto»), e di un client ssh su ogni computer dal quale si vuole avviare la connessione (chiamato
in seguito «computer locale»). Se ad esempio si dispone di due computer e si vuole che ognuno dei due
possa connettersi all'altro, su entrambi dovranno essere installati sia il server che il client.
Per avere il server ssh su Ubuntu, è sufficiente installare il pacchetto openssh-server.

Codice: Seleziona tutto

sudo apt-get install openssh-server


Il client ssh (contenuto nel pacchetto openssh-client) è installato in Ubuntu in modo predefinito.
Inoltre si dovranno conoscere il nome e la password di una utenza presente nel computer remoto

Configurazione

È possibile configurare il comportamento predefinito dell'applicazione server di OpenSSH, sshd,
modificando il file /etc/ssh/sshd_config.

Codice: Seleziona tutto

sudo gedit /etc/ssh/sshd_config


Prima di modificare il file di configurazione, è consigliato fare una copia del file originale e proteggerla dalla
scrittura, così da avere le impostazioni originali come riferimento ed eventualmente riusarle se necessario.
Copiare il file /etc/ssh/sshd_config e proteggerlo da scrittura, con il seguente comando, digitando a
un prompt di terminale:

Codice: Seleziona tutto

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
sudo chmod a-w /etc/ssh/sshd_config.original


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 di un 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
AllowGroups


Autenticazione a chiave pubblica
Per impostazione predefinita, OpenSSH consente di effettuare l'accesso tramite autenticazione con nome
utente e password dell'utente remoto. Tuttavia se qualcuno è venuto in possesso di nome e password
dell'utente del computer remoto, vi si potrà connettere dall'esterno, compromettendone la sicurezza. Con
l'autenticazione a chiave pubblica/privata, invece, solo il computer in possesso della chiave privata (usato
dalla persona che conosce la passphrase per usarla) può accedere al computer remoto su cui risiede la
corrispondente chiave pubblica.
Per creare la propria coppia di chiavi (privata e pubblica) sul computer locale, aprire una finestra di
terminale e digitare:

Codice: Seleziona tutto

ssh-keygen -t dsa


Verrà chiesto dove salvare la chiave privata (si consiglia di accettare la posizione predefinita
~/.ssh/id_dsa) e di scegliere una passphrase (una nuova password) che verrà usata per cifrare e
decifrare la chiave privata. Ogni qualvolta servirà la nostra chiave privata, bisognerà prima fornire la
passphrase.
Insieme alla chiave privata viene creata anche la corrispondente chiave pubblica (localizzata in
~/.ssh/id_dsa.pub sul computer locale), liberamente distribuibile; in particolare la chiave pubblica la
si deve inserire nei computer remoti (ai quali si vuole avere accesso) usando il comando ssh-copy-id dal
computer locale (su cui risiede la chiave privata) secondo il modello seguente:

Codice: Seleziona tutto

ssh-copy-id -i percorsoLocaleChiavePubblica nomeUtenteRemoto@indirizzoIPRemoto


Quello che segue è un esempio:

Codice: Seleziona tutto

ssh-copy-id -i ~/.ssh/id_dsa.pub mario@192.168.23.42


Fatto questo , aggiungiamo la chiave pubblica al seguente file ~/.ssh/authorized_keys

Codice: Seleziona tutto

cat id_dsa.pub >> ~/.ssh/authorized_keys2


Se per qualche motivo non si riuscisse a usare il precedente comando, sarà necessario copiare manualmente
l'intero contenuto del file ~/.ssh/id_dsa.pub dal computer locale e aggiungerlo in coda al file
~/.ssh/authorized_keys (senza sovrascrivere eventuali contenuti preesistenti) nella cartella utente sul
computer remoto.
Una volta aggiunta la chiave pubblica sul computer remoto, non verrà più chiesta la password dell'utente del
computer remoto (salvata in /etc/password del computer remoto), ma verrà chiesta la passphrase
conservata in locale.
Se si sceglie di usare solo l'autenticazione tramite chiave pubblica, per aumentare ulteriormente la sicurezza
si può disabilitare l'autenticazione tramite password utente. Aprire il file /etc/ssh/sshd_config con un
Editor di testo con i privilegi di amministrazione e aggiungere la seguente riga:

Codice: Seleziona tutto

PasswordAuthentication no


Terminate le modifiche sarà necessario riavviare il server ssh.

Per far un piccolo esempio lo si puo usare per raggiungere il proprio server da qualunque altro pc magari abbinandolo ad un client dns per superare il problema dell'indirizzo IP dinamico!!!!
PS: Il progresso deve essere condiviso!!!!
- - - - - - - - - - - - - - - - - - - - - - - - - - -
brigantelukano(-AT-)gmail.com
GnuPG public key: 0x9B90E56F
Key fingerprint: 529F 15AA C240 7610 4EAF F1FB 8A48 E736 9B90 E56F

Torna a “Configurazioni”

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti