Page suivante - Page précédente - Table des matières

2. Pourquoi utiliser le système de mots de passe Shadow?

La plupart des distributions Linux actuelles ne contiennent pas le support des mots de passe shadow (La Slackware 2.3, Slackware 3.0 et d'autres distributions assez populaires...). Une des raisons est que le copyright concernant la suite Shadow n'était pas clair sur les droits de distribution. Linux utilise la licence GNU (quelques fois référencée sous le nom de Copyleft) qui permet à quiconque de le stocker sur n'importe quel support (comme un CD-ROM par exemple) et est responsable des droits pour cela.

Le mainteneur actuel de la Suite Shadow, Marek Michalkiewicz <marekm@il7linuxb.ists.pwr.wroc.pl> a reçu les sources de l'auteur originel sour un copyright style BSD permettant la redistribution. Maintenant que le problème de la distribution est résolu, il est probable que les prochaines distributions contiendront les shadow password par défaut. En attendant vous devrez l'installer vous-même.

Si vous avez installé votre distribution depuis un CD-ROM, vous pouvez trouver que, dans la mesure où la distribution n'a pas la suite shadow d'installée, quelques fichiers dont vous avez besoin pour installer la suite shadow peuvent se situer sur le CD-ROM.

Cependant, la suite shadow 3.3.1, 3.3.1-2 et shadow-mk possèdent toutes un problème de sécurité avec leur programme de login ainsi qu'avec d'autres programmes possédant le droit setuid root. En conséquence, elle ne doivent pas être utilisés plus longtemps.

Tous les fichiers nécessaires peuvent être récupérés via ftp anonyme ou via le World Wide Web.

Sur un système linux sans l'ensemble Shadow installé, les informations sur l'utilisateur, et en particulier le mot de passe sont stockées dans le fichier /etc/passwd. Le mot de passe est enregistré dans un format encrypté. Si vous demandez à un expert en cryptographie, il (ou elle) vous répondra que le mot de passe n'est pas encrypté mais encodé. En fait, lors de l'utilisation de crypt(3), le mot de passe est considéré comme la clé pour encoder un texte de valeur nulle. C'est la raison pour laquelle à partir de maintenant, j'utiliserai le terme encodé.

L'algorithme utilisé pour encoder le mot de passe fonctionne à sens unique, c'est-à-dire qu'il est très difficile à partir du mot de passe encodé de retrouver l'original. Vous trouverez plus d'informations à propos de l'algorithme utilisé dans la section sec-crypt les pages de manuel de crypt(3).

Lorsqu'un utilisateur définit un mot de passe, il est encodé avec une valeur aléatoire appelée sel (Note : salt en Anglais). C'est-à-dire qu'un même mot de passe pourrait être enregistré de 4096 façons différentes. La valeur du sel est alors enregistrée avec le mot de passe désormais encodé.

Lorsqu'un utilisateur se connecte et saisit son mot de passe, le sel est tout d'abord retrouvé à partir du mot de passe encodé. Alors, le mot de passe entré est encodé avec le sel précédemment retrouvé.

Il est, avec des moyens informatiques, difficile (mais pas impossible) de prendre un mot de passe encodé aléatoirement et de retrouver le mot de passe original. Quoi qu'il en soit, sur un système ayant de nombreux utilisateurs, il est probable que certains mots de passes soient évidents: un simple mot, un nom, ou une combinaison de mots simples.

Mais le pirate de système sait tout cela, et va simplement encoder un dictionnaire de mots de passe usuels en utilisant les 4096 possibilités de sel. Il va alors comparer les mots de passe encodés dans le fichier /etc/passwd par sa propre base de donnée. Quand il aura trouvé une équivalence, il aura le mot de passe d'un compte. Cela s'appelle une attaque au dictionnaire, et c'est une des méthodes les plus courantes pour accéder à un système sans autorisation.

En y réfléchissant, à un seul mot de passe de 8 caractères correspond 4096 mots de passes encodés de 13 caractères (c'est à dire 4096x13 octets). Donc un dictionnaire de 400 000 mots simples, noms, mots de passes, ou simple variations, tiendrait facilement sur un disque dur de 4Go. Le pirate a juste besoin de les trier et de les comparer.

Même sans avoir beaucoup d'espace disque, des utilitaires comme crack(1) peuvent en général casser pas mal de mots de passe sur un système contenant suffisamment d'utilisateurs. (En considérant que les utilisateurs du système sont autorisés à lire leur propre mot de passe).

Le fichier /etc/passwd contient aussi des informations comme l'identificateur de l'utilisateur (UID) et l'identificateur de groupe (GID) qui sont utilisés par de nombreux programmes. C'est pour cela que le fichier passwd doit être lisible par tout le monde. Si vous changiez les permissions de /etc/passwd de telle sorte que plus personne ne puisse le lire, la première chose que vous pourriez constater, c'est que la commande ls -l affiche désormais le user ID au lieu du nom !

Le kit Shadow résout ce problème en déplaçant les mots de passe encodés vers un autre fichier (en général /etc/shadow). Il n'y a que le root qui a les permissions de lecture et d'écriture sur le fichier shadow. Quelques programmes (comme xlock) nécessitent que le groupe shadow puisse lire et écrire dans le fichier /etc/shadow. Il est préférable que les programmes qui ont juste besoin de lire et vérifier le mot de passe soient lancés SGID shadow plutôt que SGID root.

En déplaçant les mots de passe vers le fichier /etc/shadow, nous écartons effectivement au pirate la possibilité d'avoir accès aux mots de passe encodés avec lesquels ils auraient pu faire une attaque au dictionnaire.

De plus, le kit shadow propose de nouvelles possibilités intéressantes:

  • Un fichier de configuration pour configurer les options de login (/etc/login.defs),
  • Des utilitaires pour ajouter, modifier et effacer des comptes utilisateurs,
  • Gestion de la durée des mots de passe,
  • Gestion de la durée d'un compte,
  • Groupes shadow (optionnels),
  • Mots de passe de double longueur (16 caractères),
  • Meilleur contrôle sur la sélection du mot de passe d'un utilisateur,
  • Mots de passe Dial-up,
  • Programmes d'authentification secondaire.

Installer l'ensemble shadow, c'est contribuer à la sécurité de votre système, mais il y a bien d'autre choses à faire pour sécuriser votre système. Il y aura probablement une série de HOWTO discutant de la sécurité et des méthodes de sécurisation.

Pour le moment, pour avoir des informations sur la sécurité et linux, incluant les vulnérabilités connues du système, allez voir la: Linux Security home page.

2.1 Pourquoi ne devriez-vous pas installer le système Shadow Password

Il y a quelques circonstances et quelques configurations qui font qu'installer la Suite Shadow n'est pas une bonne idée:

  • La machine ne possède pas de comptes utilisateurs,
  • Votre machine fonctionne sur un réseau local et utilise NIS (Network Information Service) pour récupérer ou fournir des noms d'utilisateurs et des mots de passe à d'autres machines sur le réseau (Cela peut actuellement être fait et n'améliore pas la sécurité pour autant),
  • Votre machine est utilisée par des serveurs de terminaux afin de vérifier des utilisateurs via NFS (Network File Sytem), NIS, ou quelqu'autre méthode,
  • Votre machine utilise d'autres logiciels pour valider les utilisateurs, et il n'y a pas de version disponible, et vous n'avez pas les sources.

2.2 Format du fichier /etc/passwd

Sur un système ne possédant pas la suite Shadow, voici le format du fichier /etc/passwd

username:passwd:UID:GID:full_name:directory:shell
En détail:
username

Le nom de l'utilisateur (login)

passwd

Le mot de passe encodé

UID

Identificatuer de l'utilisateur: user ID

GID

Identificatuer du groupe: group ID

full_name

Le nom complet de l'utilisateur (Prénom Nom) - Ce champ est appelé le champ GECOS (General Electric Comprehensive Operating System) et peut éventuellement contenir d'autres informations

directory

Répertoire personnel de l'utilisateur

shell

Shell par défaut de l'utilisateur

Par exemple:
username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh
Np est le sel et ge08pfz4wuk est le mot de passe encodé. Pour le même mot de passe, son équivalent encodé aurait tout aussi bien pu être kbeMVnZM0oL7I. Il y a 4096 possibilités d'encodage pour le même mot de passe. (Le mot de passe de cet exemple est 'password', un très mauvais mot de passe).

Une fois l'ensemble shadow installé, voilà à quoi ressemblera votre fichier /etc/passwd:

username:x:503:100:Full Name:/home/username:/bin/sh
Un x est venu remplacer le mot de passe encodé. Mis à part ça, le format du fichier /etc/passwd reste en fait inchangé. Ceci permet à tous les programmes qui lisent le fichier /etc/passwd sans avoir besoin d'accéder aux mots de passe de fonctionner correctement.

Les mots de passes encodés sont désormais dans le fichier /etc/shadow.

2.3 Format du fichier /etc/shadow

Le fichier /etc/shadow contient les informations suivantes:

username:passwd:last:may:must:warn:expire:disable:reserved
En détail:
username

Le Nom de l'Utilisateur

passwd

Le mot de passe encodé

last

Date de la dernière modification (en nombre de jours depuis le 1er janvier 1970).

may

Nombre de jours avant que le mot de passe puisse être modifié

must

Nombre de jours avant que le mot de passe doive être modifié

warn

Nombre de jours durant lesquels l'utilisateur est prévenu de l'expiration de son mot de passe.

expire

Nombre de jours entre l'expiration du mot de passe et la fermeture du compte.

disable

Date de la fermeture du compte (en nombre de jours depuis le 1er janvier 1970).

reserved

Champ réservé

Donc, l'exemple précedent devrait être:
username:Npge08pfz4wuk:9479:0:10000::::

2.4 Apercu de la fonction crypt(3)

extrait de la page de manuel de crypt(3)

"crypt est la fonction de cryptage du mot de passe. Elle est basée sur l'algorithme du DES (Data Encryption Standard) avec quelques modifications pour éviter les recherches matérielles de la clé.

La clé est le mot de passe de l'utilisateur

Le sel est composé de deux caractères choisis dans l'ensemble [a-zA-Z0-9./]. cette chaine de caractère est utilisée pour perturber l'algorithme de 4096 différentes façons.

En prenant les 7 derniers bits de chaque caractère du mot de passe, on obtient une clé de 56 bits. Cette clé est utilisée pour crypter une chaîne de caractère constante (généralement constituée de zéro). La valeur retournée pointe sur le mot de passe crypté: une série de 13 caractères ASCII imprimables (les deux premiers caractères correspondent au sel). La valeur retournée pointe sur une donnée statique dont le contenu est modifié à chaque appel.

Attention: Une clé de 56 bits correspond à: 2^56 donc 7.3e16 valeurs possibles. Les recherches exhaustives sont possibles en utilisant des ordinateurs à architecture massivement parallèle. Des logiciels comme crack(1) travaillent avec des clés qui sont généralement utilisées par les humains. C'est-à-dire que la sélection de mots de passe testés sont des mots simples, mots de passe fréquemment utilisés et des noms. L'utilisation d'un programme passwd(1) qui recherche des mots de passe trop simple est recommandé.

L'algorithme DES lui-même est très limité, ce qui fait qu'envisager l'utilisation de crypt(3) pour autre chose que de l'authentification de mots de passe n'est pas une bonne idée. Si vous envisagez d'utiliser crypt(3) pour un projet de cryptographie, ne le faites pas, procurez-vous plutôt un bon livre sur le cryptage de données et une des nombreuses bibliothèques DES."

Si vous recherchez un bon livre sur le cryptage de données, je vous recommande:

 "Applied Cryptography: Protocols, Algorithms, and Source Code in C"
 par Bruce Schneier <schneir@chinet.com> ISBN: 0-471-59756-2


Page suivante - Page précédente - Table des matières