À quoi servent les fichiers / etc / shadow et le cache caché dans le système d'exploitation Linux?

9

À quoi sert le fichier / etc / shadow dans le système d'exploitation Linux? Est-ce également le cas pour les clients SUSE? Il existe un fichier de cache caché, quel est le but de cela?

Ashitosh
la source

Réponses:

16

Depuis le début, les systèmes d'exploitation Unix et de style Unix (y compris Linux) ont toujours stocké les mots de passe sous forme de hachages cryptographiques (1). Ces hachages étaient initialement stockés dans /etc/passwd, mais ce fichier devait être lisible dans le monde entier pour rendre les informations disponibles à d'autres fins - même un simple ls -lbesoin de lecture /etc/passwdafin 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 le monde a permis aux utilisateurs malveillants d'obtenir facilement ces hachages et d'essayer 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 d'administrateurs privilégiés) /etc/shadow,. Cela masque les hachages des utilisateurs normaux du système tout en les gardant disponibles à des fins d'authentification des utilisateurs.

Remarques :

  1. Pedantic, je sais, mais les mots de passe stockés ne sont pas cryptés. 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éversible (le texte chiffré peut être déchiffré; le texte haché ne peut pas).

  2. Parce que les hachages sont de longueur fixe, il existe un nombre infini d'entrées qui correspondra à toute représentation de hachage 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.

Dave Sherohman
la source
Je pense que dans le dernier paragraphe, vous devez vouloir dire «fini» et non «infini».
phunehehe
4
@phunehehe Non, l'ensemble d'entrées (tous les mots de passe possibles) est infini, mais la sortie (toutes les valeurs de hachage possibles) est finie.
phihag
@phihag Ah je vois. Mais un hachage serait bien plus long que n'importe quel mot de passe mémorisable de toute façon :)
phunehehe
1
Le nombre d'entrées menant à une collision donnée n'est pas infini, car la longueur des chaînes pouvant être hachées par un algorithme donné est finie . Voir par exemple stackoverflow.com/questions/17388177/…
MariusMatutiae
1
@MariusMatutiae Supposons une implémentation de hachage vraiment mauvaise qui tronque à 3 caractères. Le mot de passe correct est "abc". Les entrées "abcd", "abcde", "abcdef", etc. produiront également le même hachage de sortie et, par conséquent, seront également acceptées. Il existe un nombre infini de chaînes qui commencent par "abc" et entreront en collision de manière triviale. (Notez que nous sommes fondamentalement en désaccord ici sur la question de savoir si "l'entrée" signifie avant ou après l'application de la troncature.)
Dave Sherohman
6

Le /etc/shadowfichier a été créé pour des raisons de sécurité et contient le mot de passe chiffré de chaque utilisateur.

À l'origine, le mot de passe crypté était stocké dans /etc/passwd. /etc/passwddevait ê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 exemple le répertoire personnel de l'autre utilisateur, ou leur numéro de téléphone, qui était traditionnellement stocké dans le champ "gecos" et affiché par l'utilitaire "doigt".

Mais ensuite, les gens ont réalisé que c'était un problème de sécurité. N'importe qui avec suffisamment de temps pourrait faire ce qu'on appelle une attaque par bruteforce , en générant par programme des mots de passe chiffrés pour chaque mot de passe possible. Si l'attaquant a fait cela sans vraiment essayer de se connecter via telnetou ssh, le système ne pouvait pas savoir qu'il était attaqué.

Le mot de passe crypté a donc été déplacé dans le nouveau /etc/shadow, qui n'est lisible que par root.

Il contient également d'autres informations que le /etc/passwdfichier ne prend pas en charge concernant le compte et le mot de passe de l'utilisateur, par exemple la date de la dernière modification du mot de passe et son expiration.

Voir man 5 shadow( version Web ) pour plus de détails sur le format de fichier.


Je ne peux pas dire si c'est la même chose 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élangiez votre /etc/shadowfichier avec un système exécutant une distribution Linux différente, mais vous n'avez pas précisé quelle était l'autre distribution.

Voir Problèmes de migration du fichier shadow de SuSE 9.3 vers Ubuntu Server x86_64 par exemple.

Pour essayer de le comprendre, ouvrez /etc/shadowet 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$, c'est probablement Blowfish selon les fichiers shadow 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.

Mikel
la source
3

Les utilisateurs sont répertoriés dans le /etc/passwdfichier. 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 différents champs sont séparés par des deux-points. Le premier fichier est le login, il est suivi du mot de passe correspondant.

Les mots de passe cryptés étaient auparavant stockés dans ce champ. Cependant, le /etc/passwdfichier doit être lisible par tout le monde sur le système, donc le cryptage n'empêche pas les attaques par force brute, comme l'a dit @Mikel. La solution était de déplacer ces mots de passe chiffrés dans la racine seule fichier lisible: /etc/shadow.

Ainsi, /etc/shadowcontient 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 /etc/passwdcontiennent uniquement un x (ce qui signifie " passer à / etc / shadow")

jopasserat
la source
1
Notez que les mots de passe stockés dans /etc/passwdétaient / sont toujours hachés exactement de la même manière qu'ils le seraient s'ils l'étaient /etc/shadow. Vous ne pas vraiment dire que les mots de passe en /etc/passwdserait clair, mais il serait facile pour quelqu'un pas familier avec le mot de passe * nix la manipulation de mal interpréter votre réponse comme signifiant que.
Dave Sherohman
Merci pour votre commentaire qui m'a aidé à améliorer ma réponse.
Je ne pense pas que le xsignifie réellement quoi que ce soit. Il est là tout comme un hachage non valide (celui qui ne correspond à aucun mot de passe). Certains systèmes utilisent !.
user1686
3

Voyons voir si je peux obtenir tous les votes positifs dans le monde, puisque j'ai écrit ce qui est devenu la suite Linux Shadow Password en 1987;)

Le /etc/passwdfichier d' origine contenait un hachage basé sur DES modifié du mot de passe en texte clair. Au moment où la crypt()fonction a été créée, on pensait (et cela a été déclaré par les créateurs du système d'exploitation UNIX) que les attaques contre le hachage de mot de passe seraient irréalisables, en raison du nombre de mots de passe possibles et de l'utilisation d'un 12 bits. (4 096 valeurs possibles) "sel". Chaque mot de passe en texte clair possible avait 4 096 valeurs de hachage possibles, et avec 64 bits de résultat haché, ce qui donnait un total de 2 ^ 72 hachages de mot de passe possibles.

Comme une autre affiche l'a mentionné, a /etc/passwdété également utilisé par divers utilitaires pour mapper entre les noms d'utilisateur et les valeurs UID (le /etc/groupfichier fournit la fonction analogue pour les groupes) et qui nécessitait qu'il soit lisible dans le monde entier.

Dans les années 80, il est devenu évident que les attaques de dictionnaire contre le hachage de mot de passe stocké dans le /etc/passwdfichier devenaient réalisables et a /etc/shadowété introduit dans AT&T UNIX dans une version précoce de System V.J'ai documenté les pages de manuel que j'ai utilisées pour écrire la bibliothèque Shadow d'origine, et je '' ve depuis oublié, mais c'était certainement une première version de System V, probablement SVR3.2.

Ce qu'AT & T a fait, et ce que j'ai implémenté pour SCO Xenix (le SCO Xenix original, pas le SCO Xenix plus tard) en '87 qui a finalement été utilisé sur Linux, a été simplement de déplacer le mot de passe haché vers /etc/shadow. Cela a empêché l'attaque au volant, où un utilisateur non privilégié a acquis une copie de /etc/passwdet a lancé une attaque contre celle-ci. Si vous savez pourquoi j'ai écrit Shadow en premier lieu, j'ai demandé à un utilisateur de télécharger mon /etc/passwdfichier via UUCP à l'époque où nous utilisions encore UUCP pour à peu près tout.

Au moment de la création de Linux et de son utilisation à grande échelle, il existait un très grand nombre d'outils pour attaquer les hachages de mot de passe. Les réimplémentations hautes performances de crypt()étaient une avenue, et les attaques basées sur un dictionnaire via des outils tels que Crack et libcrack en étaient d'autres. Le portage initial a été fait par Nate Holloway et Floria La Roche (je leur ai donné du crédit, je ne sais pas si quelqu'un a fait le travail avant eux).

Finalement, l'utilisation de crypt()hachages basés sur, même dans un fichier protégé, n'était plus sécurisée et les MD5modifications de hachage basées sur l'original ont été apportées. MD5finalement a été considéré comme trop faible, et de nouveaux hachages ont été utilisés.

En théorie, un hachage suffisamment fort pourrait être stocké /etc/passwd. Une mauvaise sécurité opérationnelle signifie que de nombreux systèmes ont leurs /etc/shadowfichiers disponibles via divers vecteurs d'attaque - "J'ai volé les fichiers de sauvegarde" est probablement le plus simple.

Julie à Austin
la source