Next Previous Contents

2. Parte2 Programmi crittografici presenti in Linux

2.1 Descrizione del Programma SSH

DEMONE SSHD

l demone sshd si occupa di ricevere le connessione di client ssh,generalmente sulla porta 22, se compilato con le opportune opzioni, il demone può essere lanciato tramite il supersever inetd, altrimenti parte come server stand-alone. Una volta avviato e dopo avere letto il suo file di config: /etc/ssh2/sshd2_config,il demone genera una chiave RSA aggiuntiva oltre a quelle contenute nel file /etc/ssh/ssh_host_key e ssh_host_key.pub, queste due rappresentano le chiavi rispettivamente privata e pubblica dell'host, mentre la chiave generata si riferisce al server (viene generata circa ogni ora, e cosa piu importante non viene salvata in alcun file). La seguente procedura rappresenta i vari passi del processo di autenticazione SSH:

  1. Il client si connette e il demone si forka per la connessione e invia al client le sue chiavi pubbliche, quella del nodo e quella creata.
  2. Il client verifica che la chiave pubblica (chiave del nodo) fornita dal server non sia cambiata come garanzia che il server è sempre lo stesso.
  3. Il client genera un numero casuale di 256 bit e lo cifra utilizzando le chiavi pubbliche del server inviando il risultato al server stesso.
  4. Le due parti iniziano una connessione criptata, basata sul numero casuale generato dal client, seconda una tecnica in accordo tra le due parti, il server offre dei metodi di cifratura e il client sceglie.
A questo punto viene avviato il processo di autenticazione che si basa su uno dei seguenti metodi:

GENERAZIONE DELLE CHIAVI

Per la crezione delle chiavi nel pacchetto della ssh-2.0.13.tar.gz, troviamo dopo aver compilato i sorgenti il seguente programma sshkeygen che consente con le opportune opzioni di generare le chiave sopra indicate:

# ssh-keygen -f /etc/ssh/ssh_host_key -N '' # chiave dell'hosts

Questo comando permette di generare le chiavi del nodo senza l'ausilio di nessuna password per la chiave private, crea la copia di file /etc/ssh/hostkey,/etc/ssh/hostkey.pub

$ ssh-keygen

Il semplice comando permette di generare le chiavi dell'utente che lo ha lanciato chiedendo la password sulla chiave privata in quanto si tratta di un utente comune e quindi un utente con permessi di root potrebbe leggere la chiave privata, i file delle due chiavi verranno registrate nella directory  /.ssh2:

d_dsa_1024_a : chiave privata
id_dsa_1024_a.pub : chiave pubblica

VERIFICA E SCAMBIO DELLE CHIAVI PUBBLICHE

Per garantire l'autenticità del server, quest'ultimo rende disponibile la sua chiave pubblica per i client che durante la connessione possono verificare che il server sia sempre lo stesso. Quando un client si collega la prima volta al server la sua chiave pubblica viene inserita automaticamente nel file  /.ssh2/hostkeys, per esempio nella macchina che ha funzioni da server ssh2 mi ritrovo nella directory  /.ssh2/hostkeys la chiave pubblica dei client connessi nel mio caso di un client key_22_192.168.200.2.pub key_22_pc2.mi.it.pub sia nel formato stringa che in quello numerico, anche sul client nella stessa directory troveremo la chiave pubblica del server per il controllo durante la connessione.

Local.pub:che corrisponde alla chiave pubblica del client remoto che si vuole connettere su quella macchina.

authorization:file di testo contenente le chiavi pubbliche dei client remoti che servono per il collegamento con l'host in questione.

id_dsa_1024_a: chiave privata dell' utente.

id_dsa_1024_a.pub:chiave pubblica dell' utente.

identification:file che contiene il nome della chiave privata dell'utente.

random_seed:viene usato durante la generazione delle chiavi come supporto alla causalità del sistema.

hostkeys:una directory di cui l'utilizzo è stato spiegato precedentemente.

Binari contenuti nella distribuzione ssh-2.0.13

ssh2: client per la remote shell (telnet sicuro).

sshd2: demone per accettare connessioni remote tramite ssh2.

sftp2: client ftp sicuro funziona se in remoto sta girando un server sftp-server2 l'autenticazione avviene nei modi sopracitati.

sftp-server: server ftp che accetta le connessioni sftp viene lanciato sulla macchina che fa da server.

scp: utility per copiare in modo sicuro i file da una macchina all'altra la copia del file avviene sempre con le autenticazioni sopra citate esempio per copiare il file pippo : bash$ scp pippo pc2.mi.it:/home/shadowz verrà richiesto la passphrase della chiave privata dopodichè inizierà il trasferimento criptato.

CONFIGURAZIONE DEL SERVER E DEL CLIENT SSH

Viene illustarto di seguito una configurazione del demone ssh presa dal file /etc/ssh2/sshd_config opportunamente commentato per altre informazioni leggere i manuali forniti insieme al programma:



-------------------------------------------------------------------------
# sshd2_config
# SSH 2.0 Server Configuration File

*:
# Porta di ascolto del server
Port 22

# specifica per quali indirizzi IP è in ascolto
ListenAddress 0.0.0.0

# specifica il tipo di crittazione utilizzata durante la sessione
Ciphers AnyStd
# Ciphers AnyCipher
# Ciphers AnyStdCipher
# Ciphers 3des

# nome del file di identificazione
IdentityFile identification

# nome del file di autorizzazione
AuthorizationFile authorization

# nome dei file delle chiavi private e pubbliche 
# e del file di randomizzazione. 
HostKeyFile hostkey
PublicHostKeyFile hostkey.pub
RandomSeedFile random_seed

# Se specificato la connessione all' agente di autenticazione
# può essere inoltrata su una macchina remota.
ForwardAgent yes

# specifica se una connessione con un server grafico remota
# possa passare attraverso il canale criptato della Secure Shell
ForwardX11 yes

# DEPRECATED PasswordAuthentication yes
PasswordGuesses 3

# Numero massimo di connessioni
# MaxConnections 50

# 0 == number of connections not limited 
MaxConnections 0 
# PermitRootLogin nopwd
PermitRootLogin yes
# DEPRECATED PubkeyAuthentication yes

# le due righe di seguito definiscono il modo di autenticazione dei client
# come spiegato prima quando non si riesce a attuare un metodo si passa al
# successivo 
# AllowedAuthentications publickey,password,hostbased
AllowedAuthentications publickey,password
# RequiredAuthentications publickey,password

ForcePTTYAllocation no
VerboseMode no
PrintMotd yes
CheckMail yes
UserConfigDirectory "%D/.ssh2"
# UserConfigDirectory "/etc/ssh2/auth/%U"

# viene definita la priorità dei log del demone sshd
SyslogFacility AUTH
# SyslogFacility LOCAL7
Ssh1Compatibility yes
# Sshd1Path 
# Permette di definire a quali hosts è permesso l'accesso 
# AllowHosts localhost, foobar.com, friendly.org
# Permette di definire a quali hosts si nega l'accesso
# DenyHosts evil.org, aol.com
# AllowSHosts trusted.host.org
# DenySHosts not.quite.trusted.org
# NoDelay yes

# Se abilitato il sistema manda un messaggio se la connessione cade

# viene notificata alla macchina remota.
# KeepAlive yes
RequireReverseMapping yes
UserKnownHosts yes


# subsystem definitions

subsystem-sftp sftp-server

-----------------------------------------------------------------------------

di seguito vi è la configurazione del client ssh ( /etc/ssh2/sh2_config) le cui voci principali
corrispondono alla stessa descrizione del file di configurazione del server:

-----------------------------------------------------------------------------
# ssh2_config
# SSH 2.0 Client Configuration File

*:
Port 22
Ciphers AnyStdCipher
IdentityFile identification
AuthorizationFile authorization
RandomSeedFile random_seed
VerboseMode no
#PasswordPrompt "%U@%H's password: "
PasswordPrompt "%&Us% password: "
#LocalForward "110:pop3.ssh.fi:110"
#RemoteForward "3000:foobar:22"
Ssh1AgentCompatibility none
#Ssh1AgentCompatibility traditional
#Ssh1AgentCompatibility ssh2
#SshSignerPath ssh-signer2
NoDelay no
KeepAlive yes

#alpha*:
# Host alpha.oof.fi
# User user
# PasswordPrompt "%U:s password at %H: "
# Ciphers idea
# #foobar:
# Host foo.bar
# User foo_user
-------------------------------------------------------------------

Next Previous Contents