User Tools

Site Tools


formationsecurite:securitelinux
Secure Shell

Nous utiliserons 1). Il existe aussi http://www.ssh.com/ qui est une version commerciale.

ssh 10.10.3.102

Pour se connecter avec le même user que celui avec lequel on s'est indentifié

Pour sortir:

exit

ou ctrl+d

Pour se connecter en tant que toto:

ssh toto@10.10.3.102

ou

ssh -l toto 10.10.3.102

Clefs

[[Utilisateurs]]

Quand un utilisateur se connecte pour la première fois sur un serveur, il affiche la clef publique du serveur et demande confirmation. Cette clef publique est ensuite stockée dans ~/.ssh/known_hosts et il n'y a plus de confirmation pour les connexions suivantes à ce serveur:

cat ~/.ssh/known_hosts 
callendor.zongo.be,213.189.177.6 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAq4WKqIZAsd08f4EKhDuJV8hhZzlBYNMxnr4akcXK3HqBfoD8sArzs3UeNK2JYqD96A2kOk0n48SmtBM2D66nvl5KlJmFbnuSqP6alC+bVZlpFyQxXCKsdrJnaW8Y2dUI70eK/3D2FeAQKJmJHiXmBIyNqFv0mZansJ/oW6lnJ8k=

Serveur

ls -l /etc/ssh
total 148
-rw-r--r--  1 root root 111892 2004-09-04 21:49 moduli
-rw-r--r--  1 root root   1159 2004-09-04 21:49 ssh_config
-rw-------  1 root root    668 2005-05-03 10:00 ssh_host_dsa_key
-rw-r--r--  1 root root    603 2005-05-03 10:00 ssh_host_dsa_key.pub
-rw-------  1 root root    528 2005-05-03 10:00 ssh_host_key
-rw-r--r--  1 root root    332 2005-05-03 10:00 ssh_host_key.pub
-rw-------  1 root root    883 2005-05-03 10:00 ssh_host_rsa_key
-rw-r--r--  1 root root    223 2005-05-03 10:00 ssh_host_rsa_key.pub
-rw-r--r--  1 root root   2861 2004-09-04 21:49 sshd_config

Il y a 6 clefs:

  • 3 privées
    • ssh_host_key (ssh 1)
    • ssh_host_dsa_key (ssh 2)
    • ssh_host_rsa_key (ssh 2)
  • 3 publiques
    • ssh_host_key.pub (ssh 1)
    • ssh_host_dsa_key.pub (ssh 2)
    • ssh_host_rsa_key.pub (ssh 2)

DSA est breveté. Le brevet sur RSA a expiré en 2000 aux États-Unis. RSA est utilisé par défaut.

Lectures:

On peut aussi échanger des clefs pour pouvoir se logguer sans mot de passe (login non interactif). C'est utile pour l'automatisation (scripts).

Principe de connexion

  • user: “je veux me connecter”, envoie la clef publique et les algorithmes connus au serveur
    • c'est le seul moment où un man-in-the-middle peut avoir lieu
  • serveur: l'algorithme est choisi, envoie sa clef publique à l'utilisateur encryptée avec la clef publique de l'utilisateur
  • clé symétrique (768 bits) encryptée avec la clef publique du serveur et la clef privée du client
    • changement de la clef symétrique tous les 1/4 d'heure

Seul le premier échange passe en clair.

Configuration

serveur

/etc/ssh/sshd_config Options:

  • ListenAddress: écoute que sur l'adresse spécifiée du réseau (si on a plusieurs interfaces réseau pour la machine)
  • X11Forwarding: permet d'avoir des applications graphiques par la connexion
  • pubkeyauthentication: version 2
  • rsaauthentication: version 1

Pour les autres options, voir la page de manuel :)

client

Pour tous les utilisateurs: /etc/ssh/ssh_config

  • port 22
  • protocole 2

On peut définir une configuration par machine.

Chaque utilisateur peut définir son propre fichier dans ~/.ssh/ssh_config.

Exercice

Créer une authentification sécurisée entre 2 machines. Travailler par binôme

  • créer un utilisateur
adduser carl
  • générer les clefs pour cet utilisateur
su carl
ssh-keygen -t rsa1
ssh-keygen -t dsa; ssh-keygen -t rsa
  • copier la clef publique du binôme dans authorized_keys
scp ~/.ssh/id_rsa.pub 10.10.3.101:/home/carl/.ssh/authorized_keys
  Attention: si l'utilisateur doit avoir accès depuis différentes machines, faire:
  <code>scp ~/.ssh/id_rsa.pub 10.10.3.101:/home/carl/.ssh/key_temp</code>
  se logguer sur la machine et faire:
  <code>cd .ssh

cat key_temp » authorized_keys</code>

  • virer l'authentification par mot de passe:

dans le fichier /etc/ssh/sshd_config, changer:

  <code>PasswordAuthentication no</code>
  redémarrer sshd:
  <code>/etc/rc.d/rc.sshd restart</code>
* tester

Pour le binôme, préparer la machine:

adduser test
su test
cd
mkdir .ssh

Exercice 3

N'autoriser la connexion au serveur que pour les utilisateurs dont la clef machine a été fournie.

Changer: /etc/ssh/sshd_config

HostbasedAuthentication yes

Mettre les clefs dans /etc/ssh/ssh_known_hosts: Ici, je mets la clef de la machine (qui se trouve sur cette machine dans /etc/ssh/ssh_host_rsa_key.pub)

cp /home/test/ssh_host_rsa_key.pub /etc/ssh/ssh_known_hosts

Ca marche pas.

Securisation

09/05/05

Exercice
  • créer un user salle 3

sur le serveur (10.10.3.101):

  <code>adduser salle3</code>
* autoriser un user par machine à se connecter sur votre poste en tant que salle 3 par clé
    sur le client:
  <code>cd

ssh-keygen -t rsa scp .ssh/id_rsa.pub root@10.10.3.101:/home/salle3/.ssh/authorized_keys exit</code>

  sur le serveur:
  Éditer le fichier /etc/ssh/sshd_config
  <code>Protocol 2

PermitRootLogin no AllowUsers salle3 PasswordAuthentication no</code>

  Redémarrer le serveur ssh
  <code>/etc/rc.d/rc.sshd restart</code>
Tunnels SSH

Au lieu d'utiliser telnet sur le port 23 (tout passe en clair), on va créer un tunnel ssh dans lequel la connexion telnet passe.

1. créer un tunnel ssh entre les 2 machines (ports source et destination à préciser)
2. on fait passer l'application par le tunnel

Sur le client: Créer le tunnel

ssh -L 22222:127.0.0.1:23 root@10.10.3.101

-L 22222 spécifie le port de sortie du client. 127.0.0.1:23 spécifie la destination finale: IP et port sur lequel on veut arriver (ici, on va sur le serveur ssh en local, donc c'est 127.0.0.1 root@10.10.3.10 connexion au serveur

Ensuite, on lance la session telnet:

telnet 127.0.0.1 22222

Le 127.0.0.1 se rapporte à la machine locale, donc le client.

Sur le server, il faut un serveur ssh qui écoute.

Exercice: Se connecter sur le serveur mail (port 25) de Michaël (10.10.3.108) à travers un tunnel ssh: Sur une première console:

ssh -L 2225:127.0.0.1:25 root@10.10.3.108

On a un accès shell

Dans une 2e console, on lance la session telnet sur le serveur mail:

telnet 127.0.0.1 2225
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 forma308.tf3.be ESMTP Sendmail 8.13.3/8.13.3; Mon, 9 May 2005 11:45:29 +0200

J'ai une session ouverte:

help
214-2.0.0 This is sendmail version 8.13.3
214-2.0.0 Topics:
214-2.0.0       HELO    EHLO    MAIL    RCPT    DATA
214-2.0.0       RSET    NOOP    QUIT    HELP    VRFY
214-2.0.0       EXPN    VERB    ETRN    DSN     AUTH
214-2.0.0       STARTTLS
214-2.0.0 For more info use "HELP <topic>".
214-2.0.0 To report bugs in the implementation send email to
214-2.0.0       sendmail-bugs@sendmail.org.
214-2.0.0 For local information send email to Postmaster at your site.
214 2.0.0 End of HELP info

On peut voir les connections sur ma machine (sur une 3e console):

netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:37              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:2225          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:113             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:2225          127.0.0.1:33033         ESTABLISHED
tcp        0      0 127.0.0.1:33033         127.0.0.1:2225          ESTABLISHED
tcp        0      0 10.10.3.101:32921       213.189.177.6:2222      ESTABLISHED
tcp        0      0 10.10.3.101:32770       83.217.68.100:5223      ESTABLISHED
tcp        0      0 10.10.3.101:33032       10.10.3.108:22          ESTABLISHED
tcp        0      0 10.10.3.101:32769       83.217.68.100:993       ESTABLISHED
tcp        0      0 127.0.0.1:2225          0.0.0.0:*               LISTEN

Le tunnel.

tcp        0      0 127.0.0.1:2225          127.0.0.1:33033         ESTABLISHED
tcp        0      0 127.0.0.1:33033         127.0.0.1:2225          ESTABLISHED
tcp        0      0 10.10.3.101:33032       10.10.3.108:22          ESTABLISHED

La connexion qui passe par le tunnel.

Tunnel avec 3 machines

Premier tunnel securise

  • client (avec client ssh)
  • serveur ssh (10.10.3.12)
  • serveur web (10.10.3.101)

Les 2 serveurs sont supposés être dans un réseau sécurisé (la connexion entre les 2 est en clair).

Depuis le client, créer le tunnel:

ssh -L 8800:10.10.3.101:80 root@10.10.3.12

Ensuite, ouvrir une session avec un browser et surfer sur http://127.0.0.1:8800/

Ici, nous allons utiliser un serveur SSH Windows: http://sshwindows.sf.net/ avec 2 interfaces réseau: 10.10.3.12 192.168.0.1

Pour l'installation, lancer le wizard d'installation et suivre les instructions.

cd c:\program files\openssh\bin
mkgroup -l >> ..\etc\group
mkgroup -d >> ..\etc\group
mkpasswd -l -u administrator >> ..\etc\passwd
mkpasswd -d -u administrator >> ..\etc\passwd

-l pour local groups et -d pour les domain groups

Pour lancer le serveur:

c:\program files\openssh\usr\sbin\sshd

Faire de la machine un routeur: Start → Programs → Administrative Tools → Routing and Remote Access DC12 → click droit → configure and enable routing and remote access

Sur le webserveur, changer la route par défaut:

route del default gw 10.10.3.250
route add default gw 10.10.3.12

Il faut que les clients (192.168.0.2 et 192.168.0.3) mettent comme passerelle le serveur SSH:

route add default gw 192.168.0.1

Note: ça marche pas, donc on va mettre un noyau 2.6 sur la Slackware.

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.11.8.tar.bz2

10/05/05

Exercices

Faire un tunnel sur un serveur (10.10.3.108) et se connecter au serveur mail local par le tunnel.

  • création du tunnel:
ssh -L 2225:127.0.0.1:25 root@10.10.3.108
  • connection au serveur mail:
telnet 127.0.0.1 2225

Faire un tunnel sur un serveur (10.10.3.102) et se connecter à un serveur mail distant (10.10.3.108):

  • le tunnel
ssh -L 2225:10.10.3.108:25 alacon@10.10.3.102
  • connection au serveur mail:
telnet 127.0.0.1 2225

N.B: la connection du serveur SSH au serveur mail n'est pas sécurisée.

Deuxieme tunnel securise

Le client et le serveur SSH sont dans le même réseau, le tunnel entre les 2 n'est pas encrypté. Le client force le serveur web a initialiser une connexion SSH avec le serveur SSH. Ceci génère un tunnel sécurisé entre le serveur SSH et les serveur web. Ensuite, on peut faire une requête http depuis le client

ssh -R 23000:10.10.3.101:80 root@10.10.3.102

Foireux.

10.10.3.101: serveur web 10.10.3.102: serveur SSH

ssh -R 23000:10.10.3.101:80 alacon@10.10.3.102

C'est du port forwarding (pas sécurisé)

ssh -L 30000:10.10.3.102:23000 alacon@10.10.3.102

C'est un tunnel

telnet 127.0.0.1 30000

HOST1: client HOST2: serveur SSH HOST3: serveur Les 3 machines tournent ssh serveur. sur HOST2:

ssh -R p1:127.0.0.1:p2 HOST1
ssh -L p2:127.0.0.1:p3 HOST3

Ensuite, sur HOST1:

telnet 127.0.0.1 p1

Avantage: l'utilisateur sur HOST1 ne doit pas faire de manipulation.

Lectures

Securisation machine

Bios

  • mot de passe bios: pour pouvoir booter, il faut taper le mot de passe
    • désavantage: pas de reboot à distance
  • mot de passe bios: pour éditer le bios
    • obligatoire si on utilise un mot de passe bios
    • mettre booter sur le disque dur en premier

Boot loader

  • un seul OS sur un serveur
  • mot de passe pour booter
  • mot de passe par OS à démarrer
  • si dual boot, par défaut, mettre l'OS principal
  • desactiver les OS qui ne sont pas sûrs (MS-DOS, qui a accès à tout le disque)

Mots de passe utilisateurs

  • validité du mot de passe
  • sous Windows: activer mot de passe complexe: au moins 3 des 4 règles
    • maj & min
    • 8 caractères min
    • au moins un chiffre
    • au moins un caractère non-alphanumérique
  • sous Linux: géré par PAM (pluggable authentication manager)
  • sous Windows, par défaut, l'utilisateur doit changer son mot de passe au prochain logon
  • sous Linux, on peut changer la durée de validité du mot de passe pour chaque utilisateur avec la commande chage

Exercice

  • lilo
    • boot par défaut linux
    • mot de passe pour booter linux
  • mot de passe root
    • complexe (sans message d'erreur)
    • mettre une durée de validité de 5 jours
  • désactiver l'accès shell à root et le login à root

lilo

Modifier /etc/lilo.conf:

sudo vi /etc/lilo.conf

ajouter dans la configuration globale la ligne:

default = Linux

Dans la section Linux, ajouter la ligne:

password = vqjtb26

Changer les droits sur /etc/lilo.conf pour qu'il ne puisse être lu que par root (puisqu'il y a un mot de passe):

sudo chmod 0600 /etc/lilo.conf

Lancer lilo pour prendre en compte les modifications:

 sudo /sbin/lilo
Added Windows
Added Linux *

mot de passe root

Pour le changer:

sudo passwd

~CnP1pw S'assurer qu'il n'y a pas d'avertissement comme quoi c'est un mot de pas de faible sécurité. Pour la validité de 5 jours:

sudo chage -M 5 root

Pour vérifier:

sudo chage -l root
Minimum:        0
Maximum:        5
Warning:        -1
Inactive:       -1
Last Change:            May 11, 2005
Password Expires:       May 16, 2005
Password Inactive:      Never
Account Expires:        Never

Desactiver l'acces shell a root et le login a root

  • empêcher root de s'identifier sur les terminaux: commenter toutes les lignes du fichier /etc/securetty
  • empêcher root de se connecter à la machine avec SSH en tant que root:
    • dans /etc/ssh/sshd_config, mettre la ligne:
 PermitRootLogin no
  • redémarrer le service SSH
/etc/rc.d/rc.sshd restart

On peut maintenant s'identifier en tant que root uniquement avec:

su -

Pour restreindre l'utilisation de su à l'utilisateur toto:

  • ajouter toto dans le group wheel:
usermod -G wheel toto
  • restreindre l'accès au groupe wheel:
chgrp wheel /bin/su
chgrp wheel /bin/su
chmod o-x /bin/su
chmod +s /bin/su

Si pour un utilisateur, on met dans /etc/passwd le shell à /bin/nologin, il désactive: login, gdm, kdm, xdm, su, ssh, scp, sftp. Il reste donc l'accès ftp email (et sudo si c'est pour root).

Securisation des services

Limiter les services au minimum nécessaire. Comment voir ce qui tourne?

netstat -na

Correspondance service / port: /etc/services et http://www.grc.com/port_65535.htm

Nous allons fermer les ports ouverts:

root@forma301:/home/carl# netstat -na
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:37              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:113             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN
tcp        0      0 10.10.3.101:32903       83.217.68.100:5223      ESTABLISHED
tcp        0      0 10.10.3.101:33129       83.217.68.100:993       ESTABLISHED
udp        0      0 0.0.0.0:512             0.0.0.0:*
udp        0      0 0.0.0.0:37              0.0.0.0:*
udp     5196      0 0.0.0.0:68              0.0.0.0:*

port 80: serveur web (apache):

chmod a-x /etc/rc.d/rc.httpd

port 25: serveur mail (sendmail):

chmod a-x /etc/rc.d/rc.sendmail

port 22: serveur ssh (openSSH):

chmod a-x /etc/rc.d/rc.sshd

port 37: serveur de temps: démarré par xinetd port 113: serveur d'authentification réseau: démarré par xinetd port 512: biff (nouveau email): démarré par xinetd port 587: submission 10)): pour envoi / réception d'email

chmod a-x /etc/rc.d/rc.inetd

portmap: pour RPC, qui est nécessaire pour nis, nfs et samba

chmod a-x /etc/rc.d/rc.inet2

Pour sécuriser nis, nfs et samba: limiter l'écoute de portmap au réseau local (règle dans iptables)

port 68: bootpc: pour le DHCP client (on le laisse).

Noyau

  • limiter l'accès à /boot à root en lecture.
  • kernel monolithique: pas de modules, choisir les pilotes nécessaires uniquement

Recompilation

Décompresser

tar xjf linux-2.6.11.8.tar.bz2 -C /usr/src/
cd /usr/src
rm linux
ln -s linux-2.6.11.8/ linux
cd linux

Configuration

make menuconfig

Compilation

make
make install
mv /boot/vmlinuz /boot/vmlinuz-2.6.8.11

changer /etc/lilo.conf:

# Linux bootable partition config begins
image = /boot/vmlinuz-ide-2.4.29
  root = /dev/sda3
  label = Linux24
  password = vqjtb26
  read-only
image = /boot/vmlinuz-2.6.8.11
  root = /dev/sda3
  label = Linux26
  read-only
# Linux bootable partition config ends

Mettre le noyau 2.6 par défaut:

default = Linux26

Puis exécuter lilo

liloAdded
Windows
Added Linux24
Added Linux26 *

Et rebooter :)

formationsecurite/securitelinux.txt · Last modified: 2013/01/30 17:52 (external edit)