Le système d'exploitation GNU-Linux/Le serveur de shell distant SSH

Un livre de Wikibooks.
Aller à : Navigation, rechercher
Le système d'exploitation GNU-Linux
Tux.svg
Plan
  1. Qu'est-ce qu'un système d'exploitation ?
  2. Unix et Linux
  3. Partitionnement du disque
  4. Installation
    1. Installer Debian via le réseau
  5. Utilisateur Unix
    1. Le login
    2. Commandes de base
    3. L'aide en ligne man
    4. L'éditeur de texte vi
    5. Les shells
    6. La complétion
    7. Les jokers
    8. Les répertoires importants
    9. Redirection des entrées/sorties
    10. Invoquer un programme en tâche de fond
    11. Propriétaires et droits d'accès
    12. Processus
  6. Administration du système
    1. Configuration du réseau
    2. Les utilisateurs et groupes
    3. Le processus d'initialisation
    4. Les systèmes de fichiers
    5. Le système virtuel /proc
    6. Les périphériques /dev
    7. L'ordonnanceur de travaux cron
    8. Le backup : tar et gzip
    9. ghost avec partimage
    10. sauvegarde de fichiers avec rsync
    11. Les fichiers journaux syslog
    12. Installation de nouveaux logiciels
    13. Le noyau Linux et les modules
    14. Autres commandes utiles
    15. Installation RAID1 logiciel + LVM + XFS
    16. Scripts de surveillance
    17. Réseaux sans fil
  7. Administration des services réseaux
    1. Le serveur de noms Bind
    2. Le serveur de configuration réseau DHCP
    3. Le serveur de shell distant SSH
    4. Le partage de fichiers Samba
    5. Le partage de fichiers NFS
    6. Le serveur d'impression CUPS
    7. Le serveur de mails Postfix
    8. Le serveur de fichiers FTP
    9. La base de données Mysql
    10. Le serveur Web Apache
    11. Les annuaires LDAP
    12. L'outil d'administration Webmin
    13. Le routage avec iptables et route
    14. La supervision
  8. Sécurisation d'un serveur Linux
    1. Installation d'un service en mode chroot
    2. Protection avec iptables
  9. Médiagraphie
  10. Auteurs
Modifier ce modèle

Sections

[modifier] Le serveur SSH

SSH (Secure SHELL) permet de se connecter à un ordinateur distant et de disposer d'un shell sécurisé. Par défaut, le serveur SSH attend les connexions distantes sur le port 22 / protocole TCP.

Pour installer un serveur SSH, on utilise la commande suivante :

 # apt-get install ssh

La connexion et le transfert de données via SSH est sécurisée par un système de chiffrement utilisant soit l'algorithme RSA (Rivest Shamir Adleman), soit l'algorithme DSA (Digital Signature Algorithm).

Lors de son installation, le serveur SSH génère des clés de chiffrement RSA et DSA. Ces clés sont composées d'une partie privée et d'une partie publique. Elles sont stockées dans le répertoire /etc/ssh/ :

 $ ls -l /etc/ssh/
 ...
 -rw------- 1 root root    672 2007-11-05 17:37 ssh_host_dsa_key
 -rw-r--r-- 1 root root    600 2007-11-05 17:37 ssh_host_dsa_key.pub
 -rw------- 1 root root   1675 2007-11-05 17:37 ssh_host_rsa_key
 -rw-r--r-- 1 root root    392 2007-11-05 17:37 ssh_host_rsa_key.pub

Chaque tentative de connexion est enregistrée dans le fichier /var/log/auth.log.

[modifier] Fichier de configuration

Le fichier de configuration du serveur SSH est /etc/ssh/sshd_config :

 # cat /etc/ssh/sshd_config
 
 # Port de fonctionnement du serveur SSH
 Port 22
 
 # Permet de spécifier sur quelle interface SSH écoute
 #ListenAddress ::
 #ListenAddress 0.0.0.0
 
 # On utilise exclusivement la version 2 du protocole SSH
 Protocol 2
 
 # Emplacement des clés RSA et DSA
 HostKey /etc/ssh/ssh_host_rsa_key
 HostKey /etc/ssh/ssh_host_dsa_key
 
 # On active la séparation des privilèges
 UsePrivilegeSeparation yes
 
 # Durée de vie et taille de la clé
 KeyRegenerationInterval 3600
 ServerKeyBits 768
 
 # Pour syslog
 SyslogFacility AUTH
 LogLevel INFO
 
 # Authentification
 LoginGraceTime 120
 PermitRootLogin no
 StrictModes yes
 
 RSAAuthentication yes
 PubkeyAuthentication yes
 #AuthorizedKeysFile    %h/.ssh/authorized_keys
 
 # Ignore les fichiers ~/.rhosts et ~/.shosts
 IgnoreRhosts yes
 
 # Ignore l'authentification RhostsRSA
 RhostsRSAAuthentication no
 # Même principe pour la version 2 du protocole
 HostbasedAuthentication no
 
 # A décommenter sur on ne veut pas se fier au fichier ~/.ssh/known_hosts pour RhostsRSAAuthentication
 #IgnoreUserKnownHosts yes
 
 # Empêche la connexion des utilisateurs qui n'ont pas de mot de passe (PAS RECOMMANDE)
 PermitEmptyPasswords no
 
 # Activer les mots de passes par Challenge / Réponse
 ChallengeResponseAuthentication no
 
 # Permet de supprimer l'authentification par mot de passe et n'utiliser que l'authentification par clé partagée
 #PasswordAuthentication yes
 
 # Options Kerberos
 #KerberosAuthentication no
 #KerberosGetAFSToken no
 #KerberosOrLocalPasswd yes
 #KerberosTicketCleanup yes
 
 # Options GSSAPI
 #GSSAPIAuthentication no
 #GSSAPICleanupCredentials yes
 
 # Activer la redirection X11
 X11Forwarding yes
 X11DisplayOffset 10
 
 # Aficher le message du jour (Message Of the Day)
 PrintMotd no
 
 # Afficher la date et heure de la dernière connexion
 PrintLastLog yes
 
 # Maintient la connexion TCP
 TCPKeepAlive yes
 
 #UseLogin no
 
 #MaxStartups 10:30:60
 #Banner /etc/issue.net
 
 # Permet à un client de passer des variables locales d'environnement
 AcceptEnv LANG LC_*
 
 Subsystem sftp /usr/lib/openssh/sftp-server
 
 # Utilise l'authentification via PAM
 UsePAM yes


Les options de ce fichier de configuration sont décrites dans la page de manuel de sshd_config :

 $ man sshd_config

Le fichier de configuration par défaut proposé par Debian nécessite quelques ajustements.

La ligne PermitRootLogin yes autorise les connexions distantes à partir du compte root. Cette option est dangereuse car elle permet à un attaquant distant de scanner le mot de passe du super-utilisateur root.

La bonne pratique est de se connecter avec son compte utilisateur (ex: alex), et ensuite de passer root avec la commande su, ou d'effectuer les opérations d'administration avec la commande sudo.

On remplace donc cette ligne par :

 PermitRootLogin no

Afin de renforcer la sécurité, on peut limiter les connexions SSH à une liste d'utilisateurs donnés. Ceci est réalisé avec l'option AllowUsers :

 AllowUsers alex pierre

Sur le même principe, on peut restreindre les connexions à un ou plusieurs groupes Unix :

 AllowGroups admin sshusers

Afin que ces modifications soient prises en compte, il faut relancer le serveur SSH :

 # /etc/init.d/ssh restart


[modifier] Le client SSH

[modifier] Utilisation

Pour se connecter à un serveur SSH, on utilise la commande ssh. Sa syntaxe est la suivante :

 $ ssh <login>@<nom ou adresse IP du serveur>

Exemple :

 $ ssh alex@pc210

ou

 $ ssh pc210 -l alex

Si on possède le même login sur la machine locale et distante, il est inutile de spécifier le login :

 $ ssh pc210

Si ssh ne fonctionne pas sur le port standard 22, l'option -p permet d'indiquer le port à utiliser :

 $ ssh pc210 -p 2222

L'option -X du client ssh permet de rediriger l'affichage graphique (le DISPLAY) via le tunnel ssh, et ainsi lancer un programme graphique distant et l'afficher sur notre ordinateur :

 $ ssh -X pc210
 ...
 pc210$ xeyes &

Il faut toutefois que l'option X11Forwarding soit positionnée à yes sur le serveur pour que la redirection graphique fonctionne.


[modifier] Vérification du fingerprint

Lors de la première connexion, ssh affiche le fingerprint du serveur SSH et demande confirmation :

 $ ssh pc210
 The authenticity of host 'pc210 (192.168.30.210)' can't be established.
 RSA key fingerprint is 8e:c6:f0:b5:e6:71:c9:20:ec:5d:ed:d4:e1:fc:fb:16.
 Are you sure you want to continue connecting (yes/no)?

Si on veut être certain de l'authenticité du serveur distant, on peut contacter l'administrateur et vérifier avec lui que le fingerprint indiqué est le bon. Pour faire ceci, taper la commande ssh-keygen -l sur le serveur ssh et indiquer le chemin vers la clé RSA du serveur ssh :

 # ssh-keygen  -lv
 Enter file in which the key is (/root/.ssh/id_rsa): /etc/ssh/ssh_host_rsa_key
 2048 8e:c6:f0:b5:e6:71:c9:20:ec:5d:ed:d4:e1:fc:fb:16 /etc/ssh/ssh_host_rsa_key.pub
 +--[ RSA 2048]----+
 |                 |
 |                 |
 |          . .    |
 |         oEo     |
 |    .   S.o      |
 |o. . + +o=.      |
 |=.+   E..+o      |
 |oo . . oo.       |
 |    . o..        |
 +-----------------+


Par la suite, le fichier /home/<user>/.ssh/known_hosts stoque l'identité chiffrée de la machine et ssh ne nous demande plus confirmation.

[modifier] Authentification automatique

Si on se connecte souvent sur le même serveur, on peut générer une paire de clés afin de ne pas avoir à saisir le mot de passe à chaque connexion.

Sur la machine cliente

On génére une paire de clés avec la commande ssh-keygen :

 $ ssh-keygen -t rsa
 Generating public/private rsa key pair.
 Enter file in which to save the key (/home/alex/.ssh/id_rsa):
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:
 Your identification has been saved in /home/alex/.ssh/id_rsa.
 Your public key has been saved in /home/alex/.ssh/id_rsa.pub.
 The key fingerprint is:
 41:ab:25:09:eb:ad:41:66:2d:d6:85:e3:73:02:40:e3 alex@pc210

On ne saisi pas de passphrase, sinon le système va demander à saisir la passphrase à chaque connexion, ce qui est aussi contraignant que la saisie du mot de passe.

Sur la machine distante

On se connecte sur la machine distante et on copie le contenu de la clé publique précédement générée (/home/alex/.ssh/id_rsa.pub) dans le fichier /home/alex/.ssh/authorized_keys.

    ssh-copy-id -i /home/alex/.ssh/id_dsa.pub alex@192.168.30.190

Note: Si on ne dispose pas de la commande ssh-copy-id (anciennes versions de ssh), on peut utiliser la commande suivante :

    cat ~/.ssh/id_rsa.pub | ssh alex@192.168.30.190 "cat - >> ~/.ssh/authorized_keys"

Ceci fait, on peut se connecter sur la machine distante sans avoir à saisir le mot de passe.

[modifier] La commande scp

La commande scp(Secure Copy) permet de copier un fichier d'un ordinateur vers un autre en utilisant SSH.

Par exemple, la commande suivante permet de copier le fichier fichier.txt vers le répertoire /tmp de l'ordinateur pc211  :

$ scp fichier.txt alex@pc211:/tmp

On peut également copier un fichier distant sur la machine locale :

 $ scp alex@pc211:/etc/passwd /tmp

L'option -r permet de copier un répertoire de manière récursive.

[modifier] Les clients SSH sous windows

Il existe plusieurs clients SSH pour windows, dont notamment les logiciels libres suivants :

- Putty

- Winscp

Outils personnels
Espaces de noms

Variantes
Actions
Bibliothèque
Navigation
Aide
Imprimer / exporter
Boîte à outils