Linux Shadow Password HOWTO, Version francaise
 Michael H. Jackson, [email protected]
  _T_r_a_d_u_c_t_i_o_n  _f_r_a_n_c_a_i_s_e  _:  _I_g_o_r _G_e_n_i_b_e_l _(_I_g_o_r_._G_e_n_i_b_e_l_@_e_m_i_._u_-
 _b_o_r_d_e_a_u_x_._f_r_) .
 v1.3, 3 Avril 1996

 Ce document decrit comment obtenir, installer et configurer l'ensemble
 _S_h_a_d_o_w  _P_a_s_s_w_o_r_d sous Linux. Il prend aussi en compte l'adaptation des
 autres logiciels et demons reseau accedant habituellement aux mots  de
 passe  des  utilisateurs.   Bien qu'ils ne fassent pas parti du paque-
 tage, ces programmes ne fonctionnerons  plus  correctement  apres  son
 installation.   Ce  document  contient en plus un exemple de code pour
 mettre a jour vos applications pour qu'elles supportent le systeme  de
 mots  de passe caches. Des reponses a des questions frequemment posees
 sont fournies en fin de document.

 11..  IInnttrroodduuccttiioonn

 Ceci est le Shadow password  HOWTO  pour  linux.  Ce  document  decrit
 comment  configurer  votre  systeme linux pour utiliser le systeme des
 mots de  passe  caches.  Quelques  exemples  d'utilisation  concernant
 certaines  caracteristiques  de  la _s_u_i_t_e _S_h_a_d_o_w (Note: ce terme n'est
 volontairement pas traduit afin de ne pas alourdir la comprehension du
 document) sont aussi inclus.

 Lorsque  vous  installerez  le  paquetage  des mots de passe caches et
 lorsque vous vous servirez des  utilitaires,  vous  devrez  etre  loge
 root.  Lorsque  vous  installerez  le paquetage, vous devrez effectuer
 certains changements sur des utlitaires systemes,  il  est  donc  tres
 fortement  recommende  de faire des copies de sauvegarde de programmes
 indiques. Je vous recommande aussi de lire et de comprendre toutes les
 instructions avant de commencer.

 11..11..  NNoottee dduu ttrraadduucctteeuurr

 Tout  au  long  du  document vous constaterez tres certainement que je
 n'ai pas traduit le terme "Shadow Password". La raison est simple:  le
 traduction  de  ce  terme  n'est  pas elegante. Je pense qu'une simple
 explication (voir l'introduction)  de  celui-ci  vaut  beaucoup  mieux
 qu'une "francisation" douteuse.

 11..22..  CChhaannggeemmeennttss ppaarr rraappppoorrtt aauuxx vveerrssiioonnss pprreecceeddeenntteess

 Ajouts:

 +o  Ajout  de la sous-section Pourquoi vous ne devriez pas installer le
    systeme Shadow Password

 +o  Ajout de la sous-section Mise a jour du programme xdm

 +o  Ajout de la section Comment faire que les  caracteristiques  de  la
    suite Shadow fonctionnent

 +o  Ajout  de  la  section contenant les questions les plus frequemment
    posees

    Corrections/Mise a jour:

 +o  Correction des references html sur Sunsite

 +o  Correction dans la section sur wu-ftp pour ajouter -lshadow dans le
    Makefile

 +o  Correction de quelques fautes de frappes et de langage

 +o  Chagement dans la section sur wu-ftp pour supporter le format ELF

 +o  Mise  a  jour  pour mettre en evidence les problemes de securite de
    certains programmes de login

 +o  Mise a jour pour  recommander  la  Suite  Linux  Shadow  par  Marek
    Michalkiewicz

 11..33..  NNoouuvveelllleess vveerrssiioonnss ddee ccee ddooccuummeenntt::

 La  derniere version de ce document pourra toujours etre recuperee via
 FTP anonyme sur:

 +o  Version Originale: ssuunnssiittee..uunncc..eedduu

    /pub/Linux/docs/HOWTO/SHADOW-HOWTO

 ou:

 /pub/Linux/docs/HOWTO/other-formats/SHADOW-HOWTO{-html.tar,ps,dvi}.gz

 +o  Version Francaise: ffttpp..lliipp66..ffrr

    /pub/linux/french/docs/HOWTO/Shadow-Password-HOWTO*

 Ou bien par le World Wide Web: Linux Documentation Project Web  Server
 <http://sunsite.unc.edu/mdw/linux.html>,   a   la  page:  SHADOW-HOWTO
 <http://sunsite.unc.edu/linux/HOWTO/Shadow-Password-HOWTO.html>  sinon
 directement  par moi, <[email protected]>. Il sera aussi poste dans le
 newsgroup: comp.os.linux.answers

 Ce document est maintenant stocke en portant le nom Shadow-AAJJMM.

 11..44..  CCoommmmeennttaaiirreess oouu ssuuggggeessttiioonnss..

 Merci de m'envoyer  tout  commentaire,  mise  a  jour  ou  suggestion:
 Michael  H.  Jackson  <[email protected]>.   Plus  vite  je recois vos
 commentaires, plus vite je mets a jour ce document. Si vous  avez  des
 problemes, merci de m'ecrire directement, je suis tres rarement a jour
 avec les newsgroups.

 22..  PPoouurrqquuooii uuttiilliisseerr llee ssyysstteemmee ddee mmoottss ddee ppaassssee SShhaaddooww??

 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'etait pas clair sur les
 droits de distribution. LLiinnuuxx utilise la licence  GNU  (quelques  fois
 referencee  sous  le  nom  de  _C_o_p_y_l_e_f_t)  qui permet a quiconque de le
 stocker sur n'importe quel support (comme un CD-ROM  par  exemple)  et
 est responsable des droits pour cela.

 Le   mainteneur   actuel  de  la  _S_u_i_t_e  _S_h_a_d_o_w,  Marek  Michalkiewicz
 <[email protected]> a recu  les  sources  de  l'auteur
 originel  sour  un  copyright  style BSD permettant la redistribution.
 Maintenant que le probleme de  la  distribution  est  resolu,  il  est
 probable  que  les  prochaines  distributions  contiendront les shadow
 password par defaut. En attendant vous devrez l'installer vous-meme.

 Si vous avez installe votre distribution depuis un CD-ROM, vous pouvez
 trouver que, dans la mesure ou la distribution n'a pas la _s_u_i_t_e _s_h_a_d_o_w
 d'installee, quelques fichiers dont vous avez besoin pour installer la
 _s_u_i_t_e _s_h_a_d_o_w peuvent se situer sur le CD-ROM.

 _C_e_p_e_n_d_a_n_t_,  _l_a  _s_u_i_t_e  _s_h_a_d_o_w  _3_._3_._1_,  _3_._3_._1_-_2  _e_t _s_h_a_d_o_w_-_m_k _p_o_s_s_e_d_e_n_t
 _t_o_u_t_e_s _u_n _p_r_o_b_l_e_m_e _d_e _s_e_c_u_r_i_t_e _a_v_e_c  _l_e_u_r  _p_r_o_g_r_a_m_m_e  _d_e  _l_o_g_i_n  _a_i_n_s_i
 _q_u_'_a_v_e_c  _d_'_a_u_t_r_e_s  _p_r_o_g_r_a_m_m_e_s  _p_o_s_s_e_d_a_n_t  _l_e  _d_r_o_i_t  setuid  root.  En
 consequence, elle ne doivent pas etre utilises plus longtemps.

 Tous les fichiers necessaires peuvent etre recuperes via  ftp  anonyme
 ou via le World Wide Web.

 Sur un systeme linux sans l'ensemble Shadow installe, les informations
 sur l'utilisateur, et en particulier le mot  de  passe  sont  stockees
 dans  le  fichier  /etc/passwd. Le mot de passe est enregistre dans un
 format _e_n_c_r_y_p_t_e. Si vous demandez a un expert en cryptographie, il (ou
 elle)  vous  repondra  que  le  mot  de  passe n'est pas _e_n_c_r_y_p_t_e mais
 _e_n_c_o_d_e. En fait, lors de l'utilisation de crypt(3), le  mot  de  passe
 est  considere  comme  la  cle  pour encoder un texte de valeur nulle.
 C'est la raison pour laquelle a partir de maintenant, j'utiliserai  le
 terme _e_n_c_o_d_e.

 L'algorithme  utilise  pour  encoder le mot de passe fonctionne a sens
 unique, c'est-a-dire qu'il est tres difficile a partir du mot de passe
 encode  de  retrouver l'original. Vous trouverez plus d'informations a
 propos de l'algorithme utilise dans  la  section  ``''  les  pages  de
 manuel de crypt(3).

 Lorsqu'un  utilisateur definit un mot de passe, il est encode avec une
 valeur aleatoire appelee _s_e_l (Note : _s_a_l_t en  Anglais).   C'est-a-dire
 qu'un  meme  mot  de  passe  pourrait  etre  enregistre de 4096 facons
 differentes. La valeur du _s_e_l est alors enregistree  avec  le  mot  de
 passe desormais encode.

 Lorsqu'un  utilisateur  se connecte et saisit son mot de passe, le _s_e_l
 est tout d'abord retrouve a partir du mot de passe encode.  Alors,  le
 mot de passe entre est encode avec le _s_e_l precedemment retrouve.

 Il est, avec des moyens informatiques, difficile (mais pas impossible)
 de prendre un mot de passe _e_n_c_o_d_e aleatoirement et de retrouver le mot
 de  passe  original.  Quoi  qu'il  en  soit,  sur  un systeme ayant de
 nombreux utilisateurs, il est probable que  certains  mots  de  passes
 soient  evidents:  un  simple  mot, un nom, ou une combinaison de mots
 simples.

 Mais le pirate de systeme sait tout cela, et va simplement encoder  un
 dictionnaire   de   mots   de  passe  usuels  en  utilisant  les  4096
 possibilites de _s_e_l. Il va alors comparer les mots  de  passe  encodes
 dans  le  fichier  /etc/passwd  par sa propre base de donnee. Quand il
 aura trouve une equivalence, il aura le  mot  de  passe  d'un  compte.
 Cela  s'appelle une _a_t_t_a_q_u_e _a_u _d_i_c_t_i_o_n_n_a_i_r_e, et c'est une des methodes
 les plus courantes pour acceder a un systeme sans autorisation.

 En y reflechissant, a un seul mot de passe de 8 caracteres  correspond
 4096  mots  de  passes  encodes de 13 caracteres (c'est a 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.

 Meme sans  avoir  beaucoup  d'espace  disque,  des  utilitaires  comme
 crack(1)  peuvent  en  general  casser pas mal de mots de passe sur un
 systeme contenant suffisamment d'utilisateurs. (En considerant que les
 utilisateurs  du  systeme  sont  autorises  a  lire leur propre mot de
 passe).

 Le  fichier  /etc/passwd  contient  aussi   des   informations   comme
 l'identificateur  de l'utilisateur (UID) et l'identificateur de groupe
 (GID) qui sont utilises par de nombreux programmes.  C'est  pour  cela
 que  le  fichier  passwd  _d_o_i_t etre lisible par tout le monde. Si vous
 changiez les permissions  de  /etc/passwd  de  telle  sorte  que  plus
 personne  ne  puisse  le  lire,  la  premiere  chose que vous pourriez
 constater, c'est que la commande ls -l affiche desormais le user ID au
 lieu du nom !

 Le  kit  Shadow  resout  ce  probleme  en  deplacant les mots de passe
 encodes vers un autre fichier (en general /etc/shadow). Il n'y  a  que
 le  root qui a les permissions de lecture et d'ecriture sur le fichier
 _s_h_a_d_o_w.  Quelques programmes (comme xlock) necessitent que  le  groupe
 _s_h_a_d_o_w  puisse  lire  et  ecrire  dans  le fichier /etc/shadow. Il est
 preferable que les programmes qui ont juste besoin de lire et verifier
 le mot de passe soient lances SGID _s_h_a_d_o_w plutot que SGID root.

 En  deplacant  les  mots  de  passe  vers le fichier /etc/shadow, nous
 ecartons effectivement au pirate la possibilite d'avoir acces aux mots
 de  passe  encodes  avec lesquels ils auraient pu faire une _a_t_t_a_q_u_e _a_u
 _d_i_c_t_i_o_n_n_a_i_r_e.

 De  plus,  le   _k_i_t   _s_h_a_d_o_w   propose   de   nouvelles   possibilites
 interessantes:

 +o  Un  fichier  de  configuration pour configurer les options de login
    (/etc/login.defs),

 +o  Des utilitaires pour  ajouter,  modifier  et  effacer  des  comptes
    utilisateurs,

 +o  Gestion de la duree des mots de passe,

 +o  Gestion de la duree d'un compte,

 +o  Groupes shadow (optionnels),

 +o  Mots de passe de double longueur (16 caracteres),

 +o  Meilleur   controle   sur   la  selection  du  mot  de  passe  d'un
    utilisateur,

 +o  Mots de passe Dial-up,

 +o  Programmes d'authentification secondaire.

 Installer l'_e_n_s_e_m_b_l_e _s_h_a_d_o_w, c'est contribuer a la securite  de  votre
 systeme,  mais il y a bien d'autre choses a faire pour securiser votre
 systeme. Il y aura probablement une serie de  HOWTO  discutant  de  la
 securite et des methodes de securisation.

 Pour  le moment, pour avoir des informations sur la securite et linux,
 incluant les vulnerabilites connues du systeme, allez voir  la:  Linux
 Security home page. <http://bach.cis.temple.edu/linux/linux-security/>

 22..11..  PPaasssswwoorrdd PPoouurrqquuooii  nnee  ddeevvrriieezz--vvoouuss  ppaass  iinnssttaalllleerr  llee  ssyysstteemmee
 SShhaaddooww

 Il y a quelques circonstances  et  quelques  configurations  qui  font
 qu'installer la _S_u_i_t_e _S_h_a_d_o_w n'est pas une bonne idee:

 +o  La machine ne possede pas de comptes utilisateurs,

 +o  Votre  machine  fonctionne  sur  un  reseau  local  et  utilise NIS
    (Network Information Service) pour recuperer ou  fournir  des  noms
    d'utilisateurs  et  des  mots  de  passe a d'autres machines sur le
    reseau (Cela peut actuellement  etre  fait  et  n'ameliore  pas  la
    securite pour autant),

 +o  Votre  machine  est  utilisee par des serveurs de terminaux afin de
    verifier des utilisateurs via NFS (Network  File  Sytem),  NIS,  ou
    quelqu'autre methode,

 +o  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.

 22..22..  FFoorrmmaatt dduu ffiicchhiieerr //eettcc//ppaasssswwdd

 Sur  un  systeme  ne possedant pas la suite Shadow, voici le format du
 fichier /etc/passwd

      username:passwd:UID:GID:full_name:directory:shell

 En detail:

    uusseerrnnaammee
       Le nom de l'utilisateur (login)

    ppaasssswwdd
       Le mot de passe encode

    UUIIDD
       Identificatuer de l'utilisateur: user ID

    GGIIDD
       Identificatuer du groupe: group ID

    ffuullll__nnaammee
       Le nom complet de l'utilisateur (Prenom  Nom)  -  Ce  champ  est
       appele  le champ GECOS (General Electric Comprehensive Operating
       System) et peut eventuellement contenir d'autres informations

    ddiirreeccttoorryy
       Repertoire personnel de l'utilisateur

    sshheellll
       Shell par defaut de l'utilisateur

 Par exemple:

      username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh

 Np est le _s_e_l et ge08pfz4wuk est le mot de passe _e_n_c_o_d_e. Pour le  meme
 mot  de  passe,  son  equivalent encode aurait tout aussi bien pu etre
 kbeMVnZM0oL7I. Il y a 4096 possibilites d'encodage pour le meme mot de
 passe. (Le mot de passe de cet exemple est

 Une  fois  l'ensemble  shadow installe, voila a quoi ressemblera votre
 fichier /etc/passwd:

      username:x:503:100:Full Name:/home/username:/bin/sh

 Un x est venu remplacer le mot de passe encode. Mis a part ca, le for-
 mat  du fichier /etc/passwd reste en fait inchange. Ceci permet a tous
 les programmes qui lisent le fichier  /etc/passwd  sans  avoir  besoin
 d'acceder aux mots de passe de fonctionner correctement.

 Les mots de passes encodes sont desormais dans le fichier /etc/shadow.

 22..33..  FFoorrmmaatt dduu ffiicchhiieerr //eettcc//sshhaaddooww

 Le fichier /etc/shadow contient les informations suivantes:

      username:passwd:last:may:must:warn:expire:disable:reserved

 En detail:

    uusseerrnnaammee
       Le Nom de l'Utilisateur

    ppaasssswwdd
       Le mot de passe encode

    llaasstt
       Date de la derniere modification (en nombre de jours  depuis  le
       1er janvier 1970).

    mmaayy
       Nombre de jours avant que le mot de passe puisse etre modifie

    mmuusstt
       Nombre de jours avant que le mot de passe doive etre modifie

    wwaarrnn
       Nombre  de  jours  durant  lesquels l'utilisateur est prevenu de
       l'expiration de son mot de passe.

    eexxppiirree
       Nombre de jours  entre  l'expiration  du  mot  de  passe  et  la
       fermeture du compte.

    ddiissaabbllee
       Date de la fermeture du compte (en nombre de jours depuis le 1er
       janvier 1970).

    rreesseerrvveedd
       Champ reserve

 Donc, l'exemple precedent devrait etre:

      username:Npge08pfz4wuk:9479:0:10000::::

 22..44..  AAppeerrccuu ddee llaa ffoonnccttiioonn ccrryypptt((33))

 extrait de la page de manuel de crypt(3)

 "_c_r_y_p_t est la fonction de cryptage du mot de passe. Elle est basee sur
 l'algorithme   du   DES   (_D_a_t_a  _E_n_c_r_y_p_t_i_o_n  _S_t_a_n_d_a_r_d)  avec  quelques
 modifications pour eviter les recherches materielles de la cle.

 La cle est le mot de passe de l'utilisateur

 Le _s_e_l est compose de deux caracteres choisis  dans  l'ensemble  a-zA-
 Z0-9./.   cette  chaine  de  caractere  est  utilisee  pour  perturber
 l'algorithme de 4096 differentes facons.

 En prenant les 7 derniers bits de chaque caractere du mot de passe, on
 obtient  une  cle  de 56 bits. Cette cle est utilisee pour crypter une
 chaine de caractere constante (generalement constituee  de  zero).  La
 valeur  retournee  pointe  sur le mot de passe crypte: une serie de 13
 caracteres   ASCII   imprimables   (les   deux   premiers   caracteres
 correspondent  au  sel).   La  valeur  retournee pointe sur une donnee
 statique dont le contenu est modifie a chaque appel.

 AAtttteennttiioonn:: Une cle de 56 bits correspond a: 2^56 donc  7.3e16  valeurs
 possibles.  Les recherches exhaustives ssoonntt ppoossssiibblleess en utilisant des
 ordinateurs a architecture massivement parallele. Des logiciels  comme
 crack(1) travaillent avec des cles qui sont generalement utilisees par
 les humains.  C'est-a-dire que la selection de mots  de  passe  testes
 sont des mots simples, mots de passe frequemment utilises et des noms.
 L'utilisation d'un programme passwd(1) qui recherche des mots de passe
 trop simple est recommande.

 L'algorithme  DES  lui-meme  est tres limite, ce qui fait qu'envisager
 l'utilisation de crypt(3) pour autre chose que  de  l'authentification
 de  mots  de  passe  n'est  pas  une  bonne  idee.   Si vous envisagez
 d'utiliser crypt(3) pour un projet de cryptographie, ne le faites pas,
 procurez-vous  plutot  un  bon livre sur le cryptage de donnees et une
 des nombreuses bibliotheques DES."

 Si vous recherchez un bon livre sur le cryptage de  donnees,  je  vous
 recommande:

         "Applied Cryptography: Protocols, Algorithms, and Source Code in C"
         par Bruce Schneier <[email protected]>
         ISBN: 0-471-59756-2

 33..  SSee pprrooccuurreerr llee ppaaqquueettaaggee SShhaaddooww..

 33..11..  HHiissttoorriiqquuee dduu ppaaqquueettaaggee SShhaaddooww ppoouurr LLiinnuuxx??

 _N_'_U_T_I_L_I_S_E_Z   _P_A_S  _L_E_S  _P_A_Q_U_E_T_A_G_E_S  _D_E_C_R_I_T_S  _D_A_N_S  _C_E_T_T_E  _S_E_C_T_I_O_N_,  _I_L_S
 _C_O_N_T_I_E_N_N_E_N_T _D_E_S _P_R_O_B_L_E_M_E_S _D_E _S_E_C_U_R_I_T_E

 Le paquetage Shadow original a ete ecrit par John F. Haugh II.

 De nombreuses versions peuvent etre utilisees sur un systeme Linux:

 +o  shadow-3.3.1 est l'original

 +o  shadow-3.3.1-2 est le patch specifique a Linux fait par Florian  La
    Roche ([email protected]) et contient quelques ameliorations.

 +o  shadow-mk est le paquetage specifique a Linux.

 Le paquetage shadow-mk est en fait constitue du paquetage shadow-3.3.1
 distribue par John F. Haugh II  patche  avec  shadow-3.3.1-2  avec  en
 plus:

 +o  des    corrections   par  Mohan  Kokal  <[email protected]>  rendant
    l'installation bien plus evidente,

 +o  un patch par Joseph R.M. Zbiciak pour login1.c  (login.secure)  qui
    elimine  les  trous  de  securite  -f, -h de /bin/login et quelques
    autres patches divers.

 Le paquetage shadow-mk etait precedemment  recommande,  mais  il  doit
 etre remplace a cause d'un trou de securite du programme login.

 Il  y  a  des  _t_r_o_u_s  _d_e  _s_e_c_u_r_i_t_e dans les versions 3.3.1, 3.3.1-2 et
 shadow-mk qui sont dus au programme login. Le bogue login implique  de
 ne  pas  verifier  la  longueur  du  nom  de  login.  Cela entraine un
 surpassement de la zone tampon qui provoque un crash ou  pire  encore.
 Il  est  dit  que  ce surpassement de zone tampon pourrait permettre a
 quiconque ayant un compte sur le systeme d'utiliser ce bogue ainsi que
 des  bibliotheques partagees pour gagner un acces root. Je ne pourrais
 pas vous dire exactement comment cela est possible  mais  de  nombreux
 systemes  Linux  sont  affectes.   Mais  les  systemes  possedants ces
 _p_a_q_u_e_t_a_g_e_s _S_h_a_d_o_w, ainsi que la plupart des distributions pre-ELF _s_a_n_s
 le _p_a_q_u_e_t_a_g_e _S_h_a_d_o_w sont vulnerables !

 Pour  de  plus  amples  informations  sur  cette publication ainsi que
 d'autres publications concernant les problemes de securite  de  Linux,
 consultez  la  _L_i_n_u_x  _S_e_c_u_r_i_t_y  _H_o_m_e  _P_a_g_e _(_S_h_a_r_e_d _L_i_b_r_a_r_i_e_s _a_n_d _l_o_g_i_n
 _P_r_o_g_r_a_m  _V_u_l_n_e_r_a_b_i_l_i_t_y_)   a   <http://bach.cis.temple.edu/linux/linux-
 security/Linux-Security-Faq/Linux-telnetd.html>

 33..22..  OOuu ttrroouuvveerr llaa SSuuiittee SShhaaddooww

 La  seule  suite  recommandee  est  en  beta  test, donc les dernieres
 versions  sont  utilisables  en  environnement  de  production  et  ne
 contiennent pas de programme login vulnerable.

 Le paquetage utilise la convention de notation suivante :

          shadow-AAMMJJ.tar.gz

 ou AAMMJJ est la date de publication de la suite.

 Cette  version  sera  eventuellement la version 3.3.3 lorsqu'elle sera
 publiee apres le beta test; et est maintenue par  Marek  Michalkiewicz
 <[email protected]>. Elle est disponible sous la forme
 :            _s_h_a_d_o_w_-_c_u_r_r_e_n_t_._t_a_r_._g_z             a             l'adresse
 <ftp://il7linuxb.ists.pwr.wroc.pl/pub/linux/shadow/shadow-
 current.tar.gz>.

 Les miroirs suivants sont aussi disponibles :

 +o  ftp://ftp.icm.edu.pl/pub/Linux/shadow/shdow-current.tar.gz

 +o  ftp://iguana.hut.fi/pub/linux/shadow/shadow-current.tar.gz

 +o  ftp://ftp.cin.net/usr/ggallag/shadow/shadow-current.tar.gz

 +o  ftp://ftp.netural.com/pub/linux/shadow/shadow-current.tar.gz

 Vous devez utiliser la version actuelle disponible.

 Vous NE devez PAS utiliser une version plus ancienne  que  la  version
 shadow-960129  du  fait  qu'elles  possedent  le  probleme de securite
 decrit plus avant.

 Lorsque ce document fait  reference  a  la  _S_u_i_t_e  _S_h_a_d_o_w,  je  ferais
 reference  a  ce  paquetage.  Il est donc suppose que vous utilisez ce
 paquetage.

 Pour information, j'ai utilise le paquetage shadow-960129  pour  faire
 les instructions d'installation.

 Si  vous  utilisiez  precedemment le paquetage shadow-mk, vous devriez
 mettre a jour cette version et reconstruire  tout  ce  que  vous  avez
 originellement compile.

 33..33..  CCee qquuii eesstt iinncclluuss ddaannss llee ppaaqquueettaaggee SShhaaddooww

 La paquetage shadow contient les programmes de remplacement pour:

 su, login, passwd, newgrp, chfn, chsh, et id

 Mais il contient aussi des nouveaux programmes:

 chage,   newusers,   dpasswd,   gpasswd,  useradd,  userdel,  usermod,
 groupadd, groupdel, groupmod, groups, pwck, grpck, lastlog, pwconv, et
 pwunconv

 De  plus,  la  bibliotheque: libshadow.a est incluse pour permettre de
 compiler les programmes necessitant un acces en lecture/ecritures  aux
 mots de passe.

 Les pages de manuel sont aussi incluses.

 Il  y  a  aussi  un  programme  de configuration pour le program login
 intalle sous le nom de /etc/login.defs.

 44..  CCoommppiilleerr lleess pprrooggrraammmmeess..

 44..11..  EExxttrraaiirree ll''aarrcchhiivvee

 La premiere etape apres avoir recupere les paquetage est  l'extraction
 de l'archive. C'est une archive de format tar et compressee avec gzip.
 Donc tout d'abord deplacez la vers /usr/src, et tapez:

      tar -xzvf shadow-current.tar.gz

 Ceci extraira l'ensemble dans le repertoire: /usr/src/shadow-AAMMJJ

 44..22..  CCoonnffiigguurreerr llee ffiicchhiieerr ccoonnffiigg..hh

 La premiere chose a faire  est  d'ecraser  les  fichiers  Makefile  et
 config.h:

 cd /usr/src/shadow-AAMMJJ
 cp Makefile.linux Makefile
 cp config.h.linux config.h

 Jetez  un  coup  d'oeil  au fichier config.h.  Ce fichier contient les
 definitions pour quelques options de configuration.  Si vous  utilisez
 le  paquetage  shadow  _r_e_c_o_m_m_a_n_d_e,  je vous recommande de devalider le
 support de groupes shadow; pour la premiere fois.

 Par defaut les mots de passe pour les groupes cache sont valides. Pour
 les  devalider,  editez  le  fichier  config.h,  et  remplacez #define
 SHADOWGRP en #undef SHADOWGRP. Je recommande  de  commencer  sans  les
 groupes  caches,  mais  si vous souhaitez reellement des mots de passe
 pour les groupes ainsi que des administrateurs de groupes vous pourrez
 ulterieurement  valider  l'option  et  recompiler  le tout. Si vous la
 laissez validee, vous devez creer le fichier /etc/gshadow.

 Valider l'option gerant les longs mots de passe n'est pas recommandee.

 _N_e _P_A_S _c_h_a_n_g_e_r le champ: #undef AUTOSHADOW

 L'option  AUTOSHADOW  etait prevue pour que les programmes non adaptes
 aux mots de passe shadow puissent toujours  fonctionner.  Cela  parait
 interessant  en  theorie  mais ne fonctionne pas correctement. Si vous
 validez cette option, et qu'un programme focntionne avec les droits de
 root, il se peut qu'il utilise la fonction  getpwnam() avec les droits
 root, et, plus tard, qu'il ecrive la donnee modifiee dans  le  fichier
 /etc/passwd.   Il   ne  possedera  donc  plus  les  proprietes  _s_h_a_d_o_w
 _p_a_s_s_w_o_r_d_s. _c_h_f_n et _c_h_s_h sont de tels programmes  (Vous  pouvez  passer
 outre  en echangeant l'uid reel et effectif avant d'appeler getpwnam()
 car root peut utiliser _c_h_f_n et _c_h_s_h aussi).

 Le meme avertissement est aussi valable si vous compilez la libc. Il y
 a  une  option  SHADOW_COMPAT qui fait la meme chose. Elle ne _d_o_i_t _P_A_S
 _e_t_r_e utilisee! Si vous commencez a remettre des mots de passe  encodes
 dans le fichier /etc/passwd, cela pose un probleme.

 Si  vous  utilisez  une  libc  de  versions  inferieure a 4.6.27, vous
 devriez faire un ou deux changements dans le  fichier  config.h  ainsi
 que  dans  le Makefile. En ce qui concerne le fichier config.h, editez
 le et remplacez:

      #define HAVE_BASENAME

 par

      #undef HAVE_BASENAME

 Dans le fichier Makefile, remplacez:

 SOBJS = smain.o env.o entry.o susetup.o shell.o \
         sub.o mail.o motd.o sulog.o age.o tz.o hushed.o

 SSRCS = smain.c enc.c entry.c setup.c shell.c \
         pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
         tz.c hushed.c

 par

      SOBJS = smain.o env.o entry.o susetup.o shell.o \
              sub.o mail.o motd.o sulog.o age.o tz.o hushed.o basename.o

      SSRCS = smain.c enc.c entry.c setup.c shell.c \
              pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
              tz.c hushed.c basename.c

 Ce changement ajoute le code contenu dans basename.c qui  est  contenu
 dans la libc 4.6.27 ou plus.

 44..33..  FFaaiirree uunnee ccooppiiee ddee ssaauuvveeggaarrddee ddee vvooss pprrooggrraammmmeess oorriiggiinnaauuxx..

 Faites une copie de sauvegarde des fichiers qui  vont  etre  remplaces
 par le kit shadow. Sur un systeme Slackware 3.0:

 +o  /bin/su

 +o  /bin/login

 +o  /usr/bin/passwd

 +o  /usr/bin/newgrp

 +o  /usr/bin/chfn

 +o  /usr/bin/chsh

 +o  /bin/id

 Le  paquetage  beta possede une cible _s_a_v_e dans le Makefile, mais elle
 est commentee car les differentes distributions placent ces programmes
 a differents endroits.

 Vous   devriez   aussi  faire  une  copie  de  sauvegarde  du  fichier
 /etc/passwd, mais faites attention a le nommer differemment de facon a
 ne pas ecraser l'original.

 44..44..  LLaanncceerr mmaakkee

 _V_o_u_s _a_v_e_z _b_e_s_o_i_n _d_'_e_t_r_e root pour la plupart de l'installation

 Lancez make pour compiler les executables du paquetage.

      make all

 Vous  pourrez  voir les avertissements suivants: rcsid defined but not
 used. Ce n'est rien, il survient seulement parce que l'auteur  utilise
 un paquetage de controle de version.

 55..  IInnssttaalllleerr

 55..11..  AAyyeezz uunnee ddiissqquueettttee ddee bboooott aa ppoorrtteeee ddee mmaaiinn

 Si  la  mise  a  jour  se  deroulait  mal, il serait utile d'avoir une
 disquette de  boot.  Si  vous  avez  l'ensemble  des  deux  disquettes
 boot/root  que  vous  avez  utilisees  lors de l'installation de votre
 systeme, elles feront probablement l'affaire. Dans le  cas  contraire,
 vous  devrez  en  generer:  jetez  un  coup  d'oeil  au Bootdisk-HOWTO
 <http://sunsite.unc.edu/mdw/HOWTO/Bootdisk-HOWTO.html>        (version
 francaise:                                              Bootdisk-HOWTO
 <ftp://ftp.ibp.fr/pub/linux/french/docs/HOWTO/Bootdisk-HOWTO>)     qui
 vous decrira la marche a suivre.

 55..22..  SSuupppprriimmeerr lleess ppaaggeess ddee mmaannuueell eenn ddoouubbllee

 Vous  devriez  aussi  deplacer  les  pages  de  manuels  qui vont etre
 remplacees. Meme si vous avez le courage  d'installer  le  kit  Shadow
 sans  proceder  a un quelconque sauvegarde, vous aurez a supprimer vos
 anciennes pages: elles ne sont pas ecrasees car - dans la plupart  des
 cas - elles sont enregistrees dans un format compresse.

 Vous  pouvez  utiliser une combinaison de la commande man -aW et de la
 commande  locate  pour  localiser  les  pages  a   effacer.   Il   est
 generalement  plus  aise  de  retrouver  les  anciennes pages avant de
 lancer make intall.

 Si vous utilisez la distribution Slackware 3.0,  alors  les  pages  de
 manuel que vous devez supprimer sont:

 +o  /usr/man/man1/chfn.1.gz

 +o  /usr/man/man1/chsh.1.gz

 +o  /usr/man/man1/id.1.gz

 +o  /usr/man/man1/login.1.gz

 +o  /usr/man/man1/passwd.1.gz

 +o  /usr/man/man1/su.1.gz

 +o  /usr/man/man5/passwd.5.gz

 Regardez  dans  les sous repertoires /var/man/cat[1-9] Il est possible
 qu'il y ait des pages de manuel du meme nom qui devront etre effacees.

 55..33..  LLaanncceerr mmaakkee iinnssttaallll

 C'est desormais le moment de taper: (faites ceci en tant que root).

      make install

 Ceci  installera  les  nouveaux  programmes,  remplacera  les anciens,
 definira les permissions de  fichiers,  et  installera  les  pages  de
 manuel.

 Make  install prend en compte l'installation des fichiers include pour
 les mettre au bon endroit dans /usr/include/shadow.

 Si vous utilisez le paquetage beta, vous devez copier  a  la  main  le
 fichier  login.defs  dans  les  repertoires /etc/ et etre sur que seul
 root peut le modifier.

      cp login.defs /etc
      chmod 700 /etc/login.defs

 Ce fichier est le fichier de configuration pour  le  programme  _l_o_g_i_n.
 Vous  devriez  regarder  et faire des changements dans ce fichier pour
 votre propre systeme. C'est la que vous decidez sur quel terminal root
 peut  se  connecter,  ainsi que d'autres parametres de securite (comme
 l'expiration  par defaut des mots de passe).

 55..44..  LLaanncceerr ppwwccoonnvv

 La prochaine etape consiste a lancer pwconv. Ceci doit  etre  fait  en
 tant que root, et a partir du repertoire /etc :

      cd /etc
      /usr/sbin/pwconv

 pwconv  lit  les  donnees du fichier /etc/passwd et les separe en deux
 fichiers: /etc/npasswd et /etc/nshadow.

 Un programme pwunconv permet de faire la demarche inverse: a partir du
 fichier /etc/passwd et /etc/shadow, il genere un unique /etc/passwd.

 55..55..  RReennoommmmeerr nnppaasssswwdd eett nnsshhaaddooww

 Apres  avoir  lance  pwconv, vous avez normalement cree deux fichiers:
 /etc/npasswd et /etc/nshadow. Ses fichiers doivent etre respectivement
 renommes  en  /etc/passwd  et  /etc/shadow.  Faites aussi une copie de
 votre fichier /etc/passwd original, mais faites attention que seul  le
 root  puisse  y avoir l'acces.  Nous le deplacerons dans le repertoire
 personnel de root:

      cd /etc
      cp passwd ~passwd
      chmod 600 ~passwd
      mv npasswd passwd
      mv nshadow shadow

 Verifiez aussi que les permissions et les proprietaires  des  fichiers
 soient  corrects.  Si vous utilisez _X_-_w_i_n_d_o_w_s, le programme xlock doit
 pouvoir lire directement le fichier /etc/shadow (mais pas  y  ecrire).
 La  meilleure  solution  consiste  a  configurer  le fichier shadow en
 utilisateur root et groupe shadow. Avant toute chose verifiez  que  le
 groupe  shadow  existe  bien  (regardez  dans  le fichier /etc/group).
 Actuellement, il ne devrait y avoir aucun utilisateur appartenant a ce
 groupe.

      chown root.root passwd
      chown root.shadow shadow
      chmod 0644 passwd
      chmod 0640 shadow

 Votre  systeme est desormais equipe de mots de passe shadow. Deplacez-
 vous vers une autre console virtuelle et verifier si vous pouvez  vous
 loguer.

 Si  vous  ne pouvez pas vous loguer c'est que la mise a jour s'est mal
 deroulee !  Pour revenir a un systeme de mot  de  passes  non  shadow,
 entrez ce qui suit:

      cd /etc
      cp ~passwd passwd
      chmod 644 passwd
      cd /usr/src/shadow-mk
      make restore

 Ceci  restaurera  le  fichier passwd original,  et restaurera tous les
 fichiers precedemment sauvegardes.

 66..  LLeess aauuttrreess pprrooggrraammmmeess aa mmeettttrree aa jjoouurr

 Le paquetage shadow contient la plupart des programmes de remplacement
 aux  programmes  accedant  aux mots de passe. Mais toutefois, il reste
 quelques programmes presents en general sur la  plupart  des  systemes
 qui necessitent une mise a jour pour fonctionner correctement.

 Si  vous  utilisez  une  _D_i_s_t_r_i_b_u_t_i_o_n  _D_e_b_i_a_n  (et  meme  si vous n'en
 utilisez pas), vous pouvez obtenir les sources des programmes que vous
 avez          besoin         de         recompiler         a         :
 <ftp://ftp.debian/org/debian/stable/source/>

 La but de cette section  concerne  la  mise  a  jour  des  programmes:
 adduser, wu_ftpd, ftpd, pop3d, xlock xdm et sudo

 Reportez  vous  a  la section ``'' pour vous aider a mettre a jour les
 programmes qui necessitent l'acces aux mots de  passes  (sans  que  le
 programme soit SUID root ou SGID shadow).

 66..11..  llee pprrooggrraammmmee AAdddduusseerr ((SSllaacckkwwaarree))

 Les  distributions Slackware (et probablement d'autres) contiennent un
 programme interactif /bin/adduser permettant d'ajouter facilement  des
 utilisateurs.  Une  version  Shadow  de ce programme peut etre trouvee
 sur:                                  ftp://sunsite.unc.edu/pub/Linux/
 system/Admin/accounts/adduser.shadow-1.4.tar.gz.

 Je  vous  encourage  a utiliser les programmes qui sont fournis par le
 paquetage shadow (useradd, usermod et userdel) a la place de  adduser.
 Ils necessitent un peu de temps pour savoir s'en servir, mais l'effort
 est d'autant plus grand que ces programmes effectuent  un  blocage  de
 fichier sur /etc/passwd et /etc/shadow, ce que ne fait pas adduser

 Lisez la section ``'' pour de plus amples informations.

 L'installation est aisee:

      tar -xzvf adduser.shadow-1.4.tar.gz
      cd adduser.shadow.1.4
      make adduser
      chmod 700 adduser
      make install

 66..22..  LLee sseerrvveeuurr wwuu__ffttppdd

 La  plupart  des  distributions  Linux incluent le serveur wu_ftpd. Si
 votre distribution n'est pas ``native shadow'', votre serveur  wu_ftpd
 n'est  pas  compile pour le support shadow. wu_ftpd est lance a partir
 de inetd/tcpd en tant que processus root. Si vous utilisez  un  ancien
 demon  wu_ftpd,  vous  devrez  de toute facon le mettre a jour car les
 vieilles versions ont un bug, le compte root  pouvait  etre  compromis
 (pour     plus     d'informations,     consultez    la    page    web:
 <http://bach.cis.temple.edu/linux/linux-security/Linux-      Security-
 FAQ/Linux-wu.ftpd-2.4-Update.html>).

 Heureusement,  la  seule demarche a faire est de recuperer les sources
 et de les compiler avec l'option shadow.

 Le   serveur   wu_ftpd   peut   etre   recupere   sur   Sunsite:   wu-
 ftp-2.4-fixed.tar.gz
 <ftp://sunsite.unc.edu/pub/Linux/system/Network/file-transfer/wu-
 ftpd-2.4-fixed.tar.gz>

 Une fois l'archive recuperee, placez la dans /usr/src et tapez:

      cd /usr/src
      tar -xzvf wu-ftpd-2.4-fixed.tar.gz
      cd wu-ftpd-2.4-fixed
      cp ./src/config/config.lnx.shadow ./src/config/config.lnx

 editer  alors  le  fichier  ./src/makefiles/Makefile.lnx et changez la
 ligne:

      LIBES     = -lbsd -support

 par

      LIBES     = -lbsd -support -lshadow

 Maintenant vous etes pres a lancer le script de compilation  installer
 le resultat:

      cd /usr/src/wu-ftpd-2.4-fixed
      /usr/src/wu-ftpd-2.4-fixed/build lnx
      cp /usr/sbin/wu-ftpd /usr/src/wu-ftpd.old
      cp ./bin/ftpd /usr/sbin/wu-ftpd

 Sur  mon  systeme  base  sur  une  Slackware  3.0  j'ai  du  faire ces
 modifications avant de lancer build: build:

      cd /usr/include/netinet
      ln -s in_systm.h in_system.h
      cd -

 Des problemes ont ete rapportes lors de la compilation de ce paquetage
 sous   des  systemes  ELF,  mais  la  beta  version  de  la  prochaine
 publication  fonctionne  bien.  Elle   peut   etre   trouve   a:   wu-
 ftp-2.4.2-beta-10.tar.gz   <ftp://tscnet.com/pub/linux/network/ftp/wu-
 ftpd-2.4.2-beta-20.tar.gz>

 Une fois  que  vous  avez  recupere  le  serveur,  placez-le  dans  le
 repertoire /usr/src/ et tapez:

      cd /usr/src
      tar -xzvf wu-ftpd-2.4.2-beta-10.tar.gz
      cd wu-ftpd-beta-10
      cd ./src/config

 editez alors le fichier config.lnx et remplacez:

      #undef SHADOW_PASSWORD

 par

      #define SHADOW_PASSWORD

 Allez alors dans le repertoire des Makefiles

      cd ../Makefiles

 et editez le fichier Makefile.lnx. Modifiez alors:
      LIBES = -lsupport -lbsd # -lshadow

 par

      LIBES = -lsupport -lbsd -lshadow

 Il ne reste plus qu'a compiler le programme et l'installer:

      cd ..
      build lnx
      cp /usr/sbin/wu-ftpd /usr/sbin/wu-ftpd.old
      cp ./bin/ftpd /usr/sbin/wu-ftpd

 Notez que vous devrez controler le fichier /etc/inetd.conf afin d'etre
 sur que votre serveur  wu-ftpd  soit  reellement  present.  Il  a  ete
 rapporte  que  certaines  distributions  placent les serveurs demons a
 d'autres endroits, et donc, wu-ftpd en particulier pourrait etre nomme
 differemment.

 66..33..  ffttppdd ssttaannddaarrdd

 Si  vous  utilisez  le  serveur  ftpd  standard, tout d'abord, je vous
 recommande de passer au serveur wu_ftpd, mis a  part  les  bugs  cites
 precedemment, il est considere comme plus securise.

 Si  vous  insistez et voulez garder la version standard - ou bien vous
 avez besoin du support NIS - le fichier est sur Sunsite:  ftpd-shadow-
 nis.tgz          <ftp://sunsite.unc.edu/pub/Linux/system/Network/file-
 transfer/ftpd-shadow-nis.tgz>

 66..44..  ppoopp33dd ((PPoosstt OOffffiiccee PPrroottooccooll 33))

 Si vous utilisez le 3eme _P_o_s_t  _O_f_f_i_c_e  _P_r_o_t_o_c_o_l  (POP3),  vous  devrez
 recompiler  le  programme  pop3d.  pop3d  est  normalement  lance  par
 inet2/tcpd dans un process root.

 Il    y    a    deux     versions     disponibles     sur     Sunsite:
 pop3d-1.00.4.linux.shadow.tar.gz
 <ftp://sunsite.unc.edu/pub/Linux/system/Mail/pop/
 pop3d-1.00.4.linux.shadow.tar.gz>      et      pop3d+shadow+elf.tar.gz
 <ftp://sunsite.unc.edu/pub/Linux/system/Mail/pop/
 pop3d+shadow+elf.tar.gz>

 Les deux versions sont tres simples a installer.

 66..55..  xxlloocckk

 Si vous utilisez X-window et que vous ne mettez pas a jour xlock, vous
 devrez utiliser CTRL-ALT-Fx pour vous deplacer sur un autre  terminal,
 vous  loguer  et  tuer  le process xlock (ou utiliser CTRL-ALT-BS pour
 tuer le serveur X). Mais par chance, la mise a  jour  d'  xlock  n'est
 vraiment pas compliquee.

 Si vous utilisez XFree86 Versions 3.x.x,  c'est probablement xlockmore
 qui est installe (c'est un superbe economiseur d'ecran et  un  systeme
 de  lock).   Ce paquetage supporte _s_h_a_d_o_w apres recompilation. Si vous
 utilisez une vieille version xlock, je vous recommande celle-ci.

 xlockmore-3.7.tgz          disponible           sur           Sunsite:
 <ftp://sunsite.unc.edu/pub/Linux/X11/xutils/screen-savers/
 xlockmore-3.7.tgz>

 En gros, voila comment proceder:

 Recuperez xlockmore-3.7.tgz et copiez-le dans /usr/src,  decompressez-
 le:

      tar -xzvf xlockmore-3.7.tgz

 Editez  le  fichier: /usr/X11R6/lib/X11/config/linux.cf, et changez la
 ligne:

      #define HasShadowPasswd    NO

 en

      #define HasShadowPasswd    YES

 Alors, construisez les executables:

      cd /usr/src/xlockmore
      xmkmf
      make depend
      make

 Maintenant, deplacez le tout vers le bon endroit, et mettez-a-jour les
 proprietaires et les permissions de fichier:

      cp xlock /usr/X11R6/bin/
      cp XLock /var/X11R6/lib/app-defaults/
      chown root.shadow /usr/X11R6/bin/xlock
      chmod 2755 /usr/X11R6/bin/xlock
      chown root.shadow /etc/shadow
      chmod 640 /etc/shadow

 Votre xlock fonctionnera desormais correctement.

 66..66..  xxddmm

 xdm  est  un  programme  qui presente un ecran de _l_o_g_i_n pour _W_-_W_i_n_d_o_w.
 Quelques sytemes demarrent xdm  lorsqu'il  se  situe  dans  un  niveau
 specifique (voir /etc/inittab).

 Avec  le  _k_i_t _S_h_a_d_o_w installe, xdm doit etre mis a jour. Heureusement,
 il est relativement facile de mettre a jour votre programme xdm.

 xdm.tar.gz               est               disponible               a:
 <ftp://sunsite.unc.edu/pub/Linux/X11/xutils/xdm.tar.gz>;

 Recuperez  xdm.tar.gz  et  placez-le  dans  le repertoire /usr/src, et
 decompressez-le:

      tar -xzvf xdm.tar.gz

 editez le fichier /usr/X11R6/lib/X11/config/linux.cf,  et  changez  la
 ligne:

      #define HasShadowPassword           NO

 en

      #define HasShadowPassword           YES

 Vous pouvez alors compiler les executables;:

      cd /usr/src/xdm
      xmkmf
      make depend
      make

 Copier alors l'executable:

      cp xdm /usr/X11R6/bin

 xdm  est  execute  en tant que root donc vous n'avez pas a changer les
 permissions.

 66..77..  ssuuddoo

 Le programme sudo permet a l'administrateur  systeme  de  laisser  des
 utilisateurs lancer des programmes qui normalement necessiteraient les
 permissions root. C'est interessant car ca permet  a  l'administrateur
 de  se  limiter  lui  meme  l'acces  root  pendant  qu'il  permet  aux
 utilisateurs de faire des operations comme monter un disque.

 sudo a besoin d'acceder aux mots de passe car il  verifie  le  mot  de
 passe  des utilisateurs quand il est invoque.sudo fonctionne deja SUID
 root, donc acceder au fichier /etc/shadow n'est pas un probleme.

 la mise a jour sudo pour shadow est disponible:

 Cette version a ete prevue pour fonctionner avec  des  mots  de  passe
 shadow, donc la seule chose a faire est de recompiler le tout (mettez-
 le dans /usr/src):

      cd /usr/src
      tar -xzvf sudo-1.2-shadow.tgz
      cd sudo-1.2-shadow
      make all
      make install

 66..88..  iimmaappdd ((ppaaqquueettaaggee EEmmaaiill ppiinnee))

 imapd est un serveur e-mail tout comme pop3d. imapd est  compris  dans
 l'ensemble  Email  pine.  La  documentation  qui  est  fournie avec le
 paquetage pretend que la configuration  par  defaut  pour  un  systeme
 linux  fonctionne avec shadow. Or j'ai constate que ce n'est pas vrai.
 De plus, je n'ai pas encore compris comment fonctionne la  combinaison
 Makefile / Script Build et je n'ai pas reussi a le modifier pour qu'il
 supporte le format shadow.

 Si quelqu'un arrive a faire cette mise a jour, merci de  m'envoyer  un
 email, je l'incluerai ici.

 66..99..  ppppppdd ((SSeerrvveeuurr PPooiinntt--ttoo--PPooiinntt pprroottooccooll))

 Le  serveur  pppd  peut  etre  configure  selon de nombreuses methodes
 d'authentification:  _P_a_s_s_w_o_r_d  _A_u_t_h_e_n_t_i_f_o_c_a_t_i_o_n  _P_r_o_t_o_c_o_l   (PAP)   et
 _C_r_y_p_t_o_g_r_a_p_h_i_c   _A_u_t_h_e_n_t_i_f_i_c_a_t_i_o_n  _P_r_o_t_o_c_o_l  (CHAP).  Le  serveur  pppd
 utilise  en  general  les  mots  de  passe  stockes  dans  le  fichier
 /etc/ppp/chap-secrets  et  /etc/ppp/pap-secret. Si vous utilisez cette
 methode, ce n'est pas la peine de faire de mise-a-jour.

 pppd vous permet aussi d'utiliser le parametre _l_o_g_i_n (soit en ligne de
 commande,  soit  dans  le fichier de configuration). Si l'option login
 est utilisee, alors pppd utilisera pour le _P_A_P le fichier  /etc/passwd
 pour  le  nom  d'utilisateur  et  le  mot  de  passe.  Bien  sur ca ne
 fonctionnera  plus  sur  un  systeme  mots  de  passe   shadow.   Pour
 pppd-1.2.1d, un ajout de code est necesssaire.

 L'exemple  donne dans la prochaine section est la modification du code
 de pppd-1.2.1d (une vieille version de pppd).

 pppd-2.2.0 contient deja le support shadow.

 77..  FFaaiirree eenn ssoorrttee qquuee llaa ssuuiittee sshhaaddooww ffoonnccttiioonnnnee

 Cette section explique quelques elements  que  vous  souhaitez  savoir
 depuis que vous avez la suite shadow sur votre systeme. De plus amples
 informations sont disponibles dans les pages de manuels.

 77..11..  AAjjoouutteerr,, mmooddiiffiieerr,, eett ssuupppprriimmeerr ddeess uuttiilliissaatteeuurrss..

 La _S_u_i_t_e _S_h_a_d_o_w a ajoute les commandes suivantes  qui  sont  orientees
 ``ligne  de  commande'',  pour  ajouter,  modifier  et  supprimer  des
 utilisateurs. Vous avez  aussi  surement  du  installer  le  programme
 adduser.

 77..11..11..  uusseerraadddd

 la commande useradd peut etre utilisee pour ajouter des utilisateurs a
 votre systeme. Vous appelez aussi  cette  commande  pour  changer  les
 parametres par defaut.

 La  premiere chose a faire est d'examiner les parametres par defaut et
 effectuer des changements pour votre propre systeme.

      useradd -D

 ______________________________________________________________________
 GROUP=1
 HOME=/home
 INACTIVE=0
 EXPIRE=0
 SHELL=
 SKEL=/etc/skel
 ______________________________________________________________________

 Les parametres par defauts ne sont probablements  pas  ceux  que  vous
 souhaitez,   donc,  si  vous  commencez  a  ajouter  des  utilisateurs
 maintenant, vous aurez a specifier toutes les informations pour chacun
 d'entre  eux.  C'est  pour cela que nous pouvons et devons changer les
 valeurs par defaut.

 Sur mon syteme:

 +o  Je veux que le groupe par defaut soit 100,

 +o  Je veux que les mots de passe expirent au bout de 60 jours,

 +o  Je ne veux pas que le compte soit bloque lors  de  l'expiration  du
    mot de passe,

 +o  Je veux que le shell par defaut soit /bin/bash

    Pour effectuer ces changements, j'ai du utiliser:

      useradd -D -g100 -e60 -f0 -s/bin/bash

 Maintenant, lancer useradd -D donne:

 ______________________________________________________________________
 GROUP=100
 HOME=/home
 INACTIVE=0
 EXPIRE=60
 SHELL=/bin/bash
 SKEL=/etc/skel
 ______________________________________________________________________

 Ces    valeurs    par   defaut   sont   stockees   dans   le   fichier
 /etc/defaults/useradd

 Maintenant vous pouvez utiliser useradd pour ajouter des  utilisateurs
 a  votre  systeme.  Par  exemple,  pour ajouter l'utilisateur fred, en
 utilisant les valeurs par defaut, vous devez utiliser ce qui suit:

      useradd -m -c "Fred Flintstone" fred

 Cela creera une entree dans le fichier /etc/passwd:

      fred:*:505:100:Fred Flintstone:/home/fred:/bin/bash

 Ainsi que cette entree dans le fichier /etc/shadow:

      fred:!:0:0:60:0:0:0:0

 Le repertoire d'accueil de fredsera cree et le  contenu  de  /etc/skel
 sera copie a cet endroit grace a l'option -m

 De  plus,  lorsque  l'on ne specifie pas l'IUD, le prochain disponible
 est utilise.

 Le compte de fred est maintenant cree, mais fred ne peut pas se  loger
 tant  que nous ne deverouillons pas le compte. Nous effectuons cela en
 changeant le mot de passe.

      passwd fred

 ______________________________________________________________________
 Changing password for fred
 Enter the new password (minimum of 5 characters)
 Please use a combination of upper and lower case letters and numbers.
 New Password: *******
 Re-enter new password: *******
 ______________________________________________________________________

 Maintenant /etc/shadow contient:

      fred:J0C.WDR1amIt6:9559:0:60:0:0:0:0

 fred est maintenant capable de se connecter et d'utiliser le  systeme.
 La  chose  interessante  a  propos de useradd et des autres programmes
 provenant de la Suite Shadow, est qu'ils  effectuent  les  changements
 dans  les fichiers /etc/passwd et /etc/shadow automatiquement. Donc si
 vous ajoutez un utilisateur, et qu'un autre utilisateur change son mot
 de   passe  au  meme  moment,  les  deux  operations  sont  effectuees
 correctement.

 Vous  devriez  plutot  utiliser  les  commandes   fournies   qu'editer
 directement  les fichier /etc/passwd et /etc/shadow. Si vous editez le
 fichier /etc/shadow et qu'un utilisateur change son mot  de  passe  au
 meme  moment, ce que vous sauverez, sera bien dans le fichier mais, le
 nouveau mot de passe de l'utilisateur sera perdu.

 Voici un petit script interactif permettant d'ajouter des utilisateurs
 en utilisant les commandes useradd et passwd:

 ______________________________________________________________________
 #!/bin/bash
 #
 # /sbin/newuser - A script to add users to the system using the Shadow
 #                 Suite's useradd and passwd commands.
 #
 # Written my Mike Jackson <[email protected]> as an example for the Linux
 # Shadow Password Howto.  Permission to use and modify is expressly granted.
 #
 # This could be modified to show the defaults and allow modification similar
 # to the Slackware Adduser program.  It could also be modified to disallow
 # stupid entries.  (i.e. better error checking).
 #
 ##
 #  Defaults for the useradd command
 ##
 GROUP=100        # Default Group
 HOME=/home       # Home directory location (/home/username)
 SKEL=/etc/skel   # Skeleton Directory
 INACTIVE=0       # Days after password expires to disable account (0=never)
 EXPIRE=60        # Days that a passwords lasts
 SHELL=/bin/bash  # Default Shell (full path)
 ##
 #  Defaults for the passwd command
 ##
 PASSMIN=0        # Days between password changes
 PASSWARN=14      # Days before password expires that a warning is given
 ##
 #  Ensure that root is running the script.
 ##
 WHOAMI=`/usr/bin/whoami`
 if [ $WHOAMI != "root" ]; then
         echo "You must be root to add news users!"
         exit 1
 fi
 ##
 #  Ask for username and fullname.
 ##
 echo ""
 echo -n "Username: "
 read USERNAME
 echo -n "Full name: "
 read FULLNAME
 #
 echo "Adding user: $USERNAME."
 #
 # Note that the "" around $FULLNAME is required because this field is
 # almost always going to contain at least on space, and without the
 # the useradd command would think that you we moving on to the next
 # parameter when it reached the SPACE character.
 #
 /usr/sbin/useradd -c"$FULLNAME" -d$HOME/$USERNAME -e$EXPIRE \
         -f$INACTIVE -g$GROUP -m -k$SKEL -s$SHELL $USERNAME
 ##
 #  Set password defaults
 ##
 /bin/passwd -n $PASSMIN -w $PASSWARN $USERNAME >/dev/null 2>&1
 ##
 #  Let the passwd command actually ask for password (twice)
 ##
 /bin/passwd $USERNAME
 ##
 #  Show what was done.
 ##
 echo ""
 echo "Entry from /etc/passwd:"
 echo -n "   "
 grep "$USERNAME:" /etc/passwd
 echo "Entry from /etc/shadow:"
 echo -n "   "
 grep "$USERNAME:" /etc/shadow
 echo "Summary output of the passwd command:"
 echo -n "   "
 passwd -S $USERNAME
 echo ""
 ______________________________________________________________________

 Utiliser  un  script  pour  ajouter  des utilisateurs est preferable a
 l'edition  des  fichiers  /etc/passwd  et   /etc/shadow   ainsi   qu'a
 l'utilisation   de   programmes   comme  adduser  de  la  distribution
 Slackware.

 Vous etes libre d'utiliser et de modifier le script a en  fonction  de
 votre systeme.

 Pour plus d'informations sur useradd, consultez le manuel en ligne.

 77..11..22..  uusseerrmmoodd

 Le  programme  usermod  est  utilise  pour  modifier  les informations
 relatives a un utilisateur.  Les  options  sont  les  memes  que  pour
 useradd.

 Disons  que  l'on souhaite changer le shell de fred. Vous devrez faire
 la chose suivante:

      usermod -s /bin/tcsh fred

 Maintenant l'entree concernant fred dans le  fichier  /etc/passwd  est
 devenue:

      fred:*:505:100:Fred
      Flintstone:/home/fred:/bin/tcsh

 On change la date d'expiration du compte au 15/09/97:

      usermod -e 09/15/97 fred

 Maintenant  l'entree  concernant  fred dans le fichier /etc/shadow est
 devenue:

 fred:J0C.WDR1amIt6:9559:0:60:0:0:10119:0

 Pour plus d'informations concernant  usermod,  consultez  la  page  de
 manuel en ligne.

 77..11..33..  uusseerrddeell

 userdel  fait  exactement ce que vous voulez, il efface le compte d'un
 utilisateur. Utilisez simplement:

      userdel -r username

 L'option -r implique que tous les  fichiers  du  repertoire  d'accueil
 d'un  utilisateur  seront  effaces.  Les  fichiers situes en dehors du
 repertoire d'accueil devront etre cherches et effaces manuellement.

 Si  vous  souhaitez  simplement  verouiller  un  compte  au  lieu   de
 l'effacer, utilisez la commande passwd.

 77..22..  LLaa ccoommmmaannddee ppaasssswwdd eett llaa dduurreeee dduu mmoott ddee ppaassssee..

 La  commande  passwd a pour but de changer les mots de passe. De plus,
 elle est utilisee par l'utilisateur root pour:

 +o  Verouiller et deverouiller des comptes (-l et -u),

 +o  Definir le nombre de jours de validite d'un mot de passe (-x),

 +o  Definir le nombre de jours minimums pour le changement  de  mot  de
    passe (-n),

 +o  Definir  le  nombre  de jours d'alerte concernant l'expiration d'un
    mot de passe(-w),

 +o  Definir le nombre de jours apres que le mot de  passe  soit  expire
    pour verouiller le compte(-i),

 +o  Permettre  de  voir les informations concernant un utilisateur dans
    un format clair(-S).

 Par exemple, jetons un coup d'oeil a fred:

      passwd -S fred
      fred P 03/04/96 0 60 0 0

 Cela signifie que le mot de passe de fred  est  valide,  qu'il  a  ete
 change  pour  la  derniere  fois le 04/03/96, qu'il peut etre change a
 n'importe quel moment, qu'il expire au bout de 60 jours, que  fred  ne
 sera  pas  averti,  et  que  le  compte  ne sera pas verouille lors de
 l'expiration du mot de passe.

 Cela veut simplement dire que si fred se loge  apres  l'expiration  de
 son  mot  de  passe,  il  lui  sera demande de taper un nouveau mot de
 passe.

 Si nous souhaitons prevenir fred 14 jours avant  l'expiration  de  son
 mot  de  passe, et verouiller son compte 14 jours apres l'avoir laisse
 expire, nous devrions faire la chose suivante:

      passwd -w14 -i14 fred

 Maintenant les informations concernant fred sont changees en:

      fred P 03/04/96 0 60 14 14

 Pour de plus amples informations  concernant  passwd,  se  referer  au
 manuel en ligne.

 77..33..  LLee ffiicchhiieerr llooggiinn..ddeeffss

 Le   fichier  /etc/login.defs  est  le  fichier  de  configuration  du
 programme login ainsi que celui de toute le _S_u_i_t_e _S_h_a_d_o_w.

 Le  fichier  /etc/login.defs  contient  les   parametres   allant   de
 l'apparance  de l'invite a l'expiration par defaut concernant les mots
 de passe utilisateurs.

 Le fichier /etc/login.defs  est  assez  bien  documente  de  part  ses
 propres commentaires. De plus, il y a quelques points a noter:

 +o  Il  contient  des  drapeaux  qui  peuvent  etre active ou desactive
    concernant la taille de journalisation,

 +o  Il contient des pointeurs sur d'autres fichiers de configuration,

 +o  Il contient les valeurs par defaut  comme  la  duree  d'un  mot  de
    passe.

 Des  informations  precedantes on peut en deduire que c'est un fichier
 important, vous devez etre sur qu'il existe et que  les  valeurs  sont
 celles que vous desirez pour votre systeme.

 77..44..  LLeess mmoottss ddee ppaassssee ppoouurr lleess ggrroouuppeess

 Le fichier /etc/groups peut contenir des mots de passe permettant a un
 utilisateur de  devenir  un  membre  d'un  groupe  particulier.  Cette
 fonction  est  validee  si vous validez la constante SHADOWGRP dans le
 fichier /usr/src/shadow-AAMMJJ/config.h.

 Si vous definissez cette constante et que vous  compilez,  vous  devez
 creer  un fichier /etc/gshadow pour stocker les mots de passe pour les
 groupes, ainsi que les  informations  concernant  l'administration  du
 groupe.

 Lorsque  vous  avez  cree le fichier /etc/shadow, vous avez utilise un
 programme appele pwconv, il n'y  a  pas  d'equivalent  pour  creer  le
 fichier /etc/gshadow, mais ce n'est pas grave.

 Pour creer le fichier /etc/gshadow initial, faites la chose suivante:

      touch /etc/gshadow
      chown root.root /etc/gshadow
      chmod 700 /etc/gshadow

 Une  fois  que  vous  creez  un nouveau groupe, il sera ajoute dans le
 fichier /etc/group ainsi que dans le  fichier  /etc/gshadow.  Si  vous
 modifiez  un  groupe  en ajoutant, retirant, ou en changeant le mot de
 passe du groupe, le fichier /etc/gshadow sera change.

 Les programmes groups, groupadd, groupmod, et  groupdel  sont  fournis
 dans la _S_u_i_t_e _S_h_a_d_o_w pour modifier les groupes.

 Le format du fichier /etc/group est:

      groupname:!:GID:member,member,...

 ou:

    ggrroouuppnnaammee
       Le nom du groupe,

    !!  Le  champs  contenant  normalement  le  mot  de  passe  qui  est
       maintenant stocke dans le fichier /etc/gshadow,

    GGIIDD
       L'identificateur numerique du groupe,

    mmeemmbbeerr
       La liste des membres du groupe.

 Le format du fichier /etc/gshadow est:

      groupname:password:admin,admin,...:member,member,...

 ou:

    ggrroouuppnnaammee
       Le nom du groupe,

    ppaasssswwoorrdd
       Le mot de passe encode,

    aaddmmiinn
       La liste des administrateurs de groupe,

    mmeemmbbeerr
       La liste des membres du groupe.

 La  commande  gpasswd  est  utilisee   pour   ajouter,   retirer   des
 administrateurs  et des membres d'un groupe. root ou un administrateur
 du groupe peut ajouter ou retirer des membres du groupe.

 Le mot de passe du groupe peut etre change en utilisant  le  programme
 passwd par root ou un administrateur du groupe.

 En  depit  du  fait  qu'il  n'y  ait pas encore de page de manuel pour
 gpasswd, tapez gpasswd sans  parametres  pour  obtenir  la  liste  des
 options.  C'est  relativement facile de comprendre comment tout marche
 un fois que vous avez compris le format du fichier et les concepts.

 77..55..  PPrrooggrraammmmeess ddee vveerriiffiiccaattiioonn ddee llaa ssttrruuccttuurree

 77..55..11..  ppwwcckk

 Le programme pwck est fourni pour verifier la coherence  des  fichiers
 /etc/passwd  et /etc/shadow. Il verifie chaque nom d'utilisateur ainsi
 que les points suivants:

 +o  Le nombre correct de champs,

 +o  Nom unique,

 +o  Nom et groupe valide,

 +o  Groupe primaire valide,

 +o  Repertoire d'accueil valide,

 +o  Shell valide.

 Il previent aussi lorsqu'un compte ne possede pas de mot de passe.

 C'est une bonne idee de lancer pwck  apres  avoir  installe  la  _S_u_i_t_e
 _S_h_a_d_o_w.  C'est  aussi  une bonne idee de le lancer periodiquement, une
 fois par semaine ou par mois.  Si  vous  utilisez  l'option  -r,  vous
 pouvez  utiliser  cron  pour  lancer une analyse reguliere et avoir un
 rapport sous forme de courrier.

 77..55..22..  ggrrppcckk

 grpck est le programme de verification de la  coherance  des  fichiers
 /etc/group et /etc/gshadow. Il effectue les verifications suivantes:

 +o  Le nombre correct de champs,

 +o  Unicite du nom de groupe,

 +o  Validite de la liste des membres et des administrateurs.

 Il possede aussi l'option -r pour des rapports automatiques.

 77..66..  LLeess mmoottss ddee ppaassssee ""AAcccceess aa ddiissttaannccee""

 Les  mots  de passe "Acces a distance" sont une autre ligne de defense
 des systemes permettant la connexion  a  distance.  Si  vous  avez  un
 systeme  qui  permet  a des utilisateurs de se connecter localement ou
 par l'intermediaire d'un reseau, mais vous voulez controler  qui  peut
 appeler  et  se  connecter,  les mots de passe "Acces a distance" sont
 pour vous. Pour valider les mots de passe  "Acces  a  distance",  vous
 devez   editer   le   fichier  /etc/login.defs  et  vous  assurer  que
 DIALUPS_CHECK_ENAB est positionnee a yes.

 Les deux fichiers contenant les informations d'acces a  distance  sont
 /etc/dialups  et  /etc/d_passwd.  Le fichier /etc/dialups contient les
 terminaux (un par  ligne,  avec  l'entete  "/dev/"  supprime).  Si  un
 terminal  est  liste  alors,  la  verification  d'acces a distance est
 effectuee;.

 Le second fichier /etc/d_passwd contient le chemin complet d'un shell,
 suivit d'un mot de passe optionnel.

 Si  un  utilisateur se connecte a un terminal decrit dans une ligne du
 fichier /etc/dialup et  que  son  shell  est  liste  dans  le  fichier
 /etc/d_passwd  alors l'acces lui est autorise en fournissant le mot de
 passe correct.

 Une autre possibilite utile des mots de passe "Acces a  distance"  est
 de  specifier  un  ligne qui ne permet qu'un certain type de connexion
 (PPP, ou UUCP par exemple). Si un utilisateur essaye d'avoir un  autre
 type  de connexion, (ie. une liste de shell), il doit connaitre un mot
 de passe pour l'utiliser.

 Avant de pouvoir utiliser les possibilites de l'acces a distance, vous
 devez creer les fichiers.

 La  commande  dpaswd  est  fournie  pour assigner un mot de passe a un
 shell dans le fichier d_passwd. Lisez le manuel en ligne pour de  plus
 amples informations.

 88..  AAjjoouutteerr llee ssuuppppoorrtt sshhaaddooww aa uunn pprrooggrraammmmee eenn CC..

 Ajouter  le  support shadow a un programme C est assez facile. Le seul
 probleme est que le programme doit etre lance par root (ou SUID  root)
 pour qu'il puisse acceder au fichier /etc/shadow.

 Ceci  presente  un reel probleme, il faut faire tres attention lors de
 la creation de programmes SUID. Par exemple,  il  ne  faut  pas  qu'un
 programme SUID root puisse permettre un acces au shell.

 La  meilleure solution pour qu'un programme puisse acceder aux mots de
 passe encodes sans etre SUID root, est de  lancer  ce  programme  SUID
 shadow a la place. C'est le cas par exemple du programme xlock.

 Dans  l'exemple  donne  precedemment, pppd-1.2.1d fonctionne deja SUID
 root, donc ajouter le support shadow ne le rendra pas plus vulnerable.

 88..11..  LLeess ffiicchhiieerrss dd''eenn--tteettee

 Les  fichiers  d'en-tete  doivent  etre  stockes  dans  le  repertoire
 /usr/include/shadow. Le fichier /usr/include/shadow.h,  doit  etre  un
 lien symbolique vers /usr/include/shadow/shadow.h.

 Pour  ajouter le support shadow a un programme, vous devez inclure les
 fichiers de header:

 #include <shadow/shadow.h>
 #include <shadow/pwauth.h>

 La meilleure solution est d'utiliser  des  directives  de  compilation
 pour  compiler conditionnellement le code shadow (Il y aura un exemple
 par la suite).

 88..22..  LLaa bbiibblliiootthheeqquuee lliibbsshhaaddooww..aa

 Quand vous avez installe _l_'_e_n_s_e_m_b_l_e _s_h_a_d_o_w, le fichier  libshadow.a  a
 ete cree et installe dans le repertoire /usr/lib.

 Lorsque  vous compilez un programme avec le support shadow, vous devez
 preciser a l'editeur de liens d'inclure  la  bibliotheque  libshadow.a
 dans le lien:

      gcc programe.c -o program -lshadow

 Ceci  dit,  et  vous  le  verrez  par  la suite dans notre exemple, la
 plupart des  programmes  plus  ou  moins  gros  utilisent  un  fichier
 Makefile,  qui  en  general, utilise une variable appelee LIBS=... que
 vous pourrez modifier.

 88..33..  LLaa ssttrruuccttuurree sshhaaddooww

 La bibliotheque libshadow.a utilise une structure  appelee  spwd  pour
 recuperer  les  informations  contenues  dans  le fichier /etc/shadow.
 Voici   la   definition   de   la   structure   spwd   provenant    de
 /usr/include/shadow/shadow.h:

 ______________________________________________________________________
 struct spwd
 {
   char *sp_namp;         /* nom de login */
   char *sp_pwdp;         /* mot de passe encode */
   sptime sp_lstchg;      /* date de la derniere modification */
   sptime sp_min;         /* nombre de jours minimum entre les modifs */
   sptime spmax;          /* nombre de jours maximum entre les modifs*/
   sptime sp_warn;        /* nombre de jours de warning avant l'expiration
                             du mot de passe */
   sptime sp_inact;       /* nombre de jours d'utilisation du compte
                             apres l'expiration. */
   sptime sp_expire;      /* nombre de jours a partir du 01/01/70 jusqu'a
                                l'expiration du compte */
   unsigned long sp_flag; /* reserve pour une utilisation future */
 };
 ______________________________________________________________________

 L'_e_n_s_e_m_b_l_e  _s_h_a_d_o_w peut placer des donnees dans le champ sp_pwdp juste
 apres le mot de passe encode, le champ password pourrait contenir:

      username:Npge08pfz4wuk;@/sbin/extra:9479:0:10000::::

 Cela signifie qu'en plus du mot de  passe,  le  programme  /sbin/extra
 sera  appele  pour  proceder a une authentification supplementaire. Le
 programme appele recevra comme argument, le nom  d'utilisateur  et  un
 _s_w_i_t_c_h  qui  indiquera  pourquoi  il  est  appele. Regardez le fichier
 /usr/include/shadow/pwauth.h et le code source de pwauth.c  pour  plus
 d'informations.

 La  fonction  d'authentification pwauth est toujours utilisee avant la
 deuxieme authentification..

 88..44..  LLeess ffoonnccttiioonnss SShhaaddooww..

 Le fichier  shadow.h  contient  aussi  la  declaration  des  fonctions
 contenues dans la bibliotheque libshadow.a:

 ______________________________________________________________________
 extern void setspent __P ((void));
 extern void endspent __P ((void));
 extern struct spwd *sgetspent __P ((__const char *__string));
 extern struct spwd *fgetspent __P ((FILE *__fp));
 extern struct spwd *getspent __P ((void));
 extern struct spwd *getspnam __P ((__const char *__name));
 extern int putspent __P ((__const struct spwd *__sp, FILE *__fp));
 ______________________________________________________________________

 La  fonction  que  nous allons etudier est getspnam, elle recupere une
 structure spwd a partir d'un nom donne.

 88..55..  EExxeemmppllee

 Voici un exemple d'ajout du support  shadow  a  un  programme  qui  en
 necessite mais pour qui ce support n'existe pas par defaut.

 Nous  allons nous baser sur l'exemple du serveur pppd-1.2.1d ( _S_e_r_v_e_u_r
 _P_o_i_n_t_-_t_o_-_P_o_i_n_t _p_r_o_t_o_c_o_l) configure avec l'option _l_o_g_i_n: il va chercher
 les  mots  de  passe  pour  son  authentification  PAP dans le fichier
 /etc/passwd au lieu des fichiers PAP ou CHAP. Vous n'avez  pas  besoin
 d'ajouter ce code a pppd-2.2.0, c'est deja fait.

 Bien  que cette possibilite de pppd ne soit pas tres utilisee, elle ne
 fonctionnera plus des lors que vous aurez installe l'ensemble  shadow:
 les mots de passe ne sont plus stockes dans /etc/passwd.

 La  partie  du  code  source  d'authentification des utilisateurs avec
 pppd-1.2.1d        se       trouve       dans        le        fichier
 /usr/src/pppd-1.2.1d/pppd/auth.c.

 Le  code  qui  suit  doit  etre ajoute au debut du fichier, la ou sont
 toutes les autres directives #include.

 ______________________________________________________________________
 #ifdef HAS_SHADOW
 #include <shadow.h>
 #include <shadow/pwauth.h>
 #endif
 ______________________________________________________________________

 Maintenant, il faut modifier le code actuel. Nous sommes toujours avec
 le fichier auth.c.

 La fonction auth.c avant les modifications:

 ______________________________________________________________________
 /*
  * login - Controle le nom d'utilisateur et le mot de passe par rapport
  * a ceux stockes sur le systeme.
  * Accepte la connection si l'utilisateur est OK.
  *
  * retourne:
  *      UPAP_AUTHNAK: Connection refusee.
  *      UPAP_AUTHACK: Connection Acceptee.
  * Dans un cas comme dans l'autre, msg pointe sur le message approprie.
  */
 static int
 login(user, passwd, msg, msglen)
     char *user;
     char *passwd;
     char **msg;
     int *msglen;
 {
     struct passwd *pw;
     char *epasswd;
     char *tty;

     if ((pw = getpwnam(user)) == NULL) {
         return (UPAP_AUTHNAK);
     }
      /*
      * XXX Si il n'y a pas de mots de passe, accepte la connection.
      */
     if (pw->pw_passwd == '\0') {
         return (UPAP_AUTHACK);
     }

     epasswd = crypt(passwd, pw->pw_passwd);
     if (strcmp(epasswd, pw->pw_passwd)) {
         return (UPAP_AUTHNAK);
     }

     syslog(LOG_INFO, "user %s logged in", user);

     /*
      * Ecris une entree wtmp pour cet utilisateur.
      */
     tty = strrchr(devname, '/');
     if (tty == NULL)
         tty = devname;
     else
         tty++;
     logwtmp(tty, user, "");    /* Ajoute une entree wtmp de connection */
     logged_in = TRUE;

     return (UPAP_AUTHACK);
 }
 ______________________________________________________________________

 Le  mot  de passe de l'utilisateur est place dans pw->pw_passwd, donc,
 nous devons ajouter la fonction getspnam qui placera le mot  de  passe
 dans spwd->sp_pwdp.

 Nous  rajouterons la fonction pwauth pour l'authentification actuelle.
 Une seconde authentification sera effectuee si le fichier  shadow  est
 configure pour.

 Voici  la  fonction  auth.c apres les modifications pour le support de
 shadow:

 ______________________________________________________________________
 /*
  * login - Controle le nom d'utilisateur et le mot de passe par rapport
  * a ceux stockes sur le systeme.
  * Accepte la connection si l'utilisateur est OK.
  *
  * Cette fonction a ete modifiee pour etre compatible avec les mots de
  * passe Shadow Linux si USE_SHADOW a ete defini
  *
  * retourne:
  *      UPAP_AUTHNAK: Connection refusee.
  *      UPAP_AUTHACK: Connection Acceptee.
  * Dans un cas comme dans l'autre, msg pointe sur le message approprie.
  */

 static int
 login(user, passwd, msg, msglen)
     char *user;
     char *passwd;
     char **msg;
     int *msglen;
 {
     struct passwd *pw;
     char *epasswd;
     char *tty;

 #ifdef USE_SHADOW
     struct spwd *spwd;
     struct spwd *getspnam();
 #endif

     if ((pw = getpwnam(user)) == NULL) {
         return (UPAP_AUTHNAK);
     }

 #ifdef USE_SHADOW
     if ((spwd = getspnam(user)) == NULL) {
            pw->pw_passwd = "";
     } else {
     pw->pw_passwd = spwd->sp_pwdp;
     }
 #endif

      /*
      *  XXX Si il n'y a pas de mots de passe, accepte la connection.
      */
     if (pw->pw_passwd == '\0') {
         return (UPAP_AUTHNAK);
     }
 #ifdef HAS_SHADOW
     if ((pw->pw_passwd && pw->pw_passwd[0] == '@'
          && pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL))
         || !valid (passwd, pw)) {
         return (UPAP_AUTHNAK);
     }
 #else
     epasswd = crypt(passwd, pw->pw_passwd);
     if (strcmp(epasswd, pw->pw_passwd)) {
         return (UPAP_AUTHNAK);
     }
 #endif

     syslog(LOG_INFO, "user %s logged in", user);

     /*
      * Ecris une entree wtmp pour cet utilisateur.
      */
     tty = strrchr(devname, '/');
     if (tty == NULL)
         tty = devname;
     else
         tty++;
     logwtmp(tty, user, "");     /* Ajoute une entree wtmp de connection  */
     logged_in = TRUE;

     return (UPAP_AUTHACK);
 }
 ______________________________________________________________________

 En  examinant  precisement  le  code,   vous   verrez   que   d'autres
 modifications  ont  ete  effectuees.  La  version originale autorisait
 l'acces (en retournant UPAP_AUTHACK) quand il n'y avait pas de mots de
 passe  dans  le  fichier  passwd.  Il  ne fallait _p_a_s laisser ceci car
 utilise avec l'option login, pppd utilise le  nom  d'utilisateur  dans
 /etc/passwd   et   le   mot   de   passe  dans  /etc/shadow  pour  son
 authentification PAP.

 Donc si nous avions garde la version originale, n'importe  qui  aurait
 pu etablir une connexion ppp avec un mot de passe vide.

 Nous  avons  arrange  ca  en  retournant  UPAP_AUTHNAK  a  la place de
 UPAP_AUTHACK dans le cap ou le champ mot de passe est vide.

 A savoir que pppd-2.2.0 possede le meme probleme.

 Nous devons modifier le Makefile pour que deux choses soient prises en
 compte:  USE_SHADOW  doit etre defini, et libshadow.a doit etre ajoute
 au processus d'edition de liens.

 Editez le Makefile, et ajoutez:

      LIBS = -shadow

 Alors, trouvez la ligne:

      COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t

 et replacez-la par:

      COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t -DUSE_SHADOW

 Maintenant, lancez make et installez.

 99..  FFooiirree AAuuxx QQuueessttiioonnss

 _Q_: J'essaye de controler sur quel terminal root peut se  connecter  en
 utilisant  /etc/securettys,  mais  il semble que cela ne marcher plus.
 Qu'arrive-t-il ?

 _R_: Les fichier /etc/securettys ne  fait  absolument  rien  lorsque  la
 _S_u_i_t_e  _S_h_a_d_o_w  est installee. Le terminal a partir duquel root peut se
 connecter  et  maintenant  situe  dans  le  fichier   /etc/login.defs.
 L'entree dans ce fichier peut pointer sur un autre fichier.

 _Q_:  J'ai  installe la _S_u_i_t_e _S_h_a_d_o_w, mais je ne peux plus me connecter,
 qu'ai-je oublie ?

 _R_: Vous avez probablement installe les programmes,  mais  vous  n'avez
 tres  certainement  pas  execute  pwconv  ou  bien vous avez oublie de
 copier le fichier /etc/npasswd vers le fichier /etc/passwd  ainsi  que
 le  fichier  /etc/nshadow  vers  le  fichier /etc/shadow. De plus vous
 aurez besoin de placer le fichier login.defs dans le repertoire /etc/.

 _Q_:  Dans  la  section  sur  xlock, il est dit de positionner le groupe
 propietaire du fichier /etc/shadow a shadow. Je  n'ai  pas  de  groupe
 shadow, comment je fais ?

 _R_:  Vous pouvez en ajouter un. Editez simplement le fichier /etc/group
 et inserez une ligne pour le groupe shadow. Vous  devez  vous  assurer
 que le numero du groupe n'est pas deja utilise par un autre groupe, de
 plus vous devez l'inserer avant l'entree nogroup. Ou bien vous  pouvez
 positionner le bit suid du programme xlock a root.

 _Q_:  Y-a-t'il  une  liste de diffusion pour la suite Shadow password de
 Linux ?

 _R_: Oui, mais c'est  pour  le  developpement  et  les  tests  des  beta
 versions  de  la prochaine Suite Shadow pour Linux. Vous pouvez vous y
 inscrire    en    envoyant     un     courrier     a:     shadow-list-
 [email protected]  avec  pour  sujet  subscribe.  La  liste  est
 actuellement en cours de discussion a propos des parutions des  series
 shadow-AAMMJJ.  Vous  devriez  vous  inscrire  si  vous souhaitez vous
 investir dans le developpement ou bien si vous  venez  d'installer  la
 suite  sur  votre systeme et que vous souhaitez vous tenir informe des
 nouvelles parutions.

 _Q_: J'ai installe la _S_u_i_t_e _S_h_a_d_o_w, mais lorsque j'utilise  la  commande
 userdel,  j'obtiens,  ``_u_s_e_r_d_e_l_:  _c_a_n_n_o_t  _o_p_e_n  _s_h_a_d_o_w  _g_r_o_u_p  _f_i_l_e_'_',
 qu'est-ce que j'ai fait de travers ?

 _R_: Vous avez compile la suite avec l'option SHADOWGRP de valide,  mais
 vous  ne  possedez  pas  de  fichier  /etc/gshadow.  Vous  avez besoin
 d'editer le fichier config.h et de recompiler la suite. Allez voir  la
 section sur les groupes shadow.

 _Q_:  J'ai  installe  la  _S_u_i_t_e _S_h_a_d_o_w mais je retrouve des mot de passe
 encodes dans mon fichier /etc/passwd, qu'est-ce qui ne va pas ?

 _R_: Soit vous avez compile la suite avec l'option AUTOSHADOW du fichier
 config.h,  soit votre libc a ete compilee avec l'option SHADOW_COMPAT.
 Vous devez determiner quel est votre probleme et recompilez.

 1100..  CCooppyyrriigghhtt..

 La version originale de ce document est placee sous copyright (c) 1996
 de Michael H. Jackson.

 Ce  document  peut  etre reproduit et distribue en tout ou partie, sur
 tout support physique ou electronique, a condition  que  cette  notice
 soit incluse dans chacune des copies.

 Il  est  permis  de  copier et distribuer des versions modifiees de ce
 document dans les conditions ci-dessus.  Une  notice  doit  apparaitre
 specifiant bien qu'il s'agit d'une version modifiee.

 Il  est  permis  de  copier  et distribuer des versions traduites dans
 d'autres langues, dans les conditions generales citees precedemment.

 Il est permis de diffuser ce document sous un autre support selon  les
 clauses  stipulees  plus  haut  concernant  les  versions modifiees du
 document, et sous reserve que celle  specifiant  la  disponibilite  du
 code source soit remplie sous la forme d'une reference evidente sur ce
 code dans ce nouveau support. Le proprietaire du copyright se  reserve
 le  droit  de  trancher  lorsqu'il  y  a  le  moindre  doute sur cette
 definition "d'evidence".

 1111..  DDiivveerrss eett RReemmeerrcciieemmeennttss

 Les exemples  de  code  pour  auth.c  proviennent  de  pppd-1.2.1d  et
 ppp-2.1.0e,  Copyright  (c) 1993 de l'Universite Nationale D'Australie
 et Copyright (c) 1989 de Universite Carnegie Mellon.

 Merci a Marek Michalkiewicz  <[email protected]>  pour
 ecrire  et  maintenir  la  _S_u_i_t_e  _S_h_a_d_o_w _p_o_u_r _L_i_n_u_x ainsi que pour ses
 commentaires sur ce document.

 Merci a Ron Tidd <[email protected]> pour  sa  precieuse  aide  et  ses
 tests.

 Merci  a  tous  ceux  qui m'ont envoye des commentaires qui ont permis
 d'ameliorer ce document.

 S'il vous plait, si vous avez des  suggestions  ou  des  commentaires,
 envoyez-moi un courrier.

 amities

 Mickael H. Jackson <[email protected]>