  Linux Shadow Password HOWTO, Version francaise
  Michael H. Jackson, mhjack@tscnet.com
   _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.

  11..  IInnttrroodduuccttiioonn

  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.

  11..11..  NNoottee dduu ttrraadduucctteeuurr

  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.

  11..22..  CChhaannggeemmeennttss ppaarr rraappppoorrtt aauuxx vveerrssiioonnss pprreecceeddeenntteess

  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

  11..33..  NNoouuvveelllleess vveerrssiioonnss ddee ccee ddooccuummeenntt::

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

  +o  Version Originale: ssuunnssiittee..uunncc..eedduu

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

  ou:

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

  +o  Version Francaise: ffttpp..lliipp66..ffrr

     /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, <mhjack@tscnet.com>. Il sera aussi poste dans le
  newsgroup: comp.os.linux.answers

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

  11..44..  CCoommmmeennttaaiirreess oouu ssuuggggeessttiioonnss..

  Merci de m'envoyer  tout  commentaire,  mise  a  jour  ou  suggestion:
  Michael  H.  Jackson  <mhjack@tscnet.com>.   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.

  22..  PPoouurrqquuooii uuttiilliisseerr llee ssyysstteemmee ddee mmoottss ddee ppaassssee SShhaaddooww??

  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. LLiinnuuxx 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
  <marekm@il7linuxb.ists.pwr.wroc.pl> 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/>

  22..11..  PPaasssswwoorrdd PPoouurrqquuooii  nnee  ddeevvrriieezz--vvoouuss  ppaass  iinnssttaalllleerr  llee  ssyysstteemmee
  SShhaaddooww

  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.

  22..22..  FFoorrmmaatt dduu ffiicchhiieerr //eettcc//ppaasssswwdd

  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:

     uusseerrnnaammee
        Le nom de l'utilisateur (login)

     ppaasssswwdd
        Le mot de passe encode

     UUIIDD
        Identificatuer de l'utilisateur: user ID

     GGIIDD
        Identificatuer du groupe: group ID

     ffuullll__nnaammee
        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

     ddiirreeccttoorryy
        Repertoire personnel de l'utilisateur

     sshheellll
        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.

  22..33..  FFoorrmmaatt dduu ffiicchhiieerr //eettcc//sshhaaddooww

  Le fichier /etc/shadow contient les informations suivantes:

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

  En detail:

     uusseerrnnaammee
        Le Nom de l'Utilisateur

     ppaasssswwdd
        Le mot de passe encode

     llaasstt
        Date de la derniere modification (en nombre de jours  depuis  le
        1er janvier 1970).

     mmaayy
        Nombre de jours avant que le mot de passe puisse etre modifie

     mmuusstt
        Nombre de jours avant que le mot de passe doive etre modifie

     wwaarrnn
        Nombre  de  jours  durant  lesquels l'utilisateur est prevenu de
        l'expiration de son mot de passe.

     eexxppiirree
        Nombre de jours  entre  l'expiration  du  mot  de  passe  et  la
        fermeture du compte.

     ddiissaabbllee
        Date de la fermeture du compte (en nombre de jours depuis le 1er
        janvier 1970).

     rreesseerrvveedd
        Champ reserve

  Donc, l'exemple precedent devrait etre:

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

  22..44..  AAppeerrccuu ddee llaa ffoonnccttiioonn ccrryypptt((33))

  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.

  AAtttteennttiioonn:: Une cle de 56 bits correspond a: 2^56 donc  7.3e16  valeurs
  possibles.  Les recherches exhaustives ssoonntt ppoossssiibblleess 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 <schneir@chinet.com>
          ISBN: 0-471-59756-2

  33..  SSee pprrooccuurreerr llee ppaaqquueettaaggee SShhaaddooww..

  33..11..  HHiissttoorriiqquuee dduu ppaaqquueettaaggee SShhaaddooww ppoouurr LLiinnuuxx??

  _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 (flla@stud.uni-sb.de) 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  <magnus@texas.net>  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>

  33..22..  OOuu ttrroouuvveerr llaa SSuuiittee SShhaaddooww

  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
  <marekm@il7linuxb.ists.pwr.wroc.pl>. 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.

  33..33..  CCee qquuii eesstt iinncclluuss ddaannss llee ppaaqquueettaaggee SShhaaddooww

  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.

  44..  CCoommppiilleerr lleess pprrooggrraammmmeess..

  44..11..  EExxttrraaiirree ll''aarrcchhiivvee

  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

  44..22..  CCoonnffiigguurreerr llee ffiicchhiieerr ccoonnffiigg..hh

  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.

  44..33..  FFaaiirree uunnee ccooppiiee ddee ssaauuvveeggaarrddee ddee vvooss pprrooggrraammmmeess oorriiggiinnaauuxx..

  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.

  44..44..  LLaanncceerr mmaakkee

  _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.

  55..  IInnssttaalllleerr

  55..11..  AAyyeezz uunnee ddiissqquueettttee ddee bboooott aa ppoorrtteeee ddee mmaaiinn

  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.

  55..22..  SSuupppprriimmeerr lleess ppaaggeess ddee mmaannuueell eenn ddoouubbllee

  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.

  55..33..  LLaanncceerr mmaakkee iinnssttaallll

  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).

  55..44..  LLaanncceerr ppwwccoonnvv

  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.

  55..55..  RReennoommmmeerr nnppaasssswwdd eett nnsshhaaddooww

  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.

  66..  LLeess aauuttrreess pprrooggrraammmmeess aa mmeettttrree aa jjoouurr

  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).

  66..11..  llee pprrooggrraammmmee AAdddduusseerr ((SSllaacckkwwaarree))

  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

  66..22..  LLee sseerrvveeuurr wwuu__ffttppdd

  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.

  66..33..  ffttppdd ssttaannddaarrdd

  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>

  66..44..  ppoopp33dd ((PPoosstt OOffffiiccee PPrroottooccooll 33))

  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.

  66..55..  xxlloocckk

  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.

  66..66..  xxddmm

  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.

  66..77..  ssuuddoo

  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

  66..88..  iimmaappdd ((ppaaqquueettaaggee EEmmaaiill ppiinnee))

  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.

  66..99..  ppppppdd ((SSeerrvveeuurr PPooiinntt--ttoo--PPooiinntt pprroottooccooll))

  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.

  77..  FFaaiirree eenn ssoorrttee qquuee llaa ssuuiittee sshhaaddooww ffoonnccttiioonnnnee

  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.

  77..11..  AAjjoouutteerr,, mmooddiiffiieerr,, eett ssuupppprriimmeerr ddeess uuttiilliissaatteeuurrss..

  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.

  77..11..11..  uusseerraadddd

  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 <mhjack@tscnet.com> 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.

  77..11..22..  uusseerrmmoodd

  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.

  77..11..33..  uusseerrddeell

  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.

  77..22..  LLaa ccoommmmaannddee ppaasssswwdd eett llaa dduurreeee dduu mmoott ddee ppaassssee..

  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.

  77..33..  LLee ffiicchhiieerr llooggiinn..ddeeffss

  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.

  77..44..  LLeess mmoottss ddee ppaassssee ppoouurr lleess ggrroouuppeess

  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:

     ggrroouuppnnaammee
        Le nom du groupe,

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

     GGIIDD
        L'identificateur numerique du groupe,

     mmeemmbbeerr
        La liste des membres du groupe.

  Le format du fichier /etc/gshadow est:

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

  ou:

     ggrroouuppnnaammee
        Le nom du groupe,

     ppaasssswwoorrdd
        Le mot de passe encode,

     aaddmmiinn
        La liste des administrateurs de groupe,

     mmeemmbbeerr
        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.

  77..55..  PPrrooggrraammmmeess ddee vveerriiffiiccaattiioonn ddee llaa ssttrruuccttuurree

  77..55..11..  ppwwcckk

  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.

  77..55..22..  ggrrppcckk

  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.

  77..66..  LLeess mmoottss ddee ppaassssee ""AAcccceess aa ddiissttaannccee""

  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.

  88..  AAjjoouutteerr llee ssuuppppoorrtt sshhaaddooww aa uunn pprrooggrraammmmee eenn CC..

  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.

  88..11..  LLeess ffiicchhiieerrss dd''eenn--tteettee

  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).

  88..22..  LLaa bbiibblliiootthheeqquuee lliibbsshhaaddooww..aa

  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.

  88..33..  LLaa ssttrruuccttuurree sshhaaddooww

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

  88..44..  LLeess ffoonnccttiioonnss SShhaaddooww..

  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.

  88..55..  EExxeemmppllee

  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.

  99..  FFooiirree AAuuxx QQuueessttiioonnss

  _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-
  request@neptune.cin.net  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.

  1100..  CCooppyyrriigghhtt..

  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".

  1111..  DDiivveerrss eett RReemmeerrcciieemmeennttss

  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  <marekm@il7linuxb.ists.pwr.wroc.pl>  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 <rtidd@tscnet.com> 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 <mhjack@tscnet.com>

