Les autorisations de /etc/shadow
sont 600, ce qui signifie qu’elles ne sont lisibles que par root.
Cependant, comme tous les mots de passe qu'il contient ne sont pas stockés en texte clair mais sous forme de hachage (ce qui signifie qu'il est impossible de calculer le mot de passe d'origine à partir du hachage), pourquoi ne peut-il pas le lire?
Même si vous ne pouvez pas inverser un hachage, vous pouvez toujours essayer de hacher tous les mots de passe possibles jusqu'à ce que vous trouviez une correspondance, et vous pouvez effectuer des millions d'essais par seconde avec un bon matériel et un accès local au fichier.
Si le fichier disposait d'autorisations 644
, toute personne ayant ouvert une session sur votre système, même en session invité, pourrait copier ce fichier hors de votre ordinateur (sur une clé USB ou à distance via scp
) et tentez une attaque hors ligne par force brute, sans en laisser aucune trace sur votre ordinateur .
Notez que les autorisations sur Ubuntu sont en fait 640
, pas 600
:
$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow
Cela n'a pas beaucoup d'importance cependant, car il n'y a toujours pas d'autorisations pour les autres, et par défaut, personne ne fait partie du groupe shadow
.
A l'origine, les hachages étaient stockés dans /etc/passwd
(c'est pourquoi il s'appelle passwd
), à l'époque de la création de Linux, il était pratiquement impossible de déchiffrer un hachage, même les types les plus faibles utilisés à l'époque. Finalement, cependant, la puissance de traitement a atteint un point où la fissuration d'un mot de passe, au moins d'un mot de passe relativement faible, est devenue possible.
Modifier les autorisations de /etc/passwd
en 640
ou 600
ne fonctionnerait pas, car il existe de nombreuses raisons légitimes de pouvoir lire /etc/passwd
en tant qu'utilisateur normal (convertir des UID en noms d'utilisateur, obtenir le nom complet de l'utilisateur, son numéro de téléphone, etc.), etc. ont été déplacés vers /etc/shadow
, qui a reçu les autorisations 640
. Un x
au lieu du champ hash du mot de passe pour un utilisateur dans /etc/passwd
est utilisé pour indiquer que le hachage pour cet utilisateur est stocké dans /etc/shadow
à la place.
En fait,/etc/shadow a été créé pour permettre de déplacer une liste lisible en public de noms d’utilisateur et de mots de passe.
Accrochez-vous, ce sera un peu une leçon d’histoire, avant d’arriver à la réponse. Si vous ne vous souciez pas de l'histoire, faites simplement défiler un peu.
Auparavant, les systèmes d'exploitation de type Unix, y compris Linux, conservaient généralement tous les mots de passe dans/etc/passwd. Ce fichier était lisible dans le monde entier et l’est toujours, car il contient des informations permettant de mapper, par exemple, des ID utilisateur numériques et des noms d’utilisateur. Ces informations sont très utiles, même aux utilisateurs ordinaires, à des fins parfaitement légitimes. Par conséquent, la lisibilité du monde des fichiers était très utile.
Même à l'époque, les gens se rendaient compte qu'avoir les mots de passe en clair dans un fichier se trouvant dans un emplacement bien connu et lisible par toute personne en mesure de se connecter était une mauvaise idée. Donc, les mots de passe ont été hachés, dans un sens. C'est l'ancien mécanisme de hachage du mot de passe "crypté", qui n'est presque jamais utilisé sur les systèmes modernes, mais qui est souvent pris en charge à des fins héritées.
Jetez un coup d’œil à/etc/passwd sur votre système. Voir ce deuxième champ, qui indique x
partout? Il contenait le mot de passe haché pour le compte en question.
Le problème était que les gens pouvaient télécharger/etc/passwd, ou même ne pas le télécharger, et travailler à déchiffrer les mots de passe. Ce n’était pas un gros problème tant que les ordinateurs n’étaient pas particulièrement puissants (Clifford Stoll, dans de L’oeuf du coucou , donne, si je me souviens bien, un mot de passe sur un système de classe IBM PC au milieu des années 80), mais il est devenu problématique à mesure que la puissance de traitement augmentait. À un moment donné, avec une liste Word décente, casser ces mots de passe devenait trop facile. Pour des raisons techniques, ce schéma ne pouvait pas non plus prendre en charge les mots de passe de plus de huit octets.
Deux choses ont été faites pour résoudre ceci:
Ce fichier est/etc/shadow.
Le logiciel qui fonctionne avec/etc/shadow est généralement très petit, très concentré et a tendance à faire l’objet d’un examen plus approfondi lors des révisions en raison du risque de problèmes. Il fonctionne également avec des autorisations spéciales, ce qui lui permet de lire et de modifier/etc/shadow, tout en empêchant les utilisateurs ordinaires de consulter ce fichier.
Voilà donc le problème: Les autorisations sur/etc/shadow sont restrictives (bien que, comme déjà indiqué, elles ne soient pas aussi restrictives que vous le déclarez) car le but de ce fichier est de restreindre l'accès aux données sensibles.
Un hachage de mot de passe est censé être fort, mais si votre mot de passe figure sur la liste des 500 meilleurs mots de passe sur Internet , toute personne ayant accès au hachage conservera tout de même être capable de trouver le mot de passe rapidement. La protection du hachage empêche cette attaque simple et élève le niveau de difficulté d'une attaque réussie: il faut obliger l'un d'entre eux à être déjà administrateur système sur l'hôte ou à passer d'abord par une attaque avec élévation de privilèges. Surtout sur un système multi-utilisateurs correctement administré, les deux sont significativement beaucoup plus difficiles que de simplement regarder un fichier lisible par tout le monde.
Pourquoi l'autorisation pour le fichier/etc/shadow est-elle définie sur 600?
Qui t'as dit ça?
$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
Réponse simple: les autorisations sous Linux sont prises au sérieux. Il n'y a aucune raison pour que "les autres" fassent quoi que ce soit avec /etc/shadow
. Et il n'y a aucune raison pour que le groupe "shadow" écrive dessus. Et l'exécution est hors de propos.
Cependant, comme tous les mots de passe qu'il contient ne sont pas stockés en texte clair mais sous forme de hachage (ce qui signifie qu'il est impossible de calculer le mot de passe d'origine à partir du hachage), pourquoi ne peut-il pas le lire?
Parce qu'il n'y a pas une seule raison pour le faire.
Les hachages sont à sens unique. Donner à quelqu'un un accès en lecture lui permet d'utiliser un script pour abuser de ce sens unique: il suffit de lister le mot que vous pouvez imaginer et de créer le hachage. À un moment donné, il pourrait correspondre au mot de passe. Cela pourrait prendre un moment aussi.
Ceci réponse est intéressant et a quelques estimations sur le forçage brutal.
Arrière-plan important: /etc/shadow
existe uniquement dans le but de garder les mots de passe hachés. Dans les premiers jours d'Unix, les hachages de mots de passe étaient stockés dans /etc/passwd
. Au fur et à mesure que les ordinateurs devenaient plus puissants, les connexions réseau plus persistantes et les systèmes de sécurité plus sophistiqués, les utilisateurs ont compris que conserver les mots de passe hachés des mots de passe lisibles sur Word posait problème. (Je ne détaillerai pas les exploits; il y a déjà suffisamment de bonnes réponses à ce sujet.)
Mais /etc/passwd
ne peut pas être protégé en lecture: il est utilisé par toutes sortes de programmes pour mapper des identifiants d’utilisateur numériques avec des noms d’utilisateurs, et pour rechercher des répertoires de base, des shells par défaut, le nom complet de l’utilisateur (et son numéro de bureau, etc.). man finger
). Ainsi, la partie sensible, le hachage du mot de passe, a été déplacé vers /etc/shadow
et le reste est resté tel quel. C'est pourquoi /etc/passwd
, malgré le nom, contient tout sauf le mot de passe (haché).