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...)
Si la distribution que vous avez utilisée pour installer linux se trouve sur CD-ROM, il est fort probable que vous puissiez y trouver également les fichiers nécessaires au kit Shadow et d'autant plus si celui-ci contient un miroir de Sunsite.
Les fichiers nécessaires peuvent être également obtenus via FTP anonyme ou par 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és 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'information à propos de l'algorithme utilisé dans les pages de manuel de crypt(3).
Lorsqu'un utilisateur défini un mot de passe, il est encodé avec une valeur
aléatoire appelée sel
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 crypter 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.
Ca s'appelle une attaque au dictionnaire, et c'est une des méthodes
les plus courantes pour accéder à un système non autorisé.
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. (Assumant que les utilisateurs du système sont autorisés à lire leur propre mot de passe).
Le fichier /etc/password
contient aussi des informations comme le
user ID et le group ID 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 le pirate 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.
Sur un système non 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
Valeure numérique: user ID
GID
Valeure numérique: groupe ID
full_name
Le nom complet de l'utilisateur (Prenom 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 à 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
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 passes 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'autentification 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"
Chapitre suivant, Chapitre Précédent
Table des matières de ce chapitre, Table des matières générale
Début du document, Début de ce chapitre