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