Depuis le début, les systèmes d'exploitation Unix et de type Unix (y compris Linux) ont toujours stocké les mots de passe sous forme de hachages cryptographiques (1). Ces hachages étaient à l'origine stockés dans /etc/passwd
, mais ce fichier devait être lisible par tous pour rendre les informations disponibles à d'autres fins - même un simple ls -l
doit lire /etc/passwd
afin de convertir l'ID utilisateur numérique de chaque propriétaire de fichier en son nom d'utilisateur pour l'affichage. Cependant, le fait d'avoir les mots de passe hachés dans un fichier lisible par tous permettait aux utilisateurs malveillants d'obtenir facilement ces hachages et de tenter de générer des mots de passe utilisables(2) pour les comptes d'autres utilisateurs.
Pour éviter cela, les mots de passe hachés ont finalement été déplacés dans un fichier lisible uniquement par root (et parfois un groupe privilégié d'administrateurs), /etc/shadow
. Cela masque les hachages aux utilisateurs normaux du système tout en les gardant disponibles à des fins d'authentification des utilisateurs.
Remarques :
-
Pédant, je sais, mais les mots de passe stockés ne le sont pas crypté. Ils sont hachés à l'aide d'un algorithme de hachage cryptographiquement sécurisé (au moins au moment où il a été écrit). Les principales distinctions pertinentes ici sont que les hachages sont de longueur fixe (la longueur du texte chiffré varie en fonction de la longueur du texte qui a été chiffré) et non réversibles (le texte chiffré peut être déchiffré ; le texte haché ne peut pas).
-
Étant donné que les hachages sont de longueur fixe, il existe un nombre infini d'entrées qui correspondront à toute représentation hachée donnée. Un attaquant pourrait donc trouver un mot de passe fonctionnel qui n'est pas nécessairement le même que le mot de passe de l'utilisateur propriétaire - bien que cela soit très peu probable compte tenu de la taille des hachages cryptographiques modernes.
Le /etc/shadow
Le fichier a été créé pour des raisons de sécurité et contient le mot de passe crypté de chaque utilisateur.
À l'origine, le mot de passe crypté était stocké dans /etc/passwd
. /etc/passwd
devait être lisible par tout le monde afin que le système puisse mapper les ID utilisateur aux noms d'utilisateur, et pour que les utilisateurs puissent trouver des informations les uns sur les autres, par ex. le répertoire personnel de l'autre utilisateur, ou son numéro de téléphone, qui était traditionnellement stocké dans le champ "gecos" et affiché par l'utilitaire "finger".
Mais ensuite, les gens ont réalisé qu'il s'agissait d'un problème de sécurité. N'importe qui disposant de suffisamment de temps pourrait faire ce qu'on appelle une attaque par force brute, en générant par programmation des mots de passe cryptés pour chaque mot de passe possible. Si l'attaquant l'a fait sans essayer de se connecter via telnet
ou ssh
, le système ne pouvait pas savoir qu'il était attaqué.
Ainsi, le mot de passe crypté a été déplacé dans le nouveau /etc/shadow
, qui n'est lisible que par root.
Il contient également d'autres informations que le /etc/passwd
le fichier n'a pas pris en charge le compte et le mot de passe de l'utilisateur, par ex. quand le mot de passe a été changé pour la dernière fois et quand il expirera.
Voir man 5 shadow
(version Web) pour plus de détails sur le format de fichier.
Je ne peux pas dire s'il en est de même pour SUSE, sans savoir à quelle version de SUSE vous avez affaire. Par exemple, votre système SUSE peut utiliser Blowfish plutôt que MD5.
Vous avez également laissé entendre que vous mélangez votre /etc/shadow
fichier avec un système exécutant une distribution Linux différente, mais n'a pas précisé quelle était l'autre distribution.
Voir Problèmes lors de la migration du fichier shadow de SuSE 9.3 vers Ubuntu Server x86_64 par exemple.
Pour essayer de le comprendre, ouvrez /etc/shadow
et voyez si le champ du mot de passe crypté commence par $1$
ou $2$
. S'il contient $1$
, alors c'est MD5, et compatible avec la plupart des autres distributions. S'il contient $2$
, alors c'est probablement Blowfish selon les fichiers shadow de Blowfish sur Debian.
Si vous utilisez Ubuntu, le premier résultat de recherche Google pour Ubuntu blowfish pourrait être un bon point de départ.
Les utilisateurs sont listés dans le /etc/passwd
dossier. Ce fichier contient de nombreuses informations utilisées par le système non seulement pour permettre aux utilisateurs de se connecter.
Chaque ligne correspond à une entrée utilisateur et les différents champs sont séparés par des deux-points. Le premier champ est le login, il est suivi du mot de passe correspondant.
Les mots de passe cryptés étaient stockés dans ce champ. Cependant, le /etc/passwd
Le fichier doit être lisible par tout le monde sur le système, de sorte que le chiffrement n'empêche pas les attaques par force brute, comme l'a dit @Mikel. La solution consistait à déplacer ces mots de passe cryptés dans un fichier lisible par root uniquement :/etc/shadow
.
Ainsi, /etc/shadow
contient les mots de passe cryptés des utilisateurs du système. Le système sait qu'il doit vérifier les mots de passe dans ce fichier lorsque les champs de mot de passe dans /etc/passwd
contenir un x seul (signifiant "croix vers /etc/shadow")