Accueil > Le système UNIX > SSH en détails, Partie 1

SSH en détails, Partie 1

Par François Joseph de Kermadec, le 9 Juillet 2004

traduit par Vincèn Pujol, le 26 Avril 2005

Que vous soyez un administrateur système essayant d’aider des utilisateurs éparpillés sur plusieurs agences ou un utilisateur Mac expérimenté gérant de multiples comptes, vous aimeriez probablement pouvoir accéder facilement à tous les Macs sur lesquels vous travaillez à distance. Et, comme vous êtes informé des nombreux risques que tout utilisateur rencontre aujourd’hui sur Internet, vous souhaiteriez probablement y accéder de façon sécurisée, sans compromettre la sécurité de vos données ou de vos mots de passe. De plus, si, comme un nombre grandissant d’utilisateurs Mac, vous êtes passé sur une solution tout portable, vous avez alors besoin d’outils d’administration à distance qui soit assez flexible pour travailler sur des réseaux à haut-débit comme sur de vieilles connexions bas-débit qui peuvent encore se rencontrer même dans des régions bien équipées.

Bien, comme la chanson dit: “J’ai des nouvelles pour vous !” Grâce à la volonté d’Apple d’utiliser et de promouvoir les logiciels open source ainsi que leur attention aux questions de sécurité, tous les outils dont vous avez besoin pour accomplir ce tour de force technologique sont déja inclus dans votre installation par défaut du système, ou peuvent être téléchargés depuis Internet en quelques minutes.

Cet article est le premier d’une série de trois articles où je vais vous montrer comment activer, sécuriser, et obtenir toute la puissance du serveur SSH intégré au Mac. Au cours des explications, nous verrons la cryptographie asymétrique, les signatures numériques, et le tunnel SSH - des concepts très intéressants qui, avec un peu de pratique, vous permettront de tirer encore plus de possibilités de votre ordinateur.

À propos de SSH et pourquoi on le choisit

SSH signifie Secure Shell (Shell Sécurisé). Cependant, ce n’est pas un shell dans le sens traditionnel. Il s’agit, en fait, d’un protocole qui vous permet de vous connecter à distance sur un ordinateur, via une liaison sécurisée et encryptée.

En utilisant SSH, vous pouvez contrôler un ordinateur quasiment de la même façon que si vous étiez assis devant, en utilisant son clavier. En fait, la plupart des serveurs sans tête - c’est à dire sans moniteur - dans les grandes centres serveurs informatiques sont administrés à distance par des outils tels que SSH. Cependant, ce qui rend SSH différent des autres programmes de connexion à distance est qu’il est distribué avec les systèmes d’exploitation de type UNIX depuis un certain temps maintenant, et il apporte en plus trois éléments essentiels: Identification, Cryptage, et Intégrité.

Identification signifie que SSH n’accordera pas de droits à un utilisateur cherchant à se connecter sans lui demander une preuve d’identité et en s’assurant que l’utilisateur est bien en réalité la personne qu’il prétend être. Malgré que cela puisse paraitre un peu fou, l’ensemble de votre monde informatique tourne autour d’identifications fortes: sans elles, votre identité pourrait être volée, et des actions réalisées sans votre accord en votre nom. Magnifique !

Beaucoup de programmes de connexion à distance gèrent l’identification de façon peu efficace et peuvent être facilement détournés pour donner des droits à quelqu’un qui ne devrait pas en avoir — un procédé connu sous le nom de “spoofing”, rendu facile par le fait que beaucoup de protocoles sur lesquels s’appuient les réseauxn’ont pas été conçus au départ avec un système d’identification. De plus, SSH est capable d’utiliser de nombreuses formes d’identifications, des plus simples au plus élaborées — penser aux mots de passer, PAM, S/Key (mots de passe jetable), SecureID, et d’autres encore. Aujourd’hui nous allons parler spécifiquement de l’identification par Clé Publique (Public Key), car cela est en même temps très puissant et pratique à utiliser.

Cryptage signifie que les données qui transitent sur le réseau entre les deux ordinateurs en communication ne peuvent pas être comprises par des utilisateurs intrus. Ils peuvent malgré tout intercepter les données mais, malgré tous leurs efforts, les données resteront illisibles et inutilisables. D’autres programmes de connexions à distance ont tendance à ne faire aucun cryptage , ce qui signifie que vos mots de passe et vos fichiers confidentiels peuvent être lus et volés pendant qu’ils transitent sur le réseau. Le cryptage est géré de façon transparente par SSH, ce qui signifie que les données voyageant dans le tunnel n’ont pas besoin de savoir gérer le cryptage. Le cryptage étant réalisé de bout en bout, sauf si un des deux ordinateurs a été pénétré, il n’y a aucun moyen pour un intrus de lire les informations de façon simple.

Intégrité signifie que les données pouvant être altérées en chemin (c’est un effet de bord des protocoles TCP/IP, qui sont utilisés sur Internet), SSH le remarquera immédiatement et rejetera les données altérées. Si vous pensez que l’intégrité des données n’est pas si fondamental que ça, repensez-y. Il est assez facile pour quelqu’un d’insérer des commandes intrus dans la connexion établie entre deux ordinateurs. “Oups ! Qui a envoyé au serveur un ordre de virement de 10 000€ à un compte en banque en Californie ? Je voulais virer 10€ à une société en Espagne .”

En fait, SSH est conçu pour “ne faire aucune confiance à l’infrastructure et accorder le minimum de confiance aux serveurs utilisés dans le réseau”. Formulé différemment, SSH considère l’environnement dans lequel il travaille comme dangereux et essaye de s’appuyer le moins possible dessus.

Encore mieux, SSH peut être utilisé comme support pour d’autres programmes qui n’auraient pas su autrement communiquer en toute sécurité sur Internet. Par exemple, il peut être utilisé pour créer un “tunnel”, à l’intérieur duquel vous pouvez copier des fichiers (cela serait fait en utilisant directement le programme scp) ou à travers lequel vous pourrez utiliser un programme d’administration graphique à distance tel que VNC.

C’est pour cela que toutes les opérations dont nous allons discuter dans cette série d’articles seront en relation avec SSH dans une certaine mesure. En fait, nous allons passer déja un petit moment sur le réglage et le peaufinement d’une connexion SSH. Une fois que votre liaison SSH fonctionne pleinement, vous verrez comment les différents morceaux du puzzle s’intégreront entre eux.

Ligne de Commande ? Ça va pas non ?

Actuellement, de nombreux outils d’interface utilisateur en mode graphique sont disponibles, rendant l’administration d’un ordinateur à distance assez facile, même si vous ne souhaitez pas apprendre les arcanes des commandes UNIX. De tels produits comprennent le programme Apple Remote Desktop, que je recommande grandement aux administrateurs réseaux et personnels de support informatique — voire même des solutions multi-plateformes, libres qui peuvent être d’un grand secours, malgré peut-être un côté moins intuitif pour l’administration.

Malheureusement, cette facilité d’utilisation a un prix: transférer une interface graphique entière via un réseau, comprenant les mouvements de souris, les clics et les saisies claviers est très consommateur de bande passante, faisant de ces outils graphiques quelque chose de plus approprié pour les réseaux locaux que pour l’administration à distance. De plus, certains d’entre eux ne disposent pas de fonctions de cryptage, exactement comme leurs équivalents en mode Terminal.

Voilà pourquoi je vais vous montrer comment se connecter à distance et contrôler un ordinateur depuis le Terminal. Comme vous allez le voir, cela est assez facile, n’implique pas de la magie noire, et est très intéressant, car cela vous permet de travailler efficacement même en conditions “hostiles”.

Par exemple, pendant que je tape cet article, j’installe Mac OS X 10.3.4 sur mon iMac qui se trouve à Paris, depuis ma confortable chaise dans mon patio au bord de ma piscine à New Orleans. Cette connexion est loin d’être optimale. Elle passe à travers une liaison sans fil, une connexion par réseau cablée relativement lente, puis à travers l’océan, à travers ma connexion ADSL en France, et puis mon routeur. Cependant, je peux me connecter à mon tty distant (en parlé geek), un reste des vieux jours du monde Unix que je n’ai pas connu, avec la même facilité que sur une machine locale. Malgré que nous allons en discuter plus tard, permettez moi de vous dire que le cycle complet de mise à jour (installation et redémarrage) s’est passé sans soucis, même d’aussi loin.

Si vous ne voulez pas apprendre les commandes Unix, il faut garder à l’esprit qu’avoir une “porte dérobée” d’accès en ligne de commande sur un ordinateur que vous administrez habituellement à distance peut vous donner des possibilités additionnelles, ne serait-ce qu’en cas de défaillance de l’interface graphique. Par exemple, vous pouvez vous connecter, effacer un fichier de préférences qui serait corrompu, et reprendre votre travail en quelques secondes. Bien sûr, cela n’est pas un système à toute épreuve — car vous aurez besoin de savoir sur quel fichier s’appuie votre logiciel — mais cela peut être extrêmement efficace dans certaines situations.

Je voudrais également préciser qu’il est très improbable que vous endommagiez (par exemple effacer ou altérer) des fichiers sur votre disque dur en exécutant les commandes que je vais vous montrer dans cette série d’articles. Soyez seulement sûr que vous comprenez bien ce que vous faites , lisez les pages man si nécessaire, et assurez-vous de saisir les commandes correctement. Cependant, cet article a des implications sur la sécurité, et vous ne devriez pas oublier de sauvegarder vos données sur votre ordinateur et celui que vous voulez administrer, en particulier si vous utilisez SSH et/ou le Terminal pour la première fois.

Prérequis : Un mot sur la Cryptographie et les Clés

Comme nous allons pas mal parler de cryptographie asymétrique et de clés dans cet article, j’ai pensé qu’il serait plus pratique de présenter toutes les informations qu’il faut connaitre ici avant de commencer dans le vif du sujet. De cette façon, je n’aurais pas besoin de vous embêter plus tard avec tous ces (fascinants) détails techniques.

La cryptographie asymétrique s’appuie sur l’utilisation d’éléments de cryptage et décryptage appelés clés (keys en anglais). Pour parler simplement, vous pouvez imaginer les clés comme des mots de passe complexes générés par ordinateur. De façon plus technique, on pourrait dire qu’il s’agit d’une séquence aléatoire de données binaires. Une de ces clés est appelée clé publique et est distribuée librement par son propriétaire, à toute personne qui souhaite communiquer de façon sécurisée avec lui. Pour envoyer un message crypté au propriétaire de la clé, les correspondants ont juste besoin d’un programme de cryptage à qui ils donneront le message en clair et la clé.

Voilà ce qui rend le système intéressant: le message résultant encrypté (ou cyphertext) peut seulement être décrypté par la clé privée, celle que le propriétaire ne distribue pas et qu’il doit conserver secrète à tout prix. Cela signifie que même les autres correspondants qui disposent de la clé publique ne peuvent pas décrypter le message.

Comme vous pouvez le voir, cela résoud le principal inconvénient du cryptage symétrique. En effet, avec ce système, la même clé peut crypter et décrypter les messages, de ce fait elle doit être échangée de manière sécurisée par les deux correspondants avant qu’ils puissent échanger des messages entre eux, ce qui est quasiment infaisable sur Internet. De plus, il peut y avoir seulement deux correspondants pour une même clé, car donner la clé à une troisième personne mettrait en danger la communication entre les deux premières personnes. Imaginez juste le nombre de clés dont nous aurions besoin pour le travail quotidien !

Ces clés peuvent aussi être utilisées pour prouver l’identité d’une personne. En fait, une signature numérique est considérée dans de nombreux pays comme aussi valide qu’une signature manuscrite, un tout nouveau concept qui n’est pas sans conséquences légales. Cela fonctionne de façon assez simple: une opération mathématique est effectuée sur un document et le résultat est crypté avec la clé privée.

Le résultat crypté est alors envoyé avec le document et la clé publique. Afin de vérifier la signature, le destinataire doit effectuer les mêmes opérations mathématiques et le comparer avec le résultat envoyé avec le document, qui a été précédemment décrypté avec la clé publique. La paire de clés est certifiée par une autorité de certification (Certification Authority CA en anglais) qui garantit (dans certaines limites) qu’elle appartient à quelqu’un.

Les serveurs peuvent aussi prouver leur identité par un échange crypté: au lieu de crypter un document, le propriétaire de la clé publique envoie une chaine de caractères aléatoires cryptée et attend que l’autre ordinateur la renvoie décryptée, signifiant qu’il possède la clé privée. En fait cela est un peu plus complexe mais le principe est là. Il faut remarquer qu’avec un tel dispositif la clé privée ne quitte jamais l’ordinateur sur lequelle elle est stockée. Cela rend les identifications basées sur des clés extrêmement difficiles à falsifier, car l’intrus ne peut même pas essayer de voler une clé de la même façon qu’un mot de passe qui transite sur un réseau — même si c’est sous forme crypté.

Comme les clés sont extrêmement longues, il ne serait pas très pratique pour l’utilisateur moyen de les comparer. De ce fait, la crytographie a développé une valeur connue sous le nom d’empreinte de clé (Key Fingerprint en anglais) qui est dérivé de la clé par un calcul mathématique complexe. De la même façon qu’il n’y a théoriquement pas deux êtres humains avec les mêmes empreintes digitales, il ne doit pas exister deux clés avec la même empreinte. Comme vous pouvez l’imaginer, cela est de la théorie, car les clés sont très longues et les empreintes très courtes.

Malgré cela, le risque est considéré comme acceptable. Dans les cas où vous auriez besoin de comparer deux exemplaires d’un fichier de clé pour vérifier qu’ils sont identiques, vous pouvez vérifier leurs empreintes au lieu de vérifier les fichiers manuellement. Si vous utilisez déja les sommes de contrôle (checksums en anglais) fournis par de nombreux sites de téléchargement pour vérifier l’intégrité des fichiers que vous téléchargez, vous devriez être déja familier de ce système. En fait, les sommes de contrôle de SSH et SHA1 ne sont pas étrangers l’un à l’autre.

Si vous voulez en apprendre plus sur le monde des clés, vous pouvez consulter l’article “Encrypted Mail on Mac OS X” qui fait une présentation de la chose, ainsi que des liens qui pourraient vous intéresser.

Quand SSH n’est pas SSH

Dans cet article nous utilisons l’acronyme SSH pour désigner à la foix le protocole SSH et le client ou le serveur SSH qui tourne sur les ordinateurs Mac OS X. Cependant, pour des besoins de clarté, nous allons faire une pause un instant afin de s’assurer que nous saisissons bien les principaux sens que SSH revêt.

Il existe en fait deux versions du protocole SSH, nommées SSH1 et SSH2. En fait, des failles découvertes dans le système de vérification de l’intégrité de SSH1 ont conduit, parmi d’autres choses, au développement de SSH2, qui est encore plus sécurisé. Cependant, pour diverses raisons techniques, le déploiement de SSH2 a été plus lent que prévu et SSH1 est encore largement utilisé. Cependant, malgré sa bien plus grande flexibilité que SSH1, SSH2 peut être parfois plus complexe — sa structure est beaucoup plus modulaire, et il utilise différents algorithmes.

Il existe beaucoup de clients et de serveurs SSH; certains commerciaux, d’autres non. Dans Mac OS X, Apple a choisi d’utiliser OpenSSH, une version libre réputée et éprouvée dans le temps qui sait gérer à la fois SSH1 et SSH2, le tout dans un même logiciel. Si vous avez déja l’habitude d’un autre logiciel SSH, vous pourrez remarquer de subtiles différences dans les options de configuration.

Cela est normal car, malgré que les différentes distributions soient similaires en de nombreux points, elles ont toutes leurs particularités. Les programmes qui ne s’appuient pas sur OpenSSH s’aident souvent de deux programmes, SSH1 et SSH2, capable de s’appeler l’un l’autre pour gérer les différents types de demandes de connexion — ce qui posent parfois des casse-têtes pour l’administration, car cela oblige à configurer deux serveurs SSH au lieu d’un pour l’optimisation de la sécurité.

La suite logicielle OpenSSH intègre en fait de nombreux programmes, la plupart d’entre eux que nous allons utiliser à un moment ou à un autre: scp, qui permet de copier des fichiers à distance de façon sécurisée; sftp, qui remplace le ftp standart qui n’est pas sécurisé; et des utilitaires qui sont utilisés à différents stades de la création des clés et de la gestion du dispositif, tels que ssh-keygen, qui génère les clés cryptographiques.

Le logiciel est développé hors des Etats-Unis, en utilisant du code en provenance d’une dizaine de pays, et est librement utilisable et réutilisable par tout le monde, sous licence BSD.

Vous pouvez consulter une présentation détaillée d’OpenSSH et de son histoire sur cette page.

Au prochain épisode

Maintenant que tous les prérequis ont été vus, on peut commencer le vrai boulot. Rejoignez moi dans le prochain épisode, où nous découvrirons le Terminal et comment se sécuriser. A plus tard !

Textes originaux en anglais sur O’Reilly : Inside SSH, Part 1 par François Joseph de Kermarec

vincen Le système UNIX , ,

  1. Pas encore de commentaire
  1. Pas encore de trackbacks
S'abonner aux commentaires de cet article