Forum général.général Quel cryptage, quel format?

Posté par  .
Étiquettes : aucune
0
27
fév.
2007
Bonjour!
En vue de la création d'un programme, je pensais m'inspirer de linux, pour la façon de gérer les mots de passe et les utilisateurs.
Je me demandais comment étaient cryptés les mots de passe sous linux?
J'ai également vu que les informations concernant les comptes des utilisateurs sont en clairs (à ce que j'ai compris en tout cas...), mais comment ce fait t'il qu'il n'est pas possible de modifier sa catégorie d'utilisateur?
Merci de m'éclaircir, ça serait fort gentil...
  • # Le manuel est la source de toute documentation

    Posté par  (site web personnel) . Évalué à 4.

    Quelques documents de base :

    /usr/bin/passwd : man 1 passwd (la commande)

    /etc/passwd : man 5 passwd (le fichier de comptes)

    /etc/shadow : man 5 shadow (le fichier des mots de passes cryptés)

    /usr/sbin/pwconv (et assimilés) : man 8 pwconv (gestion du fichier shadow)

    /etc/login.defs : man 5 login.defs (configuration du fichier shadow)

    Bonne lecture.
    • [^] # Re: Le manuel est la source de toute documentation

      Posté par  . Évalué à 2.

      Jettes aussi un oeil du coté des trousseau de clées.
      Voir gnupg et toute la myriade d'outils qui l'accompagne ca t'épargnera peut-etre de reinventer la roue suivant on besoin.
  • # Catégorie d'utilisateur ?

    Posté par  . Évalué à 6.

    mais comment ce fait t'il qu'il n'est pas possible de modifier sa catégorie d'utilisateur?


    C'est quoi une catégorie d'utilisateur ?

    Si par là tu entends « une gestion des droits à la Windows », avec des bricolages style utilisateur ordinaires, utilisateurs avec pouvoir, administrateurs, etc., oui, tu risques d'être un peu dépaysé (je considère pour la suite que c'est à ce que tu penses).

    D'une part, sous Unix, il n'y a pas trente-six niveaux d'accréditation initiaux : il y a root, et il y a les utilisateurs ordinaires. Le root a le droit de faire absolument tout ce qui lui plaît sans restriction (ce qui n'est même pas garanti avec l'administrateur Windows), jusqu'à démolir le système dans son intégralité si cela lui chante. Par contre, il ne peut y en avoir qu'un seul, et il porte forcément le numéro « 0 ». C'est d'ailleurs à ça qu'on le reconnaît. Cela fait donc deux bonnes raisons pour ne jamais travailler en temps normal sous le compte root. Il faut plutôt le considérer comme un pseudo-user, un peu comme Dieu qui s'incarne en homme quand il vient nous rendre visite sur Terre (c'est dire si ça doit arriver souvent :-).

    Par contre, la devise d'UNIX est « tout est fichier », du moins en principe parce que cela a tendance à se perdre. Cela veut dire que toutes les ressources de ton système sont visibles sur le système de fichiers. En particulier, tous tes périphériques sont visibles sous la forme de « fichiers spéciaux », tous situés en pratique sous /dev.

    S'il y a une entrée dans le catalogue du disque pour ces fichiers, ils ne vont cependant pas correspondre à une quantité de données sur les secteurs de ce disque, mais à un sous-programme du noyau pilotant le périphérique concerné. Ainsi, en lisant le contenu de /dev/hda, tu peux voir le contenu de ton disque secteur par secteur. Sur /dev/hdc, tu tombes généralement sur ton lecteur de CD et tu peux faire la même chose (et donc créer une image de disque ISO), etc.

    C'est déjà très fort en soi parce que cela te permet d'exploiter directement tous tes périphs avec de simples commandes shell. Là où ça devient génial, c'est que tu peux de cette manière accorder des droits d'exploitation de tes ressources à certains utilisateurs de la même façon que tu leur donnerait des droits d'accès à tes documents (read-only, read-write, execution, etc.).

    Dès lors, tu n'as plus besoin de catégories d'utilisateurs écrites en dur dans ton système. Il suffit de créer des groupes, y placer les fichiers spéciaux concernés ainsi que les répertoires de travail (/var/spool pour les imprimantes, par exemple), puis y inclure les utilisateurs à privilégier.

    Un exemple qui fut pertinent mais qui tombe un peu en désuétude aujourd'hui était la gestion des ports série, à l'époque où on les trouvait encore par deux sur toutes les machines, et le premier recevait la souris car toutes les cartes n'étaient pas équipées du port PS/2 (une horreur dans sa conception, soit dit en passant). Le second recevait donc généralement le modem.

    On pouvait légitimement souhaiter qu'un utilisateur de base puisse utiliser la souris mais pas le modem. Pour cela, il faut donc laisser un port série en libre usage, mais verrouiller l'autre. Autant que je sache, ce n'était pas faisable simplement sous Windows. Sous Linux, il suffisait de mettre /dev/ttyS0 dans un groupe et /dev/ttyS1 dans un autre.


    Pour le reste, tu as eu le temps de lire les pages de manuel proposées ci-dessus. Pour l'histoire, /etc/passwd contenait initialement toutes les infos des utilisateurs (nom, prénom, login, et shell de travail), y compris le mot de passe sous forme codée. À l'époque, c'était largement suffisant. Aujourd'hui, des mots de passe même codés peuvent être facilement cassés, même par force brute. On a donc gardé les infos utilisateurs dans /etc/passwd par compatibilité, mais on a déporté les mots de passe codés dans /etc/shadow.

    Dans le principe, c'est un codage à sens unique. On ne peut pas retrouver mathématiquement le mot de passe à partir de sa forme codée. Par contre, on peut coder ce que l'utilisateur tape et vérifier si cela concorde avec ce qui est enregistré.
    • [^] # Re: Catégorie d'utilisateur ?

      Posté par  . Évalué à 5.

      Excellent commentaire...
      A plusser. J'aime particulierement la comparaison du root avec Dieu...

      Sinon, je vais tenter de détailler un peu mieux le pourquoi du comment des fichiers passwd et shadow.

      Tout d'abord, sous Unix, chaque utilisateur à un UID (User Identifier). Comme dit dans le commentaire précédent, le 0 c'est le root.

      Il faut savoir que chaque utilisateur est référencé dans le fichier /etc/passwd. La principale fonction de ce fichier est de faire le mapping UID <=> Nom d'Utilisateur. Ce fichier contient aussi des informations telles que le Nom,Prénom qui ne servent à rien. Il contient aussi le répetoire de base de l'utilisateur et son shell par défaut.

      Le fichier /etc/passwd doit être lisible par tous les utilisateurs.Notamment pour faire le mapping UID <=>Utilisateur. En effet, cela permet par exemple de savoir à qui appartient un fichier qui n'est pas à toi. Par contre, il ne doit être modifiable que par root. En effet, un utilisateur ne doit pas pouvoir modifier les informations d'un autre utilisateur.
      par exemple (sur ma machine):
      $ ls -l /etc/passwd
      -rw-r--r-- 1 root root 810 2005-07-07 01:24 /etc/passwd

      Mais alors, la question qui se pose est: comment un utilisateur peut il modifier ses propres informations. Il a quand même le droit, mince!!!!!! S'il tente de le faire manuellement, ca ne marchera pas car je le rapelle, le fichier /etc/passwd est en lecture seule pour les utilisateurs classiques. Il peut alors utiliser la commande /usr/bin/passwd. Cette commande à un attriut spécial le SUID-Bit:

      $ ls -l /usr/bin/passwd
      -rws--x--x 1 root bin 39348 2004-06-21 21:20 /usr/bin/passwd

      Le SUID-Bit se reconnait au petit 's' à coté de rw. Cet attribut permet au programme /usr/bin/passwd d'être executé en root par n'importe quel utilisateur. C'est à dire que lorque lambda par exemple lancera /usr/bin/passwd, il s'executera comme si c'était root l'avait lancé. Le programme passwd peut alors modifier le fichier /etc/passwd. Mais c'est un programme sécurisé qui n'autorisera à l'utilisateur de modifier que la ligne qui le concerne.


      Maintenant, passons aux mots de passes. A la base, les mots de passe étaient simplement dans le fichier /etc/passwd. (d'où son nom). Mais le problème est que les informations de ce fichier doivent être lisibles par tous les utilisateurs. Pour cela les mots de passes ont d'abord été cryptés avec des algorithmes particuliers (dits de hachage) tels que MD5(voir l'explication du commentaire précédent). Bien que ces mots de passes ne soient pas directement lisibles, il était possible deles cracker en réalisant des attaques par force brute ou par dictionnaire. Crypter les mots de passe n'est pas suffisant!!! Il faut en plus les cacher aux utilisateurs. Pour cela, lesmots de passes on dû être séparés dans un autre fichier: /etc/shadow. Ce fichier à un format très proche de /etc/passwd mais ne contient que les mots de passe. Mais il ne doit pas être lisible par un utilisateur classique.

      ls -l /etc/shadow
      -rw-r----- 1 root shadow 593 2006-03-17 11:56 /etc/shadow

      Mais cela ne pose aucun problème car le seul programme qui doit lire ce fichier est le gestionnaire de login (/bin/login, ou XDM,KDM,GDM......), qui de toute manière n'a pas d'autre choix, pour d'autres raisons, que de tourner en root. Enfin la modification de ce fichier pour qu'un utilisateur change son mot de passe se fait avec le programme /usr/bin/passwd en utilisant le même procédé que pour /etc/passwd.


      Ca y est, j'ai fini. J'espère que j'ai été assez clair et que j'ai répondu à la plupart de tes questions. En relisant le commentaires, je me dis que c'est quand même beau Unix.....

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.