sshd


Breve introduzione a SSH:
SSH (secure shell) è una suite che permette di utilizzare un canale di trasmissione cifrato per amministrare remotamente una macchina da linea di comando. SSH mira a sostituire protocolli insicuri quali telnet, rlogin o rsh che non includono in modo nativo una forma di cifratura applicata alla comunicazione. SSH è anzitutto una shell remota ma può anche essere impiegata per effettuare tunnel cifrati per protocolli tipicamente poco sicuri quali FTP (sftp) o RPC (spc), argomenti che non verrano però considerati in questi brevi appunti.

Obbiettivo:

Configurazione base di un demone ssh per l'amministrazione remota da linea di comando.

Policy adottate
  • Demone in ascolto su una porta non standard.
  • Accesso remoto sulle sole interfacce di rete interessate, tramite iptables.
  • Impedire i login con password nulla.
  • Impedire l'accesso all'utente root consentendolo ad un'unica utenza di tipo limitato. 
Installazione del demone sshd
  • root@linux:~# apt-get install openssh-server
    Reading package lists... Done
    Building dependency tree... Done
    [....]
    root@linux:~#
Account trusting

La configurazione base che propongo prevede l'utilizzo di un'utenza di tipo limitato che verrà impiegata per l'accesso al server ssh.
Root non potrà effettuare login.
I privilegi di root potranno essere ottenuti dopo che l'utenza limitata si è loggata al server, tramite il comando su -.
Adottando una politica di questo tipo un attacker per godere di privilegi di root dovrebbe conoscere le credenziali di due utenze anzichè una. Anche se la password di root fosse conosciuta l'eventuale attaccante non potrebbe comunque ottenere l'accesso.
Si evitano, inoltre, eventuali attacchi di brute forcing verso un well known user quale è "root",  l'unico utente ad essere praticamente quasi sempre presente sulla macchina.
Creare l'utenza limitata (password robusta!!):
  • root@linux:~# useradd -g users -p $$H_$ecr3T_PasswD nome_utente_ssh
    root@linux:~#
Configurazione del file /etc/ssh/sshd_config:
  • vi /etc/ssh/sshd_config
#Si escludono implicitamente tutti gli utenti di sistema (DenyUsers *)
#e si permette il login al solo utente denominato "ssh_user". In
#alternativa si possono usare la direttive Allow\DenyGroups,
#per criteri di gruppo.
AllowUsers nome_utente_ssh

#Porta
Port 51222

#Interfacce su cui il demone resterà in ascolto (0.0.0.0 == tutte)
ListenAddress 0.0.0.0

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 serer key
KeyRegenerationInterval 3600
ServerKeyBits 768
# 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
# To change Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#AFSTokenPassing no
#KerberosTicketCleanup no
# Kerberos TGT Passing does only work with the AFS kaserver
#KerberosTgtPassing yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
KeepAlive 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


Riavviare il demone:
  • root@linux:~# /etc/init.d/ssh restart
    Restarting OpenBSD Secure Shell server...                     [ ok ]
    root@linux:~# 
Sicurezza aggiuntiva riguardo le interfacce

E' bene consentire l'accesso a sshd dalla sola interfaccia di rete interessata. L'opzione "ListenAddress 0.0.0.0", precedentemente specificata in /etc/ssh/sshd_config, mette il demone in ascolto su tutte le interfacce presenti sul sistema. Sarà compito di iptables negare l'accesso alle interfacce indesiderate. Supponendo di voler autorizzare l'accesso dalla sola interfaccia WAN avendo una configurazione del tipo [WAN:eth0, LAN:eth1] procedere con:

  • root@client:/# iptables -A INPUT -i eth1 -p TCP --dport 51222 -j DROP
  • root@client:/# iptables -A INPUT -i eth0 -p TCP --dport 51222 -j ACCEPT

Sul client

Installare il client ssh (gia installato di default nella maggior parte delle distribuzioni):
  • root@client:/# apt-get install openssh-client
    [...]
    root@client:/#
Connettersi alla shell remota:
  • root@client:/# ssh -p 51222 nome_utente_ssh@remote_server.org
    user@192.168.1.209's password:
    Linux client 2.6.12-9-386 #1 Mon Oct 10 13:14:36 BST 2005 i686 GNU/Linux
    Last login: Wed Nov  9 20:50:29 2005
    [...]
    ssh_user@server:~$
Una volta loggati utilizzare l'account root per avere privilegi amministrativi *:
  • ssh_user@server:~$ su -
    Password:
  • root@server:~#
 * Nota per gli utenti Ubuntu: prima di effettuare il login abilitare (sul server) l'utenza root, assegnandogli una password:
  • user@client:/# sudo passwd root
    Password:
    user@client:/#
Nota per piattaforme Windows:

Di OpenSSH-server è stato effettuato un porting per Windows: SSHWindows.
E' disponibile un ottimo client ssh sia per Windows che per linux: putty.




billiejoex
EOF 2005-11-10 1:19 AM
last update 2005-11-10