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:
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 -------------------------------------------------------------------