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
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
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:
/etc/login.defs
),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.
Il y a quelques circonstances et quelques configurations qui font qu'installer la Suite Shadow n'est pas une bonne idée:
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
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
.
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é
username:Npge08pfz4wuk:9479:0:10000::::
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