Linux Shadow Password HOWTO, Version fran�aise

Michael H. Jackson, [email protected]
Traduction fran�aise : Igor Genibel ([email protected]) .

v1.3, 3 Avril 1996
Ce document d�crit comment obtenir, installer et configurer l'ensemble Shadow Password sous Linux. Il prend aussi en compte l'adaptation des autres logiciels et d�mons r�seau acc�dant habituellement aux mots de passe des utilisateurs. Bien qu'ils ne fassent pas parti du paquetage, ces programmes ne fonctionnerons plus correctement apr�s son installation. Ce document contient en plus un exemple de code pour mettre � jour vos applications pour qu'elles supportent le syst�me de mots de passe cach�s. Des r�ponses � des questions fr�quemment pos�es sont fournies en fin de document.

1. Introduction

Ceci est le Shadow password HOWTO pour linux. Ce document d�crit comment configurer votre syst�me linux pour utiliser le syst�me des mots de passe cach�s. Quelques exemples d'utilisation concernant certaines caract�ristiques de la suite Shadow (Note: ce terme n'est volontairement pas traduit afin de ne pas alourdir la compr�hension du document) sont aussi inclus.

Lorsque vous installerez le paquetage des mots de passe cach�s et lorsque vous vous servirez des utilitaires, vous devrez �tre log� root. Lorsque vous installerez le paquetage, vous devrez effectuer certains changements sur des utlitaires syst�mes, il est donc tr�s fortement recommend� de faire des copies de sauvegarde de programmes indiqu�s. Je vous recommande aussi de lire et de comprendre toutes les instructions avant de commencer.

1.1 Note du traducteur

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

1.2 Changements par rapport aux versions pr�c�dentes

Ajouts:

Corrections/Mise � jour:

1.3 Nouvelles versions de ce document:

La derni�re version de ce document pourra toujours �tre r�cup�r�e via FTP anonyme sur:

Ou bien par le World Wide Web: Linux Documentation Project Web Server, � la page: SHADOW-HOWTO sinon directement par moi, <[email protected]>. Il sera aussi post� dans le newsgroup: comp.os.linux.answers

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

1.4 Commentaires ou suggestions.

Merci de m'envoyer tout commentaire, mise � jour ou suggestion: Michael H. Jackson <[email protected]>. Plus vite je re�ois vos commentaires, plus vite je mets � jour ce document. Si vous avez des probl�mes, merci de m'�crire directement, je suis tr�s rarement � jour avec les newsgroups.

2. Pourquoi utiliser le syst�me de mots de passe Shadow?

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'�tait pas clair sur les droits de distribution. Linux utilise la licence GNU (quelques fois r�f�renc�e sous le nom de Copyleft) qui permet � 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 Suite Shadow, Marek Michalkiewicz <[email protected]> a re�u les sources de l'auteur originel sour un copyright style BSD permettant la redistribution. Maintenant que le probl�me de la distribution est r�solu, il est probable que les prochaines distributions contiendront les shadow password par d�faut. En attendant vous devrez l'installer vous-m�me.

Si vous avez install� votre distribution depuis un CD-ROM, vous pouvez trouver que, dans la mesure o� la distribution n'a pas la suite shadow d'install�e, quelques fichiers dont vous avez besoin pour installer la suite shadow peuvent se situer sur le CD-ROM.

Cependant, la suite shadow 3.3.1, 3.3.1-2 et shadow-mk poss�dent toutes un probl�me de s�curit� avec leur programme de login ainsi qu'avec d'autres programmes poss�dant le droit setuid root. En cons�quence, elle ne doivent pas �tre utilis�s plus longtemps.

Tous les fichiers n�cessaires peuvent �tre r�cup�r�s via ftp anonyme ou via le World Wide Web.

Sur un syst�me linux sans l'ensemble Shadow install�, les informations sur l'utilisateur, et en particulier le mot de passe sont stock�es dans le fichier /etc/passwd. Le mot de passe est enregistr� dans un format encrypt�. Si vous demandez � un expert en cryptographie, il (ou elle) vous r�pondra que le mot de passe n'est pas encrypt� mais encod�. En fait, lors de l'utilisation de crypt(3), le mot de passe est consid�r� comme la cl� pour encoder un texte de valeur nulle. C'est la raison pour laquelle � partir de maintenant, j'utiliserai le terme encod�.

L'algorithme utilis� pour encoder le mot de passe fonctionne � sens unique, c'est-�-dire qu'il est tr�s difficile � partir du mot de passe encod� de retrouver l'original. Vous trouverez plus d'informations � propos de l'algorithme utilis� dans la section sec-crypt les pages de manuel de crypt(3).

Lorsqu'un utilisateur d�finit un mot de passe, il est encod� avec une valeur al�atoire appel�e sel (Note : salt en Anglais). C'est-�-dire qu'un m�me mot de passe pourrait �tre enregistr� de 4096 fa�ons diff�rentes. La valeur du sel est alors enregistr�e avec le mot de passe d�sormais encod�.

Lorsqu'un utilisateur se connecte et saisit son mot de passe, le sel est tout d'abord retrouv� � partir du mot de passe encod�. Alors, le mot de passe entr� est encod� avec le sel pr�c�demment retrouv�.

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

Mais le pirate de syst�me sait tout cela, et va simplement encoder un dictionnaire de mots de passe usuels en utilisant les 4096 possibilit�s de sel. Il va alors comparer les mots de passe encod�s dans le fichier /etc/passwd par sa propre base de donn�e. Quand il aura trouv� une �quivalence, il aura le mot de passe d'un compte. Cela s'appelle une attaque au dictionnaire, et c'est une des m�thodes les plus courantes pour acc�der � un syst�me sans autorisation.

En y r�fl�chissant, � un seul mot de passe de 8 caract�res correspond 4096 mots de passes encod�s de 13 caract�res (c'est � 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.

M�me sans avoir beaucoup d'espace disque, des utilitaires comme crack(1) peuvent en g�n�ral casser pas mal de mots de passe sur un syst�me contenant suffisamment d'utilisateurs. (En consid�rant que les utilisateurs du syst�me sont autoris�s � 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 utilis�s par de nombreux programmes. C'est pour cela que le fichier passwd doit �tre lisible par tout le monde. Si vous changiez les permissions de /etc/passwd de telle sorte que plus personne ne puisse le lire, la premi�re chose que vous pourriez constater, c'est que la commande ls -l affiche d�sormais le user ID au lieu du nom !

Le kit Shadow r�sout ce probl�me en d�pla�ant les mots de passe encod�s vers un autre fichier (en g�n�ral /etc/shadow). Il n'y a que le root qui a les permissions de lecture et d'�criture sur le fichier shadow. Quelques programmes (comme xlock) n�cessitent que le groupe shadow puisse lire et �crire dans le fichier /etc/shadow. Il est pr�f�rable que les programmes qui ont juste besoin de lire et v�rifier le mot de passe soient lanc�s SGID shadow plutôt que SGID root.

En d�pla�ant les mots de passe vers le fichier /etc/shadow, nous �cartons effectivement au pirate la possibilit� d'avoir acc�s aux mots de passe encod�s avec lesquels ils auraient pu faire une attaque au dictionnaire.

De plus, le kit shadow propose de nouvelles possibilit�s int�ressantes:

Installer l'ensemble shadow, c'est contribuer � la s�curit� de votre syst�me, mais il y a bien d'autre choses � faire pour s�curiser votre syst�me. Il y aura probablement une s�rie de HOWTO discutant de la s�curit� et des m�thodes de s�curisation.

Pour le moment, pour avoir des informations sur la s�curit� et linux, incluant les vuln�rabilit�s connues du syst�me, allez voir la: Linux Security home page.

2.1 Pourquoi ne devriez-vous pas installer le syst�me Shadow Password

Il y a quelques circonstances et quelques configurations qui font qu'installer la Suite Shadow n'est pas une bonne id�e:

2.2 Format du fichier /etc/passwd

Sur un syst�me ne poss�dant pas la suite Shadow, voici le format du fichier /etc/passwd

username:passwd:UID:GID:full_name:directory:shell
En d�tail:
username

Le nom de l'utilisateur (login)

passwd

Le mot de passe encod�

UID

Identificatuer de l'utilisateur: user ID

GID

Identificatuer du groupe: group ID

full_name

Le nom complet de l'utilisateur (Pr�nom Nom) - Ce champ est appel� le champ GECOS (General Electric Comprehensive Operating System) et peut �ventuellement contenir d'autres informations

directory

R�pertoire personnel de l'utilisateur

shell

Shell par d�faut de l'utilisateur

Par exemple:
username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh
Np est le sel et ge08pfz4wuk est le mot de passe encod�. Pour le m�me mot de passe, son �quivalent encod� aurait tout aussi bien pu �tre kbeMVnZM0oL7I. Il y a 4096 possibilit�s d'encodage pour le m�me mot de passe. (Le mot de passe de cet exemple est 'password', un tr�s mauvais mot de passe).

Une fois l'ensemble shadow install�, voil� � 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 encod�. Mis � part �a, le format du fichier /etc/passwd reste en fait inchang�. Ceci permet � tous les programmes qui lisent le fichier /etc/passwd sans avoir besoin d'acc�der aux mots de passe de fonctionner correctement.

Les mots de passes encod�s sont d�sormais dans le fichier /etc/shadow.

2.3 Format du fichier /etc/shadow

Le fichier /etc/shadow contient les informations suivantes:

username:passwd:last:may:must:warn:expire:disable:reserved
En d�tail:
username

Le Nom de l'Utilisateur

passwd

Le mot de passe encod�

last

Date de la derni�re modification (en nombre de jours depuis le 1er janvier 1970).

may

Nombre de jours avant que le mot de passe puisse �tre modifi�

must

Nombre de jours avant que le mot de passe doive �tre modifi�

warn

Nombre de jours durant lesquels l'utilisateur est pr�venu de l'expiration de son mot de passe.

expire

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

disable

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

reserved

Champ r�serv�

Donc, l'exemple pr�cedent devrait �tre:
username:Npge08pfz4wuk:9479:0:10000::::

2.4 Apercu de la fonction crypt(3)

extrait de la page de manuel de crypt(3)

"crypt est la fonction de cryptage du mot de passe. Elle est bas�e sur l'algorithme du DES (Data Encryption Standard) avec quelques modifications pour �viter les recherches mat�rielles de la cl�.

La cl� est le mot de passe de l'utilisateur

Le sel est compos� de deux caract�res choisis dans l'ensemble [a-zA-Z0-9./]. cette chaine de caract�re est utilis�e pour perturber l'algorithme de 4096 diff�rentes fa�ons.

En prenant les 7 derniers bits de chaque caract�re du mot de passe, on obtient une cl� de 56 bits. Cette cl� est utilis�e pour crypter une cha�ne de caract�re constante (g�n�ralement constitu�e de z�ro). La valeur retourn�e pointe sur le mot de passe crypt�: une s�rie de 13 caract�res ASCII imprimables (les deux premiers caract�res correspondent au sel). La valeur retourn�e pointe sur une donn�e statique dont le contenu est modifi� � chaque appel.

Attention: Une cl� de 56 bits correspond �: 2^56 donc 7.3e16 valeurs possibles. Les recherches exhaustives sont possibles en utilisant des ordinateurs � architecture massivement parall�le. Des logiciels comme crack(1) travaillent avec des cl�s qui sont g�n�ralement utilis�es par les humains. C'est-�-dire que la s�lection de mots de passe test�s sont des mots simples, mots de passe fr�quemment utilis�s et des noms. L'utilisation d'un programme passwd(1) qui recherche des mots de passe trop simple est recommand�.

L'algorithme DES lui-m�me est tr�s limit�, 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 id�e. Si vous envisagez d'utiliser crypt(3) pour un projet de cryptographie, ne le faites pas, procurez-vous plut�t un bon livre sur le cryptage de donn�es et une des nombreuses biblioth�ques DES."

Si vous recherchez un bon livre sur le cryptage de donn�es, je vous recommande:

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

3. Se procurer le paquetage Shadow.

3.1 Historique du paquetage Shadow pour Linux?

N'UTILISEZ PAS LES PAQUETAGES DECRITS DANS CETTE SECTION, ILS CONTIENNENT DES PROBLEMES DE SECURITE

Le paquetage Shadow original a �t� �crit par John F. Haugh II.

De nombreuses versions peuvent �tre utilis�es sur un syst�me Linux:

Le paquetage shadow-mk est en fait constitu� du paquetage shadow-3.3.1 distribu� par John F. Haugh II patch� avec shadow-3.3.1-2 avec en plus:

Le paquetage shadow-mk �tait pr�c�demment recommand�, mais il doit �tre remplac� � cause d'un trou de s�curit� du programme login.

Il y a des trous de s�curité dans les versions 3.3.1, 3.3.1-2 et shadow-mk qui sont d�s au programme login. Le bogue login implique de ne pas v�rifier la longueur du nom de login. Cela entra�ne un surpassement de la zone tampon qui provoque un crash ou pire encore. Il est dit que ce surpassement de zone tampon pourrait permettre � quiconque ayant un compte sur le syst�me d'utiliser ce bogue ainsi que des biblioth�ques partag�es pour gagner un acc�s root. Je ne pourrais pas vous dire exactement comment cela est possible mais de nombreux syst�mes Linux sont affect�s. Mais les syst�mes poss�dants ces paquetages Shadow, ainsi que la plupart des distributions pre-ELF sans le paquetage Shadow sont vuln�rables !

Pour de plus amples informations sur cette publication ainsi que d'autres publications concernant les probl�mes de s�curit� de Linux, consultez la Linux Security Home Page (Shared Libraries and login Program Vulnerability)<http://bach.cis.temple.edu/linux/linux-security/Linux-Security-Faq/Linux-telnetd.html>

3.2 O� trouver la Suite Shadow

La seule suite recommand�e est en b�ta test, donc les derni�res versions sont utilisables en environnement de production et ne contiennent pas de programme login vuln�rable.

Le paquetage utilise la convention de notation suivante :

         shadow-AAMMJJ.tar.gz
o� AAMMJJ est la date de publication de la suite.

Cette version sera �ventuellement la version 3.3.3 lorsqu'elle sera publi�e apr�s le b�ta test; et est maintenue par Marek Michalkiewicz <[email protected]>. Elle est disponible sous la forme : shadow-current.tar.gz � l'adresse <ftp://il7linuxb.ists.pwr.wroc.pl/pub/linux/shadow/shadow-current.tar.gz>.

Les miroirs suivants sont aussi disponibles :

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 poss�dent le probl�me de s�curit� d�crit plus avant.

Lorsque ce document fait r�f�rence � la Suite Shadow, je ferais r�f�rence � ce paquetage. Il est donc suppos� que vous utilisez ce paquetage.

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

Si vous utilisiez pr�c�demment le paquetage shadow-mk, vous devriez mettre � jour cette version et reconstruire tout ce que vous avez originellement compil�.

3.3 Ce qui est inclus dans le paquetage Shadow

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 biblioth�que: libshadow.a est incluse pour permettre de compiler les programmes n�cessitant un acc�s en lecture/�critures aux mots de passe.

Les pages de manuel sont aussi incluses.

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

4. Compiler les programmes.

4.1 Extraire l'archive

La premi�re �tape apr�s avoir r�cup�r� les paquetage est l'extraction de l'archive. C'est une archive de format tar et compress�e avec gzip. Donc tout d'abord d�placez la vers /usr/src, et tapez:

tar -xzvf shadow-current.tar.gz

Ceci extraira l'ensemble dans le r�pertoire: /usr/src/shadow-AAMMJJ

4.2 Configurer le fichier config.h

La premi�re chose � faire est d'�craser 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 d�finitions pour quelques options de configuration. Si vous utilisez le paquetage shadow recommand�, je vous recommande de d�valider le support de groupes shadow; pour la premi�re fois.

Par d�faut les mots de passe pour les groupes cach� sont valid�s. Pour les d�valider, �ditez le fichier config.h, et remplacez #define SHADOWGRP en #undef SHADOWGRP. Je recommande de commencer sans les groupes cach�s, mais si vous souhaitez r�ellement des mots de passe pour les groupes ainsi que des administrateurs de groupes vous pourrez ult�rieurement valider l'option et recompiler le tout. Si vous la laissez valid�e, vous devez cr�er le fichier /etc/gshadow.

Valider l'option g�rant les longs mots de passe n'est pas recommand�e.

Ne PAS changer le champ: #undef AUTOSHADOW

L'option AUTOSHADOW �tait pr�vue pour que les programmes non adapt�s aux mots de passe shadow puissent toujours fonctionner. Cela para�t int�ressant en th�orie 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 �crive la donn�e modifi�e dans le fichier /etc/passwd. Il ne poss�dera donc plus les propri�t�s shadow passwords. chfn et chsh sont de tels programmes (Vous pouvez passer outre en �changeant l'uid r�el et effectif avant d'appeler getpwnam() car root peut utiliser chfn et chsh aussi).

Le m�me avertissement est aussi valable si vous compilez la libc. Il y a une option SHADOW_COMPAT qui fait la m�me chose. Elle ne doit PAS �tre utilis�e! Si vous commencez à remettre des mots de passe encod�s dans le fichier /etc/passwd, cela pose un probl�me.

Si vous utilisez une libc de versions inf�rieure � 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, �ditez 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.3 Faire une copie de sauvegarde de vos programmes originaux.

Faites une copie de sauvegarde des fichiers qui vont �tre remplac�s par le kit shadow. Sur un syst�me Slackware 3.0:

Le paquetage b�ta poss�de une cible save dans le Makefile, mais elle est comment�e car les diff�rentes distributions placent ces programmes � diff�rents endroits.

Vous devriez aussi faire une copie de sauvegarde du fichier /etc/passwd, mais faites attention � le nommer diff�remment de fa�on � ne pas �craser l'original.

4.4 Lancer make

Vous avez besoin d'�tre root pour la plupart de l'installation

Lancez make pour compiler les ex�cutables 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 contr�le de version.

5. Installer

5.1 Ayez une disquette de boot � port�e de main

Si la mise � jour se d�roulait mal, il serait utile d'avoir une disquette de boot. Si vous avez l'ensemble des deux disquettes boot/root que vous avez utilis�es lors de l'installation de votre syst�me, elles feront probablement l'affaire. Dans le cas contraire, vous devrez en g�n�rer: jetez un coup d'oeil au Bootdisk-HOWTO (version francaise: Bootdisk-HOWTO) qui vous d�crira la marche � suivre.

5.2 Supprimer les pages de manuel en double

Vous devriez aussi d�placer les pages de manuels qui vont �tre remplac�es. M�me si vous avez le courage d'installer le kit Shadow sans proc�der � un quelconque sauvegarde, vous aurez � supprimer vos anciennes pages: elles ne sont pas �cras�es car - dans la plupart des cas - elles sont enregistr�es dans un format compress�.

Vous pouvez utiliser une combinaison de la commande man -aW et de la commande locate pour localiser les pages � effacer. Il est g�n�ralement plus ais� 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:

Regardez dans les sous r�pertoires /var/man/cat[1-9] Il est possible qu'il y ait des pages de manuel du m�me nom qui devront �tre effac�es.

5.3 Lancer make install

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

make install

Ceci installera les nouveaux programmes, remplacera les anciens, d�finira 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 b�ta, vous devez copier � la main le fichier login.defs dans les r�pertoires /etc/ et �tre sûr 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 login. Vous devriez regarder et faire des changements dans ce fichier pour votre propre syst�me. C'est l� que vous d�cidez sur quel terminal root peut se connecter, ainsi que d'autres param�tres de s�curit� (comme l'expiration par d�faut des mots de passe).

5.4 Lancer pwconv

La prochaine �tape consiste � lancer pwconv. Ceci doit �tre fait en tant que root, et � partir du r�pertoire /etc :

cd /etc
/usr/sbin/pwconv

pwconv lit les donn�es du fichier /etc/passwd et les s�pare en deux fichiers: /etc/npasswd et /etc/nshadow.

Un programme pwunconv permet de faire la d�marche inverse: � partir du fichier /etc/passwd et /etc/shadow, il g�n�re un unique /etc/passwd.

5.5 Renommer npasswd et nshadow

Apr�s avoir lanc� pwconv, vous avez normalement cr�� deux fichiers: /etc/npasswd et /etc/nshadow. Ses fichiers doivent �tre respectivement renomm�s 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'acc�s. Nous le d�placerons dans le r�pertoire personnel de root:

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

V�rifiez aussi que les permissions et les propri�taires des fichiers soient corrects. Si vous utilisez X-windows, le programme xlock doit pouvoir lire directement le fichier /etc/shadow (mais pas y �crire). La meilleure solution consiste � configurer le fichier shadow en utilisateur root et groupe shadow. Avant toute chose v�rifiez que le groupe shadow existe bien (regardez dans le fichier /etc/group). Actuellement, il ne devrait y avoir aucun utilisateur appartenant � ce groupe.

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

Votre syst�me est d�sormais �quip� de mots de passe shadow. D�placez-vous vers une autre console virtuelle et v�rifier si vous pouvez vous loguer.

Si vous ne pouvez pas vous loguer c'est que la mise � jour s'est mal d�roul�e ! Pour revenir � un syst�me 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 pr�c�demment sauvegard�s.

6. Les autres programmes � mettre � jour

Le paquetage shadow contient la plupart des programmes de remplacement aux programmes acc�dant aux mots de passe. Mais toutefois, il reste quelques programmes pr�sents en g�n�ral sur la plupart des syst�mes qui n�cessitent une mise � jour pour fonctionner correctement.

Si vous utilisez une Distribution Debian (et m�me si vous n'en utilisez pas), vous pouvez obtenir les sources des programmes que vous avez besoin de recompiler � : <ftp://ftp.debian/org/debian/stable/source/>

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

Reportez vous � la section sec-prog pour vous aider � mettre � jour les programmes qui n�cessitent l'acc�s aux mots de passes (sans que le programme soit SUID root ou SGID shadow).

6.1 le programme Adduser (Slackware)

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 �tre trouv�e sur: ftp://sunsite.unc.edu/pub/Linux/ system/Admin/accounts/adduser.shadow-1.4.tar.gz.

Je vous encourage � utiliser les programmes qui sont fournis par le paquetage shadow (useradd, usermod et userdel) � la place de adduser. Ils n�cessitent 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 sec-fonction pour de plus amples informations.

L'installation est ais�e:

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

6.2 Le serveur wu_ftpd

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 compil� pour le support shadow. wu_ftpd est lanc� � partir de inetd/tcpd en tant que processus root. Si vous utilisez un ancien d�mon wu_ftpd, vous devrez de toute fa�on le mettre � jour car les vieilles versions ont un bug, le compte root pouvait �tre 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 d�marche � faire est de r�cup�rer les sources et de les compiler avec l'option shadow.

Le serveur wu_ftpd peut �tre r�cup�r� sur Sunsite: wu-ftp-2.4-fixed.tar.gz

Une fois l'archive r�cup�r�e, placez l� 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
�diter alors le fichier ./src/makefiles/Makefile.lnx et changez la ligne:
LIBES     = -lbsd -support
par
LIBES     = -lbsd -support -lshadow
Maintenant vous �tes pr�s � lancer le script de compilation installer le r�sultat:
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 syst�me bas� 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 probl�mes ont �t� rapport�s lors de la compilation de ce paquetage sous des syst�mes ELF, mais la b�ta version de la prochaine publication fonctionne bien. Elle peut �tre trouv� �: 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 r�cup�r� le serveur, placez-le dans le r�pertoire /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
�ditez alors le fichier config.lnx et remplacez:
#undef SHADOW_PASSWORD
par
#define SHADOW_PASSWORD
Allez alors dans le r�pertoire des Makefiles
cd ../Makefiles
et �ditez le fichier Makefile.lnx. Modifiez alors:
LIBES = -lsupport -lbsd # -lshadow
par
LIBES = -lsupport -lbsd -lshadow
Il ne reste plus qu'� 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 contr�ler le fichier /etc/inetd.conf afin d'�tre s�r que votre serveur wu-ftpd soit r�ellement pr�sent. Il a �t� rapport� que certaines distributions placent les serveurs d�mons � d'autres endroits, et donc, wu-ftpd en particulier pourrait �tre nomm� diff�remment.

6.3 ftpd standard

Si vous utilisez le serveur ftpd standard, tout d'abord, je vous recommande de passer au serveur wu_ftpd, mis � part les bugs cit�s pr�c�demment, il est consid�r� comme plus s�curis�.

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

6.4 pop3d (Post Office Protocol 3)

Si vous utilisez le 3eme Post Office Protocol (POP3), vous devrez recompiler le programme pop3d. pop3d est normalement lanc� par inet2/tcpd dans un process root.

Il y a deux versions disponibles sur Sunsite: pop3d-1.00.4.linux.shadow.tar.gz et pop3d+shadow+elf.tar.gz

Les deux versions sont tr�s simples � installer.

6.5 xlock

Si vous utilisez X-window et que vous ne mettez pas � jour xlock, vous devrez utiliser CTRL-ALT-Fx pour vous d�placer 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 � jour d' xlock n'est vraiment pas compliqu�e.

Si vous utilisez XFree86 Versions 3.x.x, c'est probablement xlockmore qui est install� (c'est un superbe �conomiseur d'�cran et un syst�me de lock). Ce paquetage supporte shadow apr�s 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, voil� comment proc�der:

R�cup�rez xlockmore-3.7.tgz et copiez-le dans /usr/src, d�compressez-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 ex�cutables:

cd /usr/src/xlockmore
xmkmf
make depend
make

Maintenant, d�placez le tout vers le bon endroit, et mettez-�-jour les propri�taires 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 d�sormais correctement.

6.6 xdm

xdm est un programme qui pr�sente un �cran de login pour W-Window. Quelques syt�mes d�marrent xdm lorsqu'il se situe dans un niveau sp�cifique (voir /etc/inittab).

Avec le kit Shadow install�, xdm doit �tre mis � jour. Heureusement, il est relativement facile de mettre à jour votre programme xdm.

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

R�cup�rez xdm.tar.gz et placez-le dans le r�pertoire /usr/src, et d�compressez-le:

tar -xzvf xdm.tar.gz
�ditez 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 ex�cutables;:
cd /usr/src/xdm
xmkmf
make depend
make
Copier alors l'ex�cutable:
cp xdm /usr/X11R6/bin
xdm est ex�cut� en tant que root donc vous n'avez pas � changer les permissions.

6.7 sudo

Le programme sudo permet � l'administrateur syst�me de laisser des utilisateurs lancer des programmes qui normalement n�cessiteraient les permissions root. C'est int�ressant car �a permet � l'administrateur de se limiter lui m�me l'acc�s root pendant qu'il permet aux utilisateurs de faire des op�rations comme monter un disque.

sudo a besoin d'acc�der aux mots de passe car il v�rifie le mot de passe des utilisateurs quand il est invoqu�.sudo fonctionne d�j� SUID root, donc acc�der au fichier /etc/shadow n'est pas un probl�me.

la mise � jour sudo pour shadow est disponible: ftp://sunsite.unc.edu/pub/Linux/system/Admin/sudo-1.2-shadow.tgz

Cette version a �t� pr�vue pour fonctionner avec des mots de passe shadow, donc la seule chose � 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.8 imapd (paquetage Email pine)

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 pr�tend que la configuration par d�faut pour un syst�me linux fonctionne avec shadow. Or j'ai constat� 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 r�ussi � le modifier pour qu'il supporte le format shadow.

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

6.9 pppd (Serveur Point-to-Point protocol)

Le serveur pppd peut �tre configur� selon de nombreuses m�thodes d'authentification: Password Authentifocation Protocol (PAP) et Cryptographic Authentification Protocol (CHAP). Le serveur pppd utilise en g�n�ral les mots de passe stock�s dans le fichier /etc/ppp/chap-secrets et /etc/ppp/pap-secret. Si vous utilisez cette m�thode, ce n'est pas la peine de faire de mise-�-jour.

pppd vous permet aussi d'utiliser le param�tre login (soit en ligne de commande, soit dans le fichier de configuration). Si l'option login est utilis�e, alors pppd utilisera pour le PAP le fichier /etc/passwd pour le nom d'utilisateur et le mot de passe. Bien sur �a ne fonctionnera plus sur un syst�me mots de passe shadow. Pour pppd-1.2.1d, un ajout de code est n�cesssaire.

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

pppd-2.2.0 contient d�j� le support shadow.

7. Faire en sorte que la suite shadow fonctionne

Cette section explique quelques �l�ments que vous souhaitez savoir depuis que vous avez la suite shadow sur votre syst�me. De plus amples informations sont disponibles dans les pages de manuels.

7.1 Ajouter, modifier, et supprimer des utilisateurs.

La Suite Shadow a ajout� les commandes suivantes qui sont orient�es ``ligne de commande'', pour ajouter, modifier et supprimer des utilisateurs. Vous avez aussi sûrement dû installer le programme adduser.

useradd

la commande useradd peut �tre utilis�e pour ajouter des utilisateurs � votre syst�me. Vous appelez aussi cette commande pour changer les param�tres par d�faut.

La premi�re chose � faire est d'examiner les param�tres par d�faut et effectuer des changements pour votre propre syst�me.

useradd -D

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

Les param�tres par d�fauts ne sont probablements pas ceux que vous souhaitez, donc, si vous commencez � ajouter des utilisateurs maintenant, vous aurez � sp�cifier toutes les informations pour chacun d'entre eux. C'est pour cela que nous pouvons et devons changer les valeurs par d�faut.

Sur mon syt�me:

Pour effectuer ces changements, j'ai dû 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 d�faut sont stock�es dans le fichier /etc/defaults/useradd

Maintenant vous pouvez utiliser useradd pour ajouter des utilisateurs � votre syst�me. Par exemple, pour ajouter l'utilisateur fred, en utilisant les valeurs par d�faut, vous devez utiliser ce qui suit:

useradd -m -c "Fred Flintstone" fred
Cela cr�era une entr�e dans le fichier /etc/passwd:
fred:*:505:100:Fred Flintstone:/home/fred:/bin/bash
Ainsi que cette entr�e dans le fichier /etc/shadow:
fred:!:0:0:60:0:0:0:0
Le r�pertoire d'accueil de fredsera cr�� et le contenu de /etc/skel sera copi� � cet endroit grâce � l'option -m

De plus, lorsque l'on ne sp�cifie pas l'IUD, le prochain disponible est utilis�.

Le compte de fred est maintenant cr��, mais fred ne peut pas se loger tant que nous ne d�v�rouillons 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 syst�me. La chose int�ressante � 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 m�me moment, les deux op�rations sont effectu�es correctement.

Vous devriez plut�t utiliser les commandes fournies qu'�diter directement les fichier /etc/passwd et /etc/shadow. Si vous �ditez le fichier /etc/shadow et qu'un utilisateur change son mot de passe au m�me 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 int�ractif 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 pr�f�rable � l'�dition des fichiers /etc/passwd et /etc/shadow ainsi qu'� l'utilisation de programmes comme adduser de la distribution Slackware.

Vous �tes libre d'utiliser et de modifier le script � en fonction de votre syst�me.

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

usermod

Le programme usermod est utilis� pour modifier les informations relatives � un utilisateur. Les options sont les m�mes 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'entr�e 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'entr�e 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.

userdel

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 r�pertoire d'accueil d'un utilisateur seront effac�s. Les fichiers situ�s en dehors du r�pertoire d'accueil devront �tre cherch�s et effac�s manuellement.

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

7.2 La commande passwd et la dur�e du mot de passe.

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

Par exemple, jetons un coup d'oeil � 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 �t� chang� pour la derni�re fois le 04/03/96, qu'il peut �tre chang� � 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 v�rouill� lors de l'expiration du mot de passe.

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

Si nous souhaitons pr�venir fred 14 jours avant l'expiration de son mot de passe, et v�rouiller son compte 14 jours apr�s l'avoir laiss� expir�, nous devrions faire la chose suivante:

passwd -w14 -i14 fred
Maintenant les informations concernant fred sont chang�es en:
fred P 03/04/96 0 60 14 14

Pour de plus amples informations concernant passwd, se r�f�rer au manuel en ligne.

7.3 Le fichier login.defs

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

Le fichier /etc/login.defs contient les param�tres allant de l'apparance de l'invite � l'expiration par d�faut concernant les mots de passe utilisateurs.

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

Des informations pr�c�dantes on peut en d�duire que c'est un fichier important, vous devez �tre sûr qu'il existe et que les valeurs sont celles que vous d�sirez pour votre syst�me.

7.4 Les mots de passe pour les groupes

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

Si vous d�finissez cette constante et que vous compilez, vous devez cr�er 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 cr�� le fichier /etc/shadow, vous avez utilis� un programme appel� pwconv, il n'y a pas d'�quivalent pour cr�er le fichier /etc/gshadow, mais ce n'est pas grave.

Pour cr�er 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 cr�ez un nouveau groupe, il sera ajout� 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 chang�.

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

Le format du fichier /etc/group est:

groupname:!:GID:member,member,...
o�:
groupname

Le nom du groupe,

!

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

GID

L'identificateur num�rique du groupe,

member

La liste des membres du groupe.

Le format du fichier /etc/gshadow est:

groupname:password:admin,admin,...:member,member,...
o�:
groupname

Le nom du groupe,

password

Le mot de passe encod�,

admin

La liste des administrateurs de groupe,

member

La liste des membres du groupe.

La commande gpasswd est utilis�e 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 �tre chang� en utilisant le programme passwd par root ou un administrateur du groupe.

En d�pit du fait qu'il n'y ait pas encore de page de manuel pour gpasswd, tapez gpasswd sans param�tres 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.5 Programmes de v�rification de la structure

pwck

Le programme pwck est fourni pour v�rifier la coh�rence des fichiers /etc/passwd et /etc/shadow. Il v�rifie chaque nom d'utilisateur ainsi que les points suivants:

Il pr�vient aussi lorsqu'un compte ne poss�de pas de mot de passe.

C'est une bonne id�e de lancer pwck apr�s avoir install� la Suite Shadow. C'est aussi une bonne id�e de le lancer p�riodiquement, une fois par semaine ou par mois. Si vous utilisez l'option -r, vous pouvez utiliser cron pour lancer une analyse r�guli�re et avoir un rapport sous forme de courrier.

grpck

grpck est le programme de v�rification de la coh�rance des fichiers /etc/group et /etc/gshadow. Il effectue les v�rifications suivantes:

Il poss�de aussi l'option -r pour des rapports automatiques.

7.6 Les mots de passe "Acc�s � distance"

Les mots de passe "Acc�s � distance" sont une autre ligne de d�fense des syst�mes permettant la connexion � distance. Si vous avez un syst�me qui permet � des utilisateurs de se connecter localement ou par l'interm�diaire d'un r�seau, mais vous voulez contrôler qui peut appeler et se connecter, les mots de passe "Acc�s � distance" sont pour vous. Pour valider les mots de passe "Acc�s � distance", vous devez �diter le fichier /etc/login.defs et vous assurer que DIALUPS_CHECK_ENAB est positionn�e � yes.

Les deux fichiers contenant les informations d'acc�s � distance sont /etc/dialups et /etc/d_passwd. Le fichier /etc/dialups contient les terminaux (un par ligne, avec l'ent�te "/dev/" supprim�). Si un terminal est list� alors, la v�rification d'acc�s � distance est effectu�e;.

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 � un terminal d�crit dans une ligne du fichier /etc/dialup et que son shell est list� dans le fichier /etc/d_passwd alors l'acc�s lui est autoris� en fournissant le mot de passe correct.

Une autre possibilit� utile des mots de passe "Acc�s � distance" est de sp�cifier 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 possibilit�s de l'acc�s � distance, vous devez cr�er les fichiers.

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

8. Ajouter le support shadow � un programme en C.

Ajouter le support shadow � un programme C est assez facile. Le seul probl�me est que le programme doit �tre lanc� par root (ou SUID root) pour qu'il puisse acc�der au fichier /etc/shadow.

Ceci pr�sente un r�el probl�me, il faut faire tr�s attention lors de la cr�ation de programmes SUID. Par exemple, il ne faut pas qu'un programme SUID root puisse permettre un acc�s au shell.

La meilleure solution pour qu'un programme puisse acc�der aux mots de passe encod�s sans �tre SUID root, est de lancer ce programme SUID shadow � la place. C'est le cas par exemple du programme xlock.

Dans l'exemple donn� pr�c�demment, pppd-1.2.1d fonctionne d�j� SUID root, donc ajouter le support shadow ne le rendra pas plus vuln�rable.

8.1 Les fichiers d'en-t�te

Les fichiers d'en-t�te doivent �tre stock�s dans le r�pertoire /usr/include/shadow. Le fichier /usr/include/shadow.h, doit �tre un lien symbolique vers /usr/include/shadow/shadow.h.

Pour ajouter le support shadow � 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.2 La biblioth�que libshadow.a

Quand vous avez install� l'ensemble shadow, le fichier libshadow.a a �t� cr�� et install� dans le r�pertoire /usr/lib.

Lorsque vous compilez un programme avec le support shadow, vous devez pr�ciser � l'�diteur de liens d'inclure la biblioth�que 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 g�n�ral, utilise une variable appel�e LIBS=... que vous pourrez modifier.

8.3 La structure shadow

La biblioth�que libshadow.a utilise une structure appel�e spwd pour r�cup�rer les informations contenues dans le fichier /etc/shadow. Voici la d�finition 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'ensemble shadow peut placer des donn�es dans le champ sp_pwdp juste apr�s le mot de passe encod�, 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 appel� pour proc�der � une authentification suppl�mentaire. Le programme appel� recevra comme argument, le nom d'utilisateur et un switch qui indiquera pourquoi il est appel�. 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 utilis�e avant la deuxi�me authentification..

8.4 Les fonctions Shadow.

Le fichier shadow.h contient aussi la d�claration des fonctions contenues dans la biblioth�que 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 �tudier est getspnam, elle r�cup�re une structure spwd � partir d'un nom donn�.

8.5 Exemple

Voici un exemple d'ajout du support shadow � un programme qui en n�cessite mais pour qui ce support n'existe pas par d�faut.

Nous allons nous baser sur l'exemple du serveur pppd-1.2.1d ( Serveur Point-to-Point protocol) configur� avec l'option login: 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 � pppd-2.2.0, c'est d�j� fait.

Bien que cette possibilit� de pppd ne soit pas tr�s utilis�e, elle ne fonctionnera plus d�s lors que vous aurez install� l'ensemble shadow: les mots de passe ne sont plus stock�s 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 �tre ajout� au d�but du fichier, l� o� 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 plac� 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 effectu�e si le fichier shadow est configur� 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 pr�cis�ment le code, vous verrez que d'autres modifications ont �t� effectu�es. La version originale autorisait l'acc�s (en retournant UPAP_AUTHACK) quand il n'y avait pas de mots de passe dans le fichier passwd. Il ne fallait pas laisser ceci car utilis� 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 gard� la version originale, n'importe qui aurait pu �tablir une connexion ppp avec un mot de passe vide.

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

A savoir que pppd-2.2.0 poss�de le m�me probl�me.

Nous devons modifier le Makefile pour que deux choses soient prises en compte: USE_SHADOW doit �tre d�fini, et libshadow.a doit �tre ajout� au processus d'�dition 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. Foire Aux Questions

Q: J'essaye de contrôler 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 Suite Shadow est install�e. Le terminal � partir duquel root peut se connecter et maintenant situ� dans le fichier /etc/login.defs. L'entr�e dans ce fichier peut pointer sur un autre fichier.

Q: J'ai install� la Suite Shadow, mais je ne peux plus me connecter, qu'ai-je oubli� ?

R: Vous avez probablement install� les programmes, mais vous n'avez tr�s certainement pas ex�cut� pwconv ou bien vous avez oubli� 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 r�pertoire /etc/.

Q: Dans la section sur xlock, il est dit de positionner le groupe propi�taire du fichier /etc/shadowshadow. Je n'ai pas de groupe shadow, comment je fais ?

R: Vous pouvez en ajouter un. Editez simplement le fichier /etc/group et ins�rez une ligne pour le groupe shadow. Vous devez vous assurer que le num�ro du groupe n'est pas d�j� utilis� par un autre groupe, de plus vous devez l'ins�rer avant l'entr�e nogroup. Ou bien vous pouvez positionner le bit suid du programme xlockroot.

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

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

Q: J'ai install� la Suite Shadow, mais lorsque j'utilise la commande userdel, j'obtiens, ``userdel: cannot open shadow group file'', qu'est-ce que j'ai fait de travers ?

R: Vous avez compil� la suite avec l'option SHADOWGRP de valid�, mais vous ne poss�dez pas de fichier /etc/gshadow. Vous avez besoin d'�diter le fichier config.h et de recompiler la suite. Allez voir la section sur les groupes shadow.

Q: J'ai install� la Suite Shadow mais je retrouve des mot de passe encod�s dans mon fichier /etc/passwd, qu'est-ce qui ne va pas ?

R: Soit vous avez compil� la suite avec l'option AUTOSHADOW du fichier config.h, soit votre libc a �t� compil�e avec l'option SHADOW_COMPAT. Vous devez d�terminer quel est votre probl�me et recompilez.

10. Copyright.

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

Ce document peut �tre reproduit et distribu� en tout ou partie, sur tout support physique ou �lectronique, � condition que cette notice soit incluse dans chacune des copies.

Il est permis de copier et distribuer des versions modifi�es de ce document dans les conditions ci-dessus. Une notice doit appara�tre sp�cifiant bien qu'il s'agit d'une version modifi�e.

Il est permis de copier et distribuer des versions traduites dans d'autres langues, dans les conditions g�n�rales cit�es pr�c�demment.

Il est permis de diffuser ce document sous un autre support selon les clauses stipul�es plus haut concernant les versions modifi�es du document, et sous r�serve que celle sp�cifiant la disponibilit� du code source soit remplie sous la forme d'une r�f�rence �vidente sur ce code dans ce nouveau support. Le propri�taire du copyright se r�serve le droit de trancher lorsqu'il y a le moindre doute sur cette d�finition "d'�vidence".

11. Divers et Remerciements

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

Merci � Marek Michalkiewicz <[email protected]> pour �crire et maintenir la Suite Shadow pour Linux ainsi que pour ses commentaires sur ce document.

Merci � Ron Tidd <[email protected]> pour sa pr�cieuse aide et ses tests.

Merci � tous ceux qui m'ont envoy� des commentaires qui ont permis d'am�liorer ce document.

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

amiti�s

Mickael H. Jackson <[email protected]>