Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 0d5cd12c82d627a82c59047e1ba7b8a9 > files > 1259

howto-html-fr-9.0-0.2mdk.noarch.rpm

<HTML>
<HEAD>
<TITLE>Pourquoi utiliser le syst&egrave;me de mots de passe Shadow?</TITLE>
</HEAD>
<BODY>
<H1>2. <A NAME="s2"></A>Pourquoi utiliser le syst&egrave;me de mots de passe Shadow?</H1>
<P>
<A HREF="Shadow-Password-HOWTO.html#toc2">Contenu de cette section</A></P>

<P>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...). Une des raisons est que le
copyright concernant la suite Shadow n'&eacute;tait pas clair sur les droits
de distribution. <B>Linux</B> utilise la licence <SF>GNU</SF> (quelques
fois r&eacute;f&eacute;renc&eacute;e sous le nom de <EM>Copyleft</EM>) qui
permet &agrave; quiconque de le stocker sur n'importe quel support
(comme un CD-ROM par exemple) et est responsable des droits pour cela.</P>
<P>Le mainteneur actuel de la <EM>Suite Shadow</EM>, 
<A HREF="mailto:marekm@il7linuxb.ists.pwr.wroc.pl">Marek Michalkiewicz &lt;marekm@il7linuxb.ists.pwr.wroc.pl&gt;</A>
 a re&ccedil;u
les sources de l'auteur originel sour un copyright style BSD
permettant la redistribution. Maintenant que le probl&egrave;me de la
distribution est r&eacute;solu, il est probable que les prochaines
distributions contiendront les shadow password par d&eacute;faut. En
attendant vous devrez l'installer vous-m&ecirc;me.</P>
<P>Si vous avez install&eacute; votre distribution depuis un CD-ROM,
vous pouvez trouver que, dans la mesure o&ugrave; la distribution
n'a pas la <EM>suite shadow</EM> d'install&eacute;e, quelques fichiers
dont vous avez besoin pour installer la <EM>suite shadow</EM> peuvent se
situer sur le CD-ROM.</P>
<P><EM>Cependant, la suite shadow 3.3.1, 3.3.1-2 et shadow-mk
poss&egrave;dent toutes un probl&egrave;me de s&eacute;curit&eacute;
avec leur programme de login ainsi qu'avec d'autres programmes
poss&eacute;dant le droit <SF>setuid root</SF>. En cons&eacute;quence, elle
ne doivent pas &ecirc;tre utilis&eacute;s plus longtemps.</EM></P>
<P>Tous les fichiers n&eacute;cessaires peuvent &ecirc;tre
r&eacute;cup&eacute;r&eacute;s via ftp anonyme ou via le World Wide
Web.</P>
<P>Sur un syst&egrave;me linux sans l'ensemble Shadow install&eacute;, les informations sur
l'utilisateur, et en particulier le mot de passe sont stock&eacute;es dans le fichier
<CODE>/etc/passwd</CODE>. Le mot de passe est enregistr&eacute; dans un format
<EM>encrypt&eacute;</EM>. Si vous demandez &agrave; un expert en cryptographie, il (ou elle)
vous r&eacute;pondra que le mot de passe n'est pas <EM>encrypt&eacute;</EM> mais
<EM>encod&eacute;</EM>. En fait, lors de l'utilisation de crypt(3), le mot de passe
est consid&eacute;r&eacute; comme la cl&eacute; pour encoder un texte de valeur nulle.
C'est la raison pour laquelle &agrave; partir de maintenant, j'utiliserai le terme
<EM>encod&eacute;</EM>.</P>
<P>L'algorithme utilis&eacute; pour encoder le mot de passe fonctionne &agrave; sens unique,
c'est-&agrave;-dire qu'il est tr&egrave;s difficile &agrave; partir du mot de passe encod&eacute; de
retrouver l'original. Vous trouverez plus d'informations &agrave; propos de
l'algorithme utilis&eacute; dans la section 
<A HREF="#sec-crypt">sec-crypt</A>
 les pages de manuel de crypt(3).</P>
<P>Lorsqu'un utilisateur d&eacute;finit un mot de passe, il est encod&eacute; avec une valeur
al&eacute;atoire appel&eacute;e <EM>sel</EM> (Note : <EM>salt</EM> en Anglais).
C'est-&agrave;-dire qu'un m&ecirc;me mot de passe pourrait &ecirc;tre
enregistr&eacute; de 4096 fa&ccedil;ons diff&eacute;rentes. La valeur du <EM>sel</EM> est alors
enregistr&eacute;e avec le mot de passe d&eacute;sormais encod&eacute;.</P>
<P>Lorsqu'un utilisateur se connecte et saisit son mot de passe, le <EM>sel</EM> est
tout d'abord retrouv&eacute; &agrave; partir du mot de passe encod&eacute;. Alors, le mot de passe
entr&eacute; est encod&eacute; avec le <EM>sel</EM> pr&eacute;c&eacute;demment retrouv&eacute;.</P>
<P>Il est, avec des moyens informatiques, difficile (mais pas impossible) de
prendre un mot de passe <EM>encod&eacute;</EM> al&eacute;atoirement et de retrouver le mot de passe
original. Quoi qu'il en soit, sur un syst&egrave;me ayant de nombreux utilisateurs,
il est probable que certains mots de passes soient &eacute;vidents: un simple mot,
un nom, ou une combinaison de mots simples.</P>
<P>Mais le pirate de syst&egrave;me sait tout cela, et va simplement encoder un
dictionnaire de mots de passe usuels en utilisant les 4096
possibilit&eacute;s de <EM>sel</EM>. Il va alors comparer les mots de passe encod&eacute;s dans
le fichier <CODE>/etc/passwd</CODE> par sa propre base de donn&eacute;e. Quand il aura
trouv&eacute; une &eacute;quivalence, il aura le mot de passe d'un compte.
Cela s'appelle une <EM>attaque au dictionnaire</EM>, et c'est une des m&eacute;thodes
les plus courantes pour acc&eacute;der &agrave; un syst&egrave;me sans autorisation.</P>
<P>En y r&eacute;fl&eacute;chissant, &agrave; un seul mot de passe de 8 caract&egrave;res correspond
4096 mots de passes encod&eacute;s de 13 caract&egrave;res (c'est &agrave; 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.</P>
<P>M&ecirc;me sans avoir beaucoup d'espace disque, des utilitaires comme crack(1)
peuvent en g&eacute;n&eacute;ral casser pas mal de mots de passe sur un syst&egrave;me contenant
suffisamment d'utilisateurs. (En consid&eacute;rant que les utilisateurs du syst&egrave;me
sont autoris&eacute;s &agrave; lire leur propre mot de passe).</P>
<P>Le fichier <CODE>/etc/passwd</CODE> contient aussi des informations
comme l'identificateur de l'utilisateur (UID) et l'identificateur de
groupe (GID) qui sont utilis&eacute;s par de nombreux
programmes. C'est pour cela que le fichier passwd <EM>doit</EM>
&ecirc;tre lisible par tout le monde. Si vous changiez les permissions
de <CODE>/etc/passwd</CODE> de telle sorte que plus personne ne puisse le
lire, la premi&egrave;re chose que vous pourriez constater, c'est que
la commande <CODE>ls -l</CODE> affiche d&eacute;sormais le user ID au 
lieu du nom !</P>
<P>Le kit Shadow r&eacute;sout ce probl&egrave;me en d&eacute;pla&ccedil;ant les mots de passe encod&eacute;s
vers un autre fichier (en g&eacute;n&eacute;ral <CODE>/etc/shadow</CODE>). Il n'y a que le root
qui a les permissions de lecture et d'&eacute;criture sur le fichier <EM>shadow</EM>.
Quelques programmes (comme xlock) n&eacute;cessitent que le groupe <EM>shadow</EM> puisse
lire et &eacute;crire dans le fichier <CODE>/etc/shadow</CODE>. Il est pr&eacute;f&eacute;rable que les
programmes qui ont juste besoin de lire et v&eacute;rifier le mot de passe soient
lanc&eacute;s SGID <EM>shadow</EM> plut&ocirc;t que SGID root.</P>
<P>En d&eacute;pla&ccedil;ant les mots de passe vers le fichier <CODE>/etc/shadow</CODE>, nous 
&eacute;cartons effectivement au pirate la possibilit&eacute; d'avoir acc&egrave;s aux mots de passe
encod&eacute;s avec lesquels ils auraient pu faire une <EM>attaque au
dictionnaire</EM>.</P>
<P>De plus, le <EM>kit shadow</EM> propose de nouvelles possibilit&eacute;s int&eacute;ressantes:
<UL>
<LI>Un fichier de configuration pour configurer les options de login (<CODE>/etc/login.defs</CODE>),</LI>
<LI>Des utilitaires pour ajouter, modifier et effacer des comptes utilisateurs,</LI>
<LI>Gestion de la dur&eacute;e des mots de passe,</LI>
<LI>Gestion de la dur&eacute;e d'un compte,</LI>
<LI>Groupes shadow (optionnels),</LI>
<LI>Mots de passe de double longueur (16 caract&egrave;res),</LI>
<LI>Meilleur contr&ocirc;le sur la s&eacute;lection du mot de passe d'un utilisateur,</LI>
<LI>Mots de passe Dial-up,</LI>
<LI>Programmes d'authentification secondaire.</LI>
</UL>
</P>
<P>Installer l'<EM>ensemble shadow</EM>, c'est contribuer &agrave; la s&eacute;curit&eacute; de votre
syst&egrave;me, mais il y a bien d'autre choses &agrave; faire pour s&eacute;curiser votre
syst&egrave;me. Il y aura probablement une s&eacute;rie de HOWTO discutant de la s&eacute;curit&eacute;
et des m&eacute;thodes de s&eacute;curisation.</P>
<P>Pour le moment, pour avoir des informations sur la s&eacute;curit&eacute; et linux,
incluant les vuln&eacute;rabilit&eacute;s connues du syst&egrave;me, allez voir la:
<A HREF="http://bach.cis.temple.edu/linux/linux-security/">Linux Security home page.</A>
</P>
<P></P>
<H2>2.1 <A NAME="ss2.1"></A> Pourquoi ne devriez-vous pas installer le syst&egrave;me ShadowPassword</H2>

<P>Il y a quelques circonstances et quelques configurations qui font
qu'installer la <EM>Suite Shadow</EM> n'est pas une bonne id&eacute;e:
<UL>
<LI>La machine ne poss&egrave;de pas de comptes utilisateurs,</LI>
<LI>Votre machine fonctionne sur un r&eacute;seau local et utilise
NIS (Network Information Service) pour r&eacute;cup&eacute;rer ou fournir des
noms d'utilisateurs et des mots de passe &agrave; d'autres machines
sur le r&eacute;seau (Cela peut actuellement &ecirc;tre fait et
n'am&eacute;liore pas la s&eacute;curit&eacute; pour autant),</LI>
<LI>Votre machine est utilis&eacute;e par des serveurs de terminaux afin
de v&eacute;rifier des utilisateurs via NFS (Network File Sytem), NIS,
ou quelqu'autre m&eacute;thode,</LI>
<LI>Votre machine utilise d'autres logiciels pour valider les
utilisateurs, et il n'y a pas de version disponible, et vous n'avez
pas les sources.</LI>
</UL>
</P>
<P></P>

<H2>2.2 <A NAME="ss2.2"></A> Format du fichier /etc/passwd</H2>

<P>Sur un syst&egrave;me ne poss&eacute;dant pas la suite Shadow, voici le format du
fichier <CODE>/etc/passwd</CODE> 
<BLOCKQUOTE><CODE>
<PRE>
username:passwd:UID:GID:full_name:directory:shell
</PRE>
</CODE></BLOCKQUOTE>

En d&eacute;tail:
<DL>
<DT><B><CODE>username</CODE></B><DD><P>Le nom de l'utilisateur (login)</P>
<DT><B><CODE>passwd</CODE></B><DD><P>Le mot de passe encod&eacute;</P>
<DT><B><CODE>UID</CODE></B><DD><P>Identificatuer de l'utilisateur: user ID</P>
<DT><B><CODE>GID</CODE></B><DD><P>Identificatuer du groupe: group ID</P>
<DT><B><CODE>full_name</CODE></B><DD><P>Le nom complet de l'utilisateur (Pr&eacute;nom Nom) -
Ce champ est appel&eacute; le champ GECOS (General Electric Comprehensive Operating System) et peut
&eacute;ventuellement contenir d'autres informations</P>
<DT><B><CODE>directory</CODE></B><DD><P>R&eacute;pertoire personnel de l'utilisateur</P>
<DT><B><CODE>shell</CODE></B><DD><P>Shell par d&eacute;faut de l'utilisateur</P>
</DL>

Par exemple:
<BLOCKQUOTE><CODE>
<PRE>
username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh
</PRE>
</CODE></BLOCKQUOTE>

<CODE>Np</CODE> est le <EM>sel</EM> et <CODE>ge08pfz4wuk</CODE> est le mot de passe
<EM>encod&eacute;</EM>. Pour le m&ecirc;me mot de passe, son &eacute;quivalent encod&eacute; aurait
tout aussi bien pu &ecirc;tre <CODE>kbeMVnZM0oL7I</CODE>. Il y a 4096 possibilit&eacute;s
d'encodage pour le m&ecirc;me mot de passe. (Le mot de passe de cet exemple est
'password', un tr&egrave;s <EM>mauvais</EM> mot de passe).</P>
<P>Une fois l'ensemble shadow install&eacute;, voil&agrave; &agrave; quoi ressemblera votre fichier
<CODE>/etc/passwd</CODE>:
<BLOCKQUOTE><CODE>
<PRE>
username:x:503:100:Full Name:/home/username:/bin/sh
</PRE>
</CODE></BLOCKQUOTE>

Un <CODE>x</CODE> est venu remplacer le mot de passe encod&eacute;. Mis &agrave; part &ccedil;a,
le format du fichier <CODE>/etc/passwd</CODE> reste en fait inchang&eacute;. Ceci
permet &agrave; tous les programmes qui lisent le fichier <CODE>/etc/passwd</CODE>
sans avoir besoin d'acc&eacute;der aux mots de passe de fonctionner correctement.</P>
<P>Les mots de passes encod&eacute;s sont d&eacute;sormais dans le fichier <CODE>/etc/shadow</CODE>.</P>
<P></P>

<H2>2.3 <A NAME="ss2.3"></A> Format du fichier /etc/shadow</H2>

<P>Le fichier <CODE>/etc/shadow</CODE> contient les informations suivantes:
<BLOCKQUOTE><CODE>
<PRE>
username:passwd:last:may:must:warn:expire:disable:reserved
</PRE>
</CODE></BLOCKQUOTE>

En d&eacute;tail:
<DL>
<DT><B><CODE>username</CODE></B><DD><P>Le Nom de l'Utilisateur</P>
<DT><B><CODE>passwd</CODE></B><DD><P>Le mot de passe encod&eacute;</P>
<DT><B><CODE>last</CODE></B><DD><P>Date de la derni&egrave;re modification (en nombre de
jours depuis le 1er janvier 1970).</P>
<DT><B><CODE>may</CODE></B><DD><P>Nombre de jours avant que le mot de passe puisse
&ecirc;tre modifi&eacute;</P>
<DT><B><CODE>must</CODE></B><DD><P>Nombre de jours avant que le mot de passe doive
&ecirc;tre modifi&eacute;</P>
<DT><B><CODE>warn</CODE></B><DD><P>Nombre de jours durant lesquels l'utilisateur est
pr&eacute;venu de l'expiration de son mot de passe.</P>
<DT><B><CODE>expire</CODE></B><DD><P>Nombre de jours entre l'expiration du mot de
passe et la fermeture du compte.</P>
<DT><B><CODE>disable</CODE></B><DD><P>Date de la fermeture du compte (en nombre de
jours depuis le 1er janvier 1970).</P>
<DT><B><CODE>reserved</CODE></B><DD><P>Champ r&eacute;serv&eacute;</P>
</DL>

Donc, l'exemple pr&eacute;cedent devrait &ecirc;tre:
<BLOCKQUOTE><CODE>
<PRE>
username:Npge08pfz4wuk:9479:0:10000::::
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P></P>

<A NAME="sec-crypt"></A> <H2>2.4 <A NAME="ss2.4"></A> Apercu de la fonction crypt(3) </H2>

<P>extrait de la page de manuel de crypt(3)</P>
<P>&quot;<EM>crypt</EM> est la fonction de cryptage du mot de passe. Elle est bas&eacute;e
sur l'algorithme du DES (<EM>Data Encryption Standard</EM>) avec quelques
modifications pour &eacute;viter les recherches mat&eacute;rielles de la cl&eacute;.</P>
<P>La cl&eacute; est le mot de passe de l'utilisateur</P>
<P>Le <EM>sel</EM> est compos&eacute; de deux caract&egrave;res choisis dans l'ensemble <F>a-zA-Z0-9./</F>.
cette chaine de caract&egrave;re est utilis&eacute;e pour perturber l'algorithme
de 4096 diff&eacute;rentes fa&ccedil;ons.</P>
<P>En prenant les 7 derniers bits de chaque caract&egrave;re du mot de passe, on
obtient une cl&eacute; de 56 bits. Cette cl&eacute; est utilis&eacute;e pour crypter une cha&icirc;ne
de caract&egrave;re constante (g&eacute;n&eacute;ralement constitu&eacute;e de z&eacute;ro). La valeur
retourn&eacute;e pointe sur le mot de passe crypt&eacute;: une s&eacute;rie de 13 caract&egrave;res ASCII
imprimables (les deux premiers caract&egrave;res correspondent au sel).
La valeur retourn&eacute;e pointe sur une donn&eacute;e statique dont le contenu
est modifi&eacute; &agrave; chaque appel.</P>
<P><B>Attention:</B> Une cl&eacute; de 56 bits correspond &agrave;: 2&circ;56 donc 7.3e16 valeurs
possibles. Les recherches exhaustives <B>sont possibles</B> en utilisant des
ordinateurs &agrave; architecture massivement parall&egrave;le. Des logiciels comme
<CODE>crack(1)</CODE> travaillent avec des cl&eacute;s qui sont g&eacute;n&eacute;ralement utilis&eacute;es par les humains.
C'est-&agrave;-dire que la s&eacute;lection de mots de passe test&eacute;s sont des mots simples,
mots de passe fr&eacute;quemment utilis&eacute;s et des noms. L'utilisation d'un programme
<CODE>passwd(1)</CODE> qui recherche des mots de passe trop simple est recommand&eacute;.</P>
<P>L'algorithme DES lui-m&ecirc;me est tr&egrave;s limit&eacute;, ce qui fait qu'envisager
l'utilisation de <CODE>crypt(3)</CODE> pour autre chose que de l'authentification de
mots de passe n'est pas une bonne id&eacute;e.
Si vous envisagez d'utiliser <CODE>crypt(3)</CODE> pour un projet de cryptographie,
ne le faites pas, procurez-vous plut&ocirc;t un bon livre sur le cryptage
de donn&eacute;es et une des nombreuses biblioth&egrave;ques DES.&quot;</P>
<P>Si vous recherchez un bon livre sur le cryptage de donn&eacute;es, je vous
recommande:
<PRE>
        &quot;Applied Cryptography: Protocols, Algorithms, and Source Code in C&quot;
        par Bruce Schneier &lt;schneir@chinet.com&gt;
        ISBN: 0-471-59756-2
</PRE>
</P>
<P></P>
<P></P>

<HR>
<P>
Chapitre <A HREF="Shadow-Password-HOWTO-3.html">suivant</A>,
Chapitre <A HREF="Shadow-Password-HOWTO-1.html">Pr&eacute;c&eacute;dent</A>
<P>
Table des mati&egrave;res de <A HREF="Shadow-Password-HOWTO.html#toc2">ce chapitre</A>,
 <A HREF="Shadow-Password-HOWTO.html#toc">Table des mati&egrave;res</A> g&eacute;n&eacute;rale</P>
<P>
<A HREF="Shadow-Password-HOWTO.html">D&eacute;but</A> du document,
 <A HREF="#0"> D&eacute;but de ce chapitre</A></P>
</BODY>
</HTML>