<?xml version='1.0' encoding='iso-8859-1' standalone='no'?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "/usr/local/share/xml/docbook/4.2/docbookx.dtd"

[
<!ENTITY ie    "<abbrev>i.e.</abbrev>">
<!ENTITY cf    "<abbrev>c.f.</abbrev>">
<!ENTITY todo  "<command>--- T O  D O :</command>">

<!ENTITY unix   "<emphasis>Unix</emphasis>">
<!ENTITY bsd    "<emphasis>BSD</emphasis>">
<!ENTITY xbsd   "<emphasis>xBSD</emphasis>">
<!ENTITY fbsd   "<emphasis>FreeBSD</emphasis>">
<!ENTITY obsd   "<emphasis>OpenBSD</emphasis>">
<!ENTITY sysV   "<emphasis>System V</emphasis>">
<!ENTITY linux  "<emphasis>Linux</emphasis>">
<!ENTITY glinux "<emphasis>GNU/Linux</emphasis>">
<!ENTITY deb    "<emphasis>Debian</emphasis>">

<!ENTITY fpasswd "<filename>/etc/passwd</filename>">
<!ENTITY fgroup  "<filename>/etc/group</filename>">
<!ENTITY mpasswd "<filename>/etc/master.passwd</filename>">
<!ENTITY fshadow "<filename>/etc/shadow</filename>">
<!ENTITY gshadow "<filename>/etc/gshadow</filename>">

<!ENTITY logindef   SYSTEM "./src/login.defs">
<!ENTITY loginconf  SYSTEM "./src/login.conf">
<!ENTITY liloconf   SYSTEM "./src/lilo.conf">
<!ENTITY inittab    SYSTEM "./src/inittab">
<!ENTITY S20ssh     SYSTEM "./src/S20ssh">
<!ENTITY rcconf     SYSTEM "./src/rc.conf">
<!ENTITY syslogconf SYSTEM "./src/syslog.conf">

<!ENTITY p1_users   SYSTEM "./p1_users.xml">
<!ENTITY p2_proc    SYSTEM "./p2_proc.xml">
<!ENTITY p3_startup SYSTEM "./p3_startup.xml">
<!ENTITY p4_backup  SYSTEM "./p4_backup.xml">
<!ENTITY p5_sysspy  SYSTEM "./p5_sysspy.xml">

<!ENTITY _aut_Pre     "<firstname>Pascal</firstname>">
<!ENTITY _aut_Nom     "<surname>Picard</surname>">
<!ENTITY _aut_eMail   "<email>pascal@seth.homeunix.net</email>">
<!ENTITY _aut_Init    "<authorinitials>P.P.</authorinitials>">

<!ENTITY _affiliat    "<affiliation><orgname>Corto E.T.F., K&amp;M</orgname><address>Sainte-Clotilde, Ile de la Réunion</address></affiliation>">
<!ENTITY _holder      "<holder>Pascal PICARD, <emphasis>pascal@seth.homeunix.net</emphasis></holder>"> 

]>
<article class="techreport" lang="fr" >
  <articleinfo>


    <author>
<firstname>Ivan</firstname>">
<surname>Kurzweg</surname>
    </author>
    <title>Gestion des utilisateurs</title>
    <copyright>
      <holder>Ivan Kurzweg , Pascal Picard </holder>
      <year>2002 - 2006</year>
    </copyright>

    <legalnotice>
<para>
Permission to use, copy, modify, and distribute this documentation for any purpose with or without fee is here by granted, provided that the above copyright notice and this permission notice appear in all copies.
</para>        
<para>
Ce cours est largement inspiré du cours de Pascal Picard disponible sur https://seth.homeunix.net/corto, et des documentations des systèmes *BSD et Linux.</para>

    </legalnotice>

  </articleinfo>

  <sect1>
    <title>Commandes de gestion des utilisateurs</title>
    <para>Nous abordons dans cette partie la gestion des comptes d'utilisateurs (création, modification et suppression) qui est une des premières tâches de l'administrateur système.</para>
<sect2><title>Introduction</title>
<para>
Tout accès au système est effectué par l'intermédiaire de comptes, et tous les processus sont exécutés par des utilisateurs, la gestion des comptes et des utilisateurs est donc capitale.

Chaque compte est associé avec un certain nombre d'informations utilisé pour identifier le compte.

<itemizedlist>
	  <listitem>
	    <para><command>User name</command> - <emphasis>nom d'utilisateur</emphasis> : c'est le nom tapé à l'invite <computeroutput>login:</computeroutput>. Les noms d'utilisateur<emphasis> doivent être uniques</emphasis> sur le système; vous ne pouvez pas avoir deux utilisateurs avec le même nom d'utilisateur. Il y a un certain nombre de règles pour la création de noms d'utilisateur valides, documentées dans <command>passwd(5);</command>.</para></listitem>
	  <listitem>
	    <para><command>Password</command> - <emphasis>mot de passe</emphasis> : Chaque compte est associé à un mot de passe. Le mot de passe peut être vide, dans ce cas aucun mot de passe ne sera requis pour accéder au système. Ceci est une très mauvaise idée; chaque compte devrait avoir un mot de passe.</para></listitem>
<listitem>
	    <para><command>User ID (UID)</command> -<emphasis> identifiant utilisateur</emphasis> : L'UID est un nombre compris entre 0 et 65535, utilisé pour identifier de façon unique un utilisateur sur le système. Au niveau interne, FreeBSD utilise l'UID pour identifier les utilisateurs--toute commande qui vous permet de spécifier un utilisateur convertira le nom d'utilisateur en son UID avant de le traiter.</para></listitem>
<listitem>
	    <para><command>Group ID (GID)</command> - <emphasis>identifiant de groupe</emphasis> : Le GID est un nombre compris entre 0 et 65535, utilisé pour identifier de façon unique le groupe principal auquel appartient l'utilisateur. Les groupes sont un mécanisme pour contrôler l'accès aux ressources qui est basé sur le GID de l'utilisateur plutôt que sur son UID. Un utilisateur peut également appartenir à plus d'un groupe.</para></listitem>
<listitem>
	    <para><command>Login class </command>- <emphasis>classe de session</emphasis>  :Les classes de session sont une extension du mécanisme de groupe qui apporte une flexibilité supplémentaire quand on adapte le système aux différents utilisateurs.</para></listitem>
<listitem>
	    <para><command>Password change time</command> - <emphasis>durée de vie d'un mot de passe</emphasis> : Par défaut FreeBSD n'oblige pas les utilisateurs à changer leur mot de passe régulièrement. Vous pouvez forcer cela en fonction de l'utilisateur, en obligeant certains ou tous les utilisateurs à changer leur mot de passe après qu'une certaine période de temps se soit écoulée.</para></listitem>
<listitem>
	    <para><command>Account expiry time</command> - <emphasis>date d'expiration d'un compte</emphasis> : Par défaut FreeBSD ne désactive pas de comptes après une certaine période.Après la durée d'expiration écoulée le compte ne pourra plus être utilisé pour ouvrir de session sur le système, bien que les répertoires et les fichiers attachés au compte seront conservés.</para></listitem>
<listitem>
	    <para><command>User's full name</command> - <emphasis>nom complet d'utilisateur</emphasis> : Le nom d'utilisateur identifie uniquement le compte sur FreeBSD, mais ne reflète pas nécessairement le nom réel de l'utilisateur. Cette information peut être associée avec le compte.</para></listitem>
<listitem>
	    <para><command>Home directory</command> - <emphasis>répertoire utilisateur</emphasis> : Le répertoire utilisateur est le chemin complet vers un répertoire sur le système dans lequel se retrouve l'utilisateur quand il ouvre une session sur le système. Une convention commune est de mettre tous les répertoires d'utilisateurs sous /home/username ou /usr/home/username. L'utilisateur pourra stocker ses fichiers personnel dans son répertoire utilisateur et dans tout sous-répertoire qu'il pourra y créer.</para></listitem>
<listitem>
	    <para><command>User shell</command> - <emphasis>interpréteur de commandes de l'utilisateur</emphasis> : L'interpréteur de commandes fournit aux utilisateurs l'environnement par défaut pour communiquer avec le système. Il existe plusieurs différents types d'interpréteurs de commandes, et les utilisateurs expérimentés auront leur préférence, qui peut se refléter dans le paramétrage de leur compte.</para></listitem></itemizedlist></para>

      <para>Il y a trois principales sortes de comptes: le <emphasis>super-utilisateur</emphasis>, les <emphasis>utilisateurs système</emphasis>, et les <emphasis>comptes utilisateur</emphasis>. Le compte super-utilisateur, normalement appelé <command>root</command>, est utilisé pour gérer le système sans aucune limitation de privilèges. Les utilisateurs système exécutent des services. Et enfin, les comptes utilisateur sont utilisés par de véritables utilisateurs, qui ouvrent des sessions, lisent leur courrier électronique, et ainsi de suite.</para>

    <para>Les informations concernant la définition d'un compte utilisateur sont principalement stockées dans les fichiers &fpasswd; et &fgroup;, selon qu'il s'agisse d'un système GNU/Linux ou d'un système xBSD dans les fichiers &fshadow; et &mpasswd;. Avant d'en présenter la structure syntaxique, intéressons nous à déterminer ce qu'implique la création et la destruction d'un compte. Enfin, pour finir nous présenterons les principales commandes de gestion des comptes.</para>

<sect3>
<title>Le compte super-utilisateur</title>
	<para>Le compte super-utilisateur, habituellement appelé <command>root</command>, est préconfiguré pour simplifier l'administration système, et ne devrait pas être utilisé pour des tâches quotidiennes comme l'envoi et la réception de courrier électronique, l'exploration du système, ou la programmation.</para>

	<para>Cela parce que le super-utilisateur, à la différence des comptes utilisateurs ordinaires, peut agir sans aucune limite, et une mauvaise utilisation du compte super-utilisateur peut être à l'origine de résultats catastrophiques. On ne peut (normalement !) pas endommager par erreur le système avec un compte utilisateur, il est donc généralement préférable d'utiliser des comptes utilisateur ordinaires chaque fois que c'est possible, à moins d'avoir particulièrement besoin de droits supplémentaires.</para>

	<para>Vous devriez toujours <emphasis>vérifier et revérifier les commandes que vous tapez en tant que super-utilisateur</emphasis>, parce qu'un espace en trop ou un caractère manquant peuvent signifier la perte définitive de données.
</para>

</sect3>
<sect3>
<title>Les comptes systèmes</title>
	<para>Les utilisateurs système sont ceux utilisés pour exécuter des services comme le DNS, le courrier électronique, les serveurs web, et ainsi de suite. La raison de cela est la sécurité; si tous les services s'exécutaient avec les droits du super-utilisateur, ils pourraient agir sans aucune restriction.</para>

	<para>Des exemples d'utilisateurs système sont <varname>daemon</varname>, <varname>operator</varname>, <varname>bind</varname> (pour le serveur de noms de domaine), <varname>news</varname>, et <varname>www</varname></para>.

	<para><varname>nobody</varname> est l'utilisateur sans privilèges générique du système. Cependant, il est important de garder à l'esprit que plus grand est le nombre de services utilisant <varname>nobody</varname>, plus grand sera le nombre de fichiers et de processus associés à cet utilisateur, et par conséquent plus grand sera le nombre de privilèges de cet utilisateur.
</para>
</sect3>
<sect3>
<title>Les comptes utilisateurs</title>
	<para>Les comptes utilisateur sont le principal moyen pour les véritables utilisateurs d'accéder au système, ces comptes isolent l'utilisateur du reste de l'environnement, empêchant les utilisateurs d'endommager le système et ou les comptes d'autres utilisateurs, tout en leur permettant de personnaliser leur environnement sans incidence pour les autres utilisateurs.</para>

	<para>Chaque personne accédant à votre système ne devrait posséder que son propre et unique compte. Cela vous permet de savoir qui fait quoi, empêche un utilisateur de désorganiser l'environnement d'un autre ou de lire du courrier électronique qui ne lui est pas destiné, et ainsi de suite.</para>

	<para>Chaque utilisateur peut configurer son propre environnement en fonction de ses besoins, pour utiliser d'autres interpréteurs de commandes, éditeurs, raccourcis de clavier, et langues.</para>
</sect3>
</sect2>
    <sect2>
	<title>Ajouter/Enlever un utilisateur</title>
	
      <formalpara>
	<title>Créer un nouveau compte utilisateur requiert plusieurs étapes : </title>
	<para>
<itemizedlist>
	    <listitem><para>Attribuer un nom de login, un <varname>uid</varname>, un groupe principal et un ou des groupes secondaires.</para></listitem>
	    <listitem><para>Créer des enregistrements sur cet utilisateur dans les fichiers &fpasswd;, &fgroup; et &mpasswd; ou &fshadow;.</para></listitem>
	    <listitem><para>Attribuer un (bon) mot de passe.</para></listitem>
	    <listitem><para>Créer le repertoire de domiciliation de l'utilisateur (son <varname>home</varname>).</para></listitem>
	    <listitem><para>Paramétrer le compte de l'utilisateur (durée de validité du mot de passe, date d'expiration du compte, limitation des ressources, privilèges ...).</para></listitem>
	    <listitem><para>Copier les fichiers d'initialisation dans le répertoire de domiciliation de l'utilisateur.</para></listitem>
	    <listitem><para>Rendre l'utilisateur propriétaire de son espace.</para></listitem>
	    <listitem><para>Définir les paramètres supplémentaires, tels  les <foreignphrase>quotas disk</foreignphrase>, l'impression, la messagerie...</para></listitem>		
	  </itemizedlist>
 </para>
      </formalpara>
      
      <formalpara>
	<title>Enlever un compte utilisateur necéssite les étapes suivantes :</title>
	<para>
<itemizedlist>
	    <listitem>
	      <para>Désactiver le compte de l'utilisateur.</para>
	      <itemizedlist>
		<listitem><para>sur &glinux; en faisant <computeroutput>passwd -l &lt;loginname&gt;</computeroutput></para></listitem>
		<listitem><para>sur les <foreignphrase>flavors</foreignphrase> &xbsd;  en préfixant le mot de passe du fichier &mpasswd; par le caractère * (cette technique marche aussi pour &glinux; dans le fichier &fshadow;).</para></listitem>
	      </itemizedlist>
	    </listitem>
	    
	    <listitem>
	      <para>Supprimer le compte de l'utilisateur.</para>	   
	      <itemizedlist>
		<listitem><para>Supprimer tous les processus de l'utilisateur.</para></listitem>
		<listitem><para>Enlever les enregistrements concernant cet utilisateur des fichiers &fpasswd;, &fgroup;, &fshadow; ou &mpasswd;.</para></listitem>
		<listitem><para>Retirer l'utilisateur des groupes secondaires.</para></listitem>
		<listitem><para>Supprimer le fichier de courrier électronique de l'utilisateur.</para></listitem>
		<listitem><para>Retirer ou rediriger les alias de courrier électronique de l'utilisateur.</para></listitem>
		<listitem><para>Supprimer les tâches <command>cron</command> et/ou <command>at</command>.</para></listitem>
		<listitem><para>Eventuellement faire une sauvegarde de l'espace de l'utilisateur puis le supprimer.</para></listitem>
		<listitem><para>Supprimer les fichiers et/ou répertoires temporaires de l'utilisateur.</para></listitem>
		<listitem><para>Mettre à zéro les quotas de cet utilisateur.</para></listitem>
	      </itemizedlist>
	    </listitem>
	  </itemizedlist>
	</para>
      </formalpara>

      <para>Un système <trademark>Unix</trademark> propose généralement un ensemble d'utilitaires pour faciliter la gestion des comptes. De plus, rien n'empêche de créer ces propres scripts pour automatiser au mieux cette tâche.</para>
      </sect2>

    <sect2>
      <title>Analyse du fichier &fpasswd;</title>
      <para> Ce fichier au format texte, référence l'ensemble des utilisateurs du système. Une ligne concerne un utilisateur et est structurée en sept champs : </para>
      <simpara><varname>loginname:</varname><varname>password:</varname><varname>uid:</varname><varname>gid:</varname><varname>gecos:</varname><varname>homedir:</varname><varname>shell</varname></simpara>

      <para>
<itemizedlist>
	  <listitem><para><foreignphrase>loginname</foreignphrase> : le nom de login de l'utilisateur.</para></listitem>

	  <listitem><para><foreignphrase>password</foreignphrase> : le mot de passe hashé, initialisé au caractère *.</para></listitem>

	  <listitem><para><foreignphrase>uid</foreignphrase> : identifiant utilisateur. Entier non signé codé sur quatre octets [0, 4294967296]. La valeur 0 donne les privilèges d'administration système, les valeurs inférieurs à 10 sont, par convention, réservées à des comptes systèmes. Généralement, un utilisateur standard possède un uid supérieur à 100. Pour des raisons d'interoperabilité, il convient de se limiter aux 65536 premières valeurs. </para></listitem>

	  <listitem><para><foreignphrase>gid</foreignphrase> : identifiant du groupe principal de l'utilisateur. Entier non signé codé sur quatre octets mais dontl'usage est limité, comme précédemment. Les valeurs inférieures à 10 sont réservées aux groupes systèmes .</para></listitem>

	  <listitem><para><foreignphrase>gecos</foreignphrase> : zone de commentaire. On y met généralement le nom réel de l'utilisateur. Ce champ est utilisé par les commandes <command>chfn</command>, <command>mail</command> et <command>finger</command>.</para></listitem>

	  <listitem><para><foreignphrase>homedir</foreignphrase> : répertoire de domiciliation de l'utilisateur.</para></listitem>
	  <listitem><para><foreignphrase>shell</foreignphrase> : nom de l'interpréteur de commandes. Modifiable par la commande <command>chfn</command>.</para></listitem>
	</itemizedlist>
</para>


      <para> Voici un exemple de fichier &fpasswd; d'un système FreeBSD obtenu à partir du fichier &mpasswd; :
<programlisting width="80">
<![CDATA[
# $FreeBSD: src/etc/master.passwd,v 1.40 2005/06/06 20:19:56 brooks Exp $
#
root:*:0:0:Charlie &:/root:/bin/csh
toor:*:0:0:Bourne-again Superuser:/root:
daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5:System &:/:/usr/sbin/nologin
bin:*:3:7:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13:Games pseudo-user:/usr/games:/usr/sbin/nologin
news:*:8:8:News Subsystem:/:/usr/sbin/nologin
man:*:9:9:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
sshd:*:22:22:Secure Shell Daemon:/var/empty:/usr/sbin/nologin
smmsp:*:25:25:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin
mailnull:*:26:26:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin
bind:*:53:53:Bind Sandbox:/:/usr/sbin/nologin
proxy:*:62:62:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin
_pflogd:*:64:64:pflogd privsep user:/var/empty:/usr/sbin/nologin
_dhcp:*:65:65:dhcp programs:/var/empty:/usr/sbin/nologin
uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico
pop:*:68:6:Post Office Owner:/nonexistent:/usr/sbin/nologin
www:*:80:80:World Wide Web Owner:/nonexistent:/usr/sbin/nologin
nobody:*:65534:65534:Unprivileged user:/nonexistent:/usr/sbin/nologin
]]>
ikare<co id="c-login" linkends="login" />:*<co id="c-passwd" linkends="passwd" />:2323<co id="c-uid" linkends="uid" />:2323<co id="c-gid" linkends="gid" />:Ivan K;<co id="c-gecos" linkends="gecos" />:/home/ikare<co id="c-home" linkends="home" />:/bin/tcsh<co id="c-shell" linkends="shell" />
<![CDATA[
squid:*:100:100:squid caching-proxy pseudo user:/usr/local/squid:/usr/sbin/nologin
]]>
</programlisting>

<calloutlist>
	  <callout arearefs="c-login" id="login">
	    <para><foreignphrase>login</foreignphrase>.</para>
	  </callout>

	  <callout arearefs="c-passwd" id="passwd">
	    <para><foreignphrase>password</foreignphrase>.</para>
	  </callout>

	  <callout arearefs="c-uid" id="uid">
	    <para><foreignphrase>uid</foreignphrase>.</para>
	  </callout>

	  <callout arearefs="c-gid" id="gid">
	    <para><foreignphrase>gid</foreignphrase>.</para>
          </callout>

	  <callout arearefs="c-gecos" id="gecos">
	    <para><foreignphrase>gecos</foreignphrase>.</para>
          </callout>

	  <callout arearefs="c-home" id="home">
	    <para><foreignphrase>homedir</foreignphrase>.</para>
          </callout>

	  <callout arearefs="c-shell" id="shell">
	    <para><foreignphrase>shell</foreignphrase>.</para>
          </callout>
</calloutlist>
</para>
      
      <para>Le fichier &fpasswd; stockent les mots de passe sous forme hashée. Une fonction de hashage a la propriété d'être difficillement inversible, &ie; s'il est relativement aisé, connaissant l'algorithme de hashage, de calculer à partir d'un mot de passe en clair son hashage correspondant, la réciproque est un problème <emphasis>très</emphasis> difficile.</para>

      <para>A la création d'un nouveau compte une étoile est placée dans le deuxième champ (passwd) du fichier &fpasswd;, elle permet d'empêcher l'accès au compte tant qu'un mot de passe n'est pas défini. <emphasis role="bold">Ce champ ne doit jamais être vide !</emphasis></para>

      <para>Le standard d'encryptage, par défaut, des mots de passe est DES, lequel n'encode que les 8 premiers caractères d'un mot de passe. Il est désormais considéré comme insuffisant au regard de la puissance de calcul d'un simple PC de bureau et c'est pourquoi les distributions &glinux; propose une alternative : le hashage <emphasis>MD5</emphasis>. De fait, <emphasis>MD5</emphasis> n'est pas meilleur que DES (du point de vue cryptographique), mais <emphasis>MD5</emphasis> n'impose pas de limite sur la longueur du mot de passe. Un mot de passe long est plus dur à casser donc plus sûr. &fbsd; de son côté utilise le hashage <emphasis>MD5</emphasis> par défaut, on peut éventuellement le remplacer par un autre algorithme tel que <emphasis>blowfish</emphasis> (&cf; le fichier <filename>/etc/login.conf</filename>, ligne <computeroutput>:passwd_format= ...</computeroutput>).</para>
      <note>
	<para>Avec &deb; &glinux; le système propose d'activer à l'installation l'encodage des mots de passe par <emphasis>MD5</emphasis>, valider toujours ce choix.</para>
      </note>
    </sect2>

    <sect2>
      <title>Analyse du fichier <filename>/etc/group</filename></title>
      <para>Ce fichier référence l'ensemble des groupes du système. Une ligne concerne un groupe et elle est structurée en quatre champs : </para>
      <simpara><varname>groupname:</varname><varname>password:</varname><varname>gid:</varname><varname>member, ...</varname></simpara>

      <para>
<itemizedlist>
	  <listitem><para><foreignphrase>groupname</foreignphrase> : le nom du groupe.</para></listitem>
	  
	  <listitem><para><foreignphrase>password</foreignphrase> : le mot de passe hashé, initialisé au caractère *. En général, on n'utilise pas de mot de passe de groupe.</para></listitem>
	  
	  <listitem><para><foreignphrase>gid</foreignphrase> : identifiant du groupe. Entier codé sur deux octets. Les valeurs inférieures à 10 sont réservées aux groupes systèmes .</para></listitem>
	  
	  <listitem><para><foreignphrase>member, ...</foreignphrase> : liste des membres du groupe.</para></listitem>
	</itemizedlist>
</para>
      
      <para>
<programlisting>
<![CDATA[
# $FreeBSD: src/etc/group,v 1.32.2.1 2006/03/06 22:23:10 rwatson Exp $
#
wheel:*:0:root
daemon:*:1:
kmem:*:2:
sys:*:3:
tty:*:4:
operator:*:5:root
mail:*:6:
bin:*:7:
news:*:8:
man:*:9:
games:*:13:
staff:*:20:
sshd:*:22:
smmsp:*:25:
mailnull:*:26:
guest:*:31:
bind:*:53:
proxy:*:62:
authpf:*:63:
_pflogd:*:64:
_dhcp:*:65:
uucp:*:66:
dialer:*:68:
network:*:69:
audit:*:77:
www:*:80:
nogroup:*:65533:
nobody:*:65534:
fremens:*:2323:ikare
squid:*:100:

]]>
</programlisting>

</para>
    </sect2>

    <sect2>
      <title>Sécurisation des comptes</title>
      <para>Historiquement, les mots de passe étaient stockés dans le fichier &fpasswd; (universellement accessible en lecture)<footnote>
<para>Le <quote>jeu</quote> consistait à récupérer une copie du fichier &fpasswd; puis à faire tourner un programme de <quote>crack</quote>. Ce dernier passe en revue un dictionnaire de mots de passe qu'il hashe un à un et compare au hashage présent dans le fichier des mots de passe. En cas d'égalité on a retrouvé le mot de passe (la fonction de hashage est injective). Ce genre de programme parcourt donc l'espace des mots de passe possible ; il lui faut donc de la puissance de calcul et du temps. Or les PC de bureau d'aujourd'hui ont une puissance de calcul non négligeable !</para>
	</footnote>
, mais à mesure que les ordinateurs ont gagné en performance, il est devenu extrêmement dangereux de les laisser dans ce fichier. </para>


      <sect3>
	<title>&glinux;</title>
	<para>&glinux; propose désormais de stocker les mots de passe dans un fichier à part : &fshadow; (uniquement accessible au <emphasis>super</emphasis>-utilisateur. Ce mécanisme communément appelé <quote><foreignphrase>shadow password</foreignphrase></quote> est disponible sur toutes les distributions. En particulier, sur &deb; cette option est explicitement proposée au moment de l'installation, il convient de l'adopter. La seule contre-indication à l'utilisation de cette stratégie concerne l'éventuel usage de votre machine comme serveur NIS/NFS.</para>

	<para>Quand cette stratégie est activée, le champ mot de passe (deuxième champ) du fichier &fpasswd; est marqué par un x. Le fichier &fshadow; contient donc l'encodage (ou hashage) des mots de passe et fournit des services supplémentaires non disponibles dans &fpasswd;. Attention, les deux fichiers sont nécessaires, l'un ne remplaçant pas l'autre !</para>
	<para>Le fichier &fshadow; est un fichier texte qui contient une ligne par utilisateur. Il est structuré en neuf champs, comme suit :</para>

	<simpara><varname>loginname:</varname><varname>password:</varname><varname>lcdate:</varname><varname>mindays:</varname><varname>maxdays:</varname><varname>ndays1:</varname><varname>ndays2:</varname><varname>expiration:</varname><varname>reserved</varname></simpara>
	
	<para>La sémantique associée à ces champs est la suivante :
<itemizedlist>
	    <listitem><para><foreignphrase>loginname</foreignphrase> : le nom de login de l'utilisateur, identique à celui du fichier &fpasswd; il permet ainsi d'établir le lien entre les deux fichiers.</para></listitem>
	    <listitem><para><foreignphrase>password</foreignphrase> : le hashage du mot de passe. S'il s'agit d'un hashage <emphasis>MD5</emphasis>, il commence par la séquence $1$.</para></listitem>
	    <listitem><para><foreignphrase>lcdate</foreignphrase> : date du dernier changement de mot de passe, exprimée relativement au temps <trademark>Unix</trademark>, exprimé en jours, &ie; nombre de jours écoulés depuis le 1<superscript>er</superscript> Janvier 1970. Généralement rempli par la commande <command>/usr/bin/passwd</command></para></listitem>
	    <listitem><para><foreignphrase>mindays</foreignphrase> : Intervalle minimum de jours entre deux changements de mot de passe. Généralement positionné à 0, pour signifier qu'il n'y a pas d'intervalle. </para></listitem>
	    <listitem><para><foreignphrase>maxdays</foreignphrase> : Intervalle maximum de jours entre deux changements de mot de passe. Cela permet donc à l'administrateur de renforcer la stratégie de limitation dans le temps des mots de passe. Le délai maximun est obtenu comme somme de ce champ et du 7<superscript>e</superscript>. </para></listitem>
	    <listitem><para><foreignphrase>ndays1</foreignphrase> : Nombre de jours, pour prévenir l'utilisateur, avant l'expiration du mot de passe.</para></listitem>
	    <listitem><para><foreignphrase>ndays2</foreignphrase> : Nombre de jours s'écoulant entre l'expiration du mot de passe et la désactivation du compte.</para></listitem>
	    <listitem><para><foreignphrase>expiration</foreignphrase> : Date d'expiration effective du compte, en nombre de jour depuis le 1<superscript>er</superscript> Janvier 1970.</para></listitem>
	    <listitem><para><foreignphrase>reserved</foreignphrase> : Champ réservé pour un usage futur, vide pour le moment.</para></listitem>
	  </itemizedlist>
</para>

<para> Un exemple typique de ligne extraite du fichier &fshadow; : 
<programlisting>

ikare:$1$wIZyw9H3u$Q7T2rxyPVKAlabue$.1n0:12144<co id="c-lastchg" linkends="lastchg" />:0:180<co id="c-ndays" linkends="ndays" />:7<co id="c-timeout" linkends="timeout" />::12294<co id="c-expir" linkends="expir" />:                  

</programlisting>

<calloutlist>
	    <callout arearefs="c-lastchg" id="lastchg">
	      <para>Le dernier changement de mot de passe a eu lieu le 2 avril 2003 (12144 jours depuis 01.01.1970) <!-- </command>date -r 1049241600</command>, ou 12144 jours depuis 01.01.1970 = 12144 * 24 * 3600 =  1049241600 secondes. -->.</para>
	    </callout>

	    <callout arearefs="c-ndays" id="ndays">
	      <para>Le mot de passe a une validité de 180 jours.</para>
	    </callout>	  
    
	    <callout arearefs="c-timeout" id="timeout">
	      <para>Il y a un délai de 7 jours pour changer le mot de passe.</para>
	    </callout>	      
	    
	    <callout arearefs="c-expir" id="expir">
	      <para>Le compte expire le 30 août 2003 (12294 jours depuis le 01.01.1970).</para>
	    </callout>	      

</calloutlist>
</para>

<para>Il existe un fichier <filename>/etc/gshadow</filename> dont le rôle est similaire à celui du fichier <filename>/etc/shadow</filename>, en pratique peu ou pas utilisé. On active rarement (voir jamais, par convention) les mots de passe de groupe. </para>

      </sect3>

      <sect3>
	<title>xBSD</title>
	<para>Les <foreignphrase>flavors</foreignphrase> xBSD stockent les comptes utilisateurs au sein du fichier &mpasswd;, uniquement accessible au <emphasis>super</emphasis>-utilisateur. Ce fichier est utilisé pour générer automatiquement le fichier &fpasswd;.</para>
	
	<para>Ce fichier est au format texte et contient une ligne par utilisateur. Il est structuré en dix champs, comme suit :</para>

	<simpara><varname>loginname:</varname><varname>password:</varname><varname>uid:</varname><varname>gid:</varname><varname>userclass:</varname><varname>change:</varname><varname>expire:</varname><varname>gecos:</varname><varname>homedir</varname>:<varname>shell</varname></simpara>

	<para>La sémantique associée à ces champs est la suivante :
<itemizedlist>
	    <listitem><para><foreignphrase>loginname</foreignphrase> : le nom de login de l'utilisateur</para></listitem>
	    <listitem><para><foreignphrase>password</foreignphrase> : le hashage du mot de passe, préfixé par la séquence $1$ s'il s'agit d'un hashage <emphasis>md5</emphasis> ou d'un $2$ s'il s'agit d'un hashage <emphasis>blowfish</emphasis>.</para></listitem>
	    <listitem><para><foreignphrase>uid</foreignphrase> : identifiant utilisateur.</para></listitem>
	    <listitem><para><foreignphrase>gid</foreignphrase> : identifiant du groupe principal.</para></listitem>
	    <listitem><para><foreignphrase>userclass</foreignphrase> : classe d'appartenance de l'utilisateur telle que définie dans le fichier <filename>/etc/login.conf</filename>.</para></listitem>
	    <listitem><para><foreignphrase>change</foreignphrase> : exprimé en nombre de secondes à partir de l'origine des temps <token>Unix</token> (1<superscript>er</superscript> Janvier 1970 [<foreignphrase>Epoch</foreignphrase>]), donne la date d'expiration du présent mot de passe. Si la valeur est à zéro, il n'y a pas d'expiration du mot de passe.</para></listitem>
	    <listitem><para><foreignphrase>expire</foreignphrase> : même unité que précédement, mais exprimant la date d'expiration du compte. Si la valeur est à zéro, il n'y a pas d'expiration du compte.</para></listitem>
	    <listitem><para><foreignphrase>gecos</foreignphrase> : zone de commentaire, nom réel de l'utilisateur ...</para></listitem>
	    <listitem><para><foreignphrase>homedir</foreignphrase> : répertoire de domiciliation de l'utilisateur.</para></listitem>
	    <listitem><para><foreignphrase>shell</foreignphrase> : interpréteur de commande de l'utilisateur.</para></listitem>
	  </itemizedlist>
</para>

	<para> Un exemple typique de ligne extraite du fichier &mpasswd; : 
<programlisting>
ikare:$1$iIVcBt5z$y0qex.EtFzuwBYwN2dZjj1:2323:2323::1179450000<co id="c-ndays2" linkends="ndays2" />:0<co id="c-timeout2" linkends="timeout2" />:Ivan K;:/home/ikare:/bin/sh


</programlisting>
<calloutlist>
	    <callout arearefs="c-ndays2" id="ndays2">
	      <para>Expiration du présent mot de passe le 18 Mai 2007 à 05:00:00 (<computeroutput>date -r 11794500000</computeroutput>).</para>
	    </callout>	  
    
	    <callout arearefs="c-timeout2" id="timeout2">
	      <para>Pas d'expiration du compte.</para>
	    </callout>	      
</calloutlist>
</para>
      </sect3>

<!-- 
      <sect3>
	<title>hashage</title>
	<para> hashage md5 et blowfish.</para>
	<para> &todo; la suite .... </para>
      </sect3>
-->
    </sect2>



    <sect2>
      <title>Commandes de gestion des utilisateurs</title>

      <para>Dans ce qui suit les commandes sont préfixées par un # qui symbolise un accès <emphasis>super</emphasis>-utilisateur (<emphasis>root</emphasis>). Le mot qui qui précède ce caractère est le nom de machine (<literal>tux</literal> pour &glinux; et <literal>chuck</literal> pour &fbsd;).</para>

      <warning><para>Vous pouvez tester les commandes en utilisant l'accès étendu <command>sudo</command>, néanmoins je vous prie instamment de faire une copie initiale des fichiers que vous allez modifier. Puis quand vous aurez terminé ce paragraphe, de restaurer les fichiers dans leur état initiaux.</para></warning>
      
      <sect3>
	<title>Gérer les utilisateurs avec <command>user{add,mod,del}</command> sous &glinux;</title>
	<formalpara>
	  <title>Première forme de la commande <emphasis>useradd</emphasis> :</title>
	  <para>Invoquée sous cette forme, la commande créée un nouveau compte utilisateur en utilisant les valeurs spécifiées (sur la ligne de commande) et les valeurs système par défaut si les options ne sont pas précisées. Selon les options choisies, le nouveau compte sera crée et des fichiers initiaux seront copiés dans son espace de travail.
<programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis cmdlength='3'>                                                                                
	      <command>useradd</command>
	      <arg>-c <replaceable>comment</replaceable></arg>
	      <arg>-d <replaceable>homedir</replaceable></arg>
	      <arg>-e <replaceable>expire_date</replaceable></arg>
	      <arg>-f <replaceable>inactive_date</replaceable></arg>
	      <sbr/>
	      <arg>-g <replaceable>initial_group</replaceable></arg>
	      <arg>-G <replaceable>group</replaceable> <arg><arg rep='repeat' choice='plain'>,</arg></arg> </arg>
	      <arg>-m <arg>-k <replaceable>skel_dir</replaceable></arg></arg>
	      <sbr/>
	      <arg>-p <replaceable>passwd</replaceable></arg>
	      <arg>-s <replaceable>shell</replaceable></arg>
	      <arg>-u <replaceable>uid</replaceable><arg>-o</arg></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>login</replaceable></arg>
	    </cmdsynopsis>
<emphasis>EXEMPLE : ajouter un utilisateur.</emphasis>
<![CDATA[
tux:/# useradd -c "Bernard's Account" -d /home/.bernard -e "2003-08-31" -s \    
/bin/bash -u 668 -g gnu -G operator -m bernard
tux:/# passwd bernard
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
tux:/#
]]>
</programlisting>
</para>
	</formalpara>
	
	<formalpara>
	  <title>Deuxième forme de la commande <emphasis>useradd</emphasis> :</title>
	  <para>Cette deuxième forme permet de lister les paramètres par défaut ou modifier les valeurs par défaut à partir des valeurs données en ligne de commande.
<programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis cmdlength='2'>
	      <command>useradd</command>
	      <arg choice='plain'>-D </arg>
	      <arg>-g <replaceable>default_group</replaceable></arg>
	      <arg>-b <replaceable>default_home</replaceable></arg>
	      <arg>-f <replaceable>default_inactive</replaceable></arg>
	      <sbr/>
	      <arg>-e <replaceable>expire_date</replaceable></arg>
	      <arg>-s <replaceable>default_shell</replaceable></arg>
	    </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis> Lister les paramètres par défaut, puis modifier trois des paramètres.
<![CDATA[
tux:/#  useradd -D                                                              
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel

tux:/#  useradd -D -g 200 -s /bin/tcsh  -e "2003-12-31"
tux:/#  useradd -D
GROUP=200
HOME=/home
INACTIVE=-1
EXPIRE=2003-12-31
SHELL=/bin/tcsh
SKEL=/etc/skel
]]>
</programlisting></para>
	</formalpara>
	
	<formalpara>
	  <title><emphasis>usermod</emphasis></title>
	  <para>La commande <command>usermod</command> permet de modifier les caractéristiques d'un utilisateur.
<programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis cmdlength='3'>
		  <command>usermod</command>
	      <arg>-c <replaceable>comment</replaceable></arg>
	      <arg>-d <replaceable>homedir</replaceable> <arg>-m</arg></arg>
	      <arg>-e <replaceable>expire_date</replaceable></arg>
	      <arg>-f <replaceable>inactive_date</replaceable></arg>		  
	      <sbr/>
	      <arg>-g <replaceable>initial_group</replaceable></arg>
	      <arg>-G <replaceable>group</replaceable> <arg><arg rep='repeat' choice='plain'>,</arg></arg> </arg>
	      <arg>-l <replaceable>loginname</replaceable></arg>
	      <arg>-p <replaceable>passwd</replaceable></arg>
	      <sbr/>
	      <arg>-s <replaceable>shell</replaceable></arg>
	      <arg>-u <replaceable>uid</replaceable><arg>-o</arg></arg>
	      <group>
		<arg choice="plain" rep="norepeat">-L</arg>
		<arg choice="plain" rep="norepeat">-U</arg>
	      </group>
	      <arg rep='norepeat' choice='plain'><replaceable>login</replaceable></arg>
	    </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis> Ajouter l'utilisateur <emphasis>pascal</emphasis> dans le groupe <emphasis>operator</emphasis> 
(il est déjà membre du groupe principal <emphasis>gnu</emphasis> et des groupes <emphasis>root</emphasis> et <emphasis>staff</emphasis>) 
et lui mettre une date d'expiration au 31.12.2003 :
<![CDATA[
tux:/# usermod -G root,staff,operator -e 2003-12-31 pascal                      
]]>
</programlisting>
</para>
	</formalpara>
	
	<formalpara>
	  <title><command>userdel</command></title>
	  <para>La commande <command>userdel</command> permet d'enlever un compte utilisateur (s'il existe). L'option <option>-r</option> permet en plus la suppression du contenu et du répertoire de domiciliation de l'utilisateur, ainsi que son répertoire de mail.
<programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
		  <!-- one of (sbr group arg command) -->
		  <command>userdel</command>
		  <arg>-r</arg>
		  <arg rep='norepeat' choice='plain'><replaceable>login</replaceable></arg>
		</cmdsynopsis>
<emphasis>EXEMPLE :</emphasis> Enlever un utlisateur
<![CDATA[
tux:/# userdel -r  bernard                                                      
]]>
</programlisting>
</para>
	</formalpara>
      </sect3>

      <sect3>
	<title>Gérer les groupes avec <command>group{add,mod,del}</command> sous &glinux;</title>
	<formalpara>
	  <title><emphasis>groupadd</emphasis></title>
	  <para> La commande <command>groupadd</command> permet de créer un nouveau groupe.
<programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis cmdlength='1'>
	      <command>groupadd</command>
	      <arg>-g <replaceable>gid</replaceable> <arg>-o</arg></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>login</replaceable></arg>
	    </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis> Ajouter un groupe
<![CDATA[
tux:/# groupadd -g 666 gnu                                                      
]]>
</programlisting>
      </para>
	</formalpara>
      
      <formalpara>
	  <title><emphasis>groupmod</emphasis></title>
	  <para>La commande <command>groupmod</command> permet de modifier les paramètres d'un groupe.
<programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
		  <!-- one of (sbr group arg command) -->
		  <command>groupmod</command>
		  <arg>-g <replaceable>gid</replaceable><arg>-o</arg></arg>
		  <arg>-n <replaceable>group_name</replaceable></arg>
		  <arg rep='norepeat' choice='plain'><replaceable>group</replaceable></arg>
		</cmdsynopsis>
<emphasis>EXEMPLE :</emphasis> Modfier le <emphasis>gid</emphasis> du groupe <emphasis>gnu</emphasis>.
<![CDATA[
tux:/# groupmod -g 667 gnu                                                      
]]>
</programlisting>
</para>
	</formalpara>	
	
      <formalpara>
	<title><emphasis>groupdel</emphasis></title>
	  <para>La commande <command>groupdel</command>, enlève un groupe (s'il existe).
<programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
	      <!-- one of (sbr group arg command) -->
	    <command>groupdel</command>
	    <arg rep='norepeat' choice='plain'><replaceable>group</replaceable></arg>
	  </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis> Enlever le groupe <emphasis>gnu</emphasis>.
<![CDATA[
tux:/# groupdel gnu                                                              
]]>
</programlisting></para>
	</formalpara>
      </sect3>


      
      <!-- FREEBSD -->
      <sect3>
	<title>Cas particulier de &fbsd;</title>
	<para>La commande <command>pw</command> permet au <emphasis>super</emphasis>-utilisateur de gérer simplement les utilisateurs. Sa syntaxe est très proche de ces homologues <quote>Linuxienne</quote>. Cette commande fait les mises-à-jour dans les fichiers <filename>/etc/passwd</filename>, <filename>/etc/master.passwd</filename> et <filename>/etc/group</filename>. sous &obsd;, par contre on utilise les mêmes commandes que pour &glinux;</para>
	
	<itemizedlist>
	  <listitem><para> Première forme de la commande <command>pw useradd</command> : </para>
	
<programlisting>
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis cmdlength='3'>
		    <command>pw</command>
		    <arg>-V <replaceable>etcdir</replaceable></arg>
		    <arg rep='norepeat' choice='plain'><replaceable>useradd</replaceable></arg>
		    <group>
		      <arg choice="plain" rep="norepeat"><replaceable>name</replaceable></arg>
		      <arg choice="plain" rep="norepeat"><replaceable>uid</replaceable></arg>	      
		    </group>
		    <arg>-C <replaceable>config</replaceable></arg>
		    <arg>-q</arg>
		    <arg>-n <replaceable>name</replaceable></arg>
		    <arg>-u <replaceable>uid</replaceable></arg>
		    <sbr/>
		    <arg>-c <replaceable>comment</replaceable></arg>
		    <arg>-d <replaceable>dir</replaceable></arg>
		    <arg>-e <replaceable>date</replaceable></arg>
		    <arg>-p <replaceable>date</replaceable></arg>
		    <arg>-g <replaceable>group</replaceable></arg>
		    <arg>-G <replaceable>grouplist</replaceable></arg>
		    <sbr/>
		    <arg>-m</arg>
		    <arg>-k <replaceable>dir</replaceable></arg>
		    <arg>-w <replaceable>method</replaceable></arg>
		    <arg>-s <replaceable>shell</replaceable></arg>
		    <arg>-o</arg>
		    <arg>-L <replaceable>class</replaceable></arg>
		    <arg>-h <replaceable>fd</replaceable></arg>
		    <arg>-N</arg>
		    <arg>-P</arg>
		    <arg>-Y</arg>
		  </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis> Créer un nouvel utilisateur et lui attribuer un mot de passe 
<command>passwd</command> :
<![CDATA[
salusa# pw useradd ivan -u 2324 -c "Ivan" -d /home/.ivan \
-e "31-05-2007" -g fremens -G wheel,operator -m -s /bin/tcsh -N
ivan:*:2324:2323::0:1180555200:Ivan:/home/.ivan:/bin/tcsh
salusa# pw useradd ivan -u 2324 -c "Ivan" -d /home/.ivan \ 
-e "31-05-2007" -g fremens -G wheel,operator -m -s /bin/tcsh
salusa# passwd ivan
Changing local password for ivan
New Password:
Retype New Password:
salusa# 
]]>
</programlisting></listitem>
	</itemizedlist>

<itemizedlist>
	  <listitem><para> Deuxième forme de la commande <command>pw useradd</command> (sémantique équivalente à son homologue &linux;), qui permet de spécifier les valeurs par défauts (<emphasis>-D</emphasis>) : </para>

<programlisting>
<emphasis>SYNOPSIS :</emphasis>
                                                                                
<cmdsynopsis cmdlength='3'>
		    <!-- one of (sbr group arg command) -->
		    <command>pw</command>
		    <arg>-V <replaceable>etcdir</replaceable></arg>
		    <arg rep='norepeat' choice='plain'><replaceable>useradd</replaceable></arg>
		    <group>
		      <arg choice="plain" rep="norepeat"><replaceable>name</replaceable></arg>
		      <arg choice="plain" rep="norepeat"><replaceable>uid</replaceable></arg>	      
		    </group>
		    <arg rep='norepeat' choice='plain'>-D</arg>
		    <arg>-C <replaceable>config</replaceable></arg>
		    <arg>-q</arg>
		    <arg>-b <replaceable>dir</replaceable></arg>
		    <sbr/>
		    <arg>-e <replaceable>days</replaceable></arg>
		    <arg>-p <replaceable>days</replaceable></arg>
		    <arg>-g <replaceable>group</replaceable></arg>
		    <arg>-G <replaceable>grouplist</replaceable></arg>
		    <arg>-k <replaceable>dir</replaceable></arg>
		    <arg>-u <replaceable>min,max</replaceable></arg>
		    <sbr/>
		    <arg>-i <replaceable>min,max</replaceable></arg>
		    <arg>-w <replaceable>method</replaceable></arg>
		    <arg>-s <replaceable>shell</replaceable></arg>
		    <arg>-y <replaceable>path</replaceable></arg>
		  </cmdsynopsis>
</programlisting>
</listitem>
</itemizedlist>
<itemizedlist>	    
	    <listitem><para> <command>pw usershow</command></para>
<programlisting>
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis cmdlength="2">
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>usershow</replaceable></arg>
	      <group>
		<arg choice="plain" rep="norepeat"><replaceable>name</replaceable></arg>
		<arg choice="plain" rep="norepeat"><replaceable>uid</replaceable></arg>	      
	      </group>
	      <arg>-n <replaceable>name</replaceable></arg>
	      <arg>-u <replaceable>uid</replaceable></arg>
	      <arg>-F</arg>
	      <arg>-P</arg>
	      <sbr/>
	      <arg>-7</arg>
	      <arg>-a</arg>
	      <sbr/>
	    </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis> Vérifier la présence de l'utilisateur <emphasis>bernard</emphasis> :
<![CDATA[
salusa# pw usershow ivan -P
Login Name: ivan              #2324         Group: fremens           #2323
 Full Name: Ivan
      Home: /home/.ivan                     Class: 
     Shell: /bin/tcsh                      Office: [None]
Work Phone: [None]                     Home Phone: [None]
Acc Expire: Thu May 31 00:00:00 2007   Pwd Expire: [None]
    Groups: wheel,operator
salusa# 
]]>
</programlisting>
</listitem>
</itemizedlist>

<itemizedlist>	
	    <listitem><para>La commande <command>pw usernext</command> permet d'obtenir le prochain couple uid/gid disponible (séparé par les <quote>:</quote>) :</para>

<programlisting>
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>usernext</replaceable></arg>
	      <arg>-C <replaceable>config</replaceable></arg>
	      <arg>-q</arg>
	      <sbr/>
	    </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis>
<![CDATA[
salusa# pw usernext 
2325:2324
salusa# 
]]>
</programlisting>
</listitem>
	  </itemizedlist>

<itemizedlist>	
	    <listitem><para>La commande <command>pw usermod</command> :</para>	

<programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
		    <command>pw</command>
		    <arg>-V <replaceable>etcdir</replaceable></arg>
		    <arg rep='norepeat' choice='plain'><replaceable>usermod</replaceable></arg>
		    <group>
		      <arg choice="plain" rep="norepeat"><replaceable>name</replaceable></arg>
		      <arg choice="plain" rep="norepeat"><replaceable>uid</replaceable></arg>	      
		    </group>
		    <arg>-C <replaceable>config</replaceable></arg>
		    <arg>-q</arg>
		    <arg>-n <replaceable>name</replaceable></arg>
		    <arg>-u <replaceable>uid</replaceable></arg>
		    <sbr/>
		    <arg>-c <replaceable>comment</replaceable></arg>
		    <arg>-d <replaceable>dir</replaceable></arg>
		    <arg>-e <replaceable>date</replaceable></arg>
		    <arg>-p <replaceable>date</replaceable></arg>
		    <arg>-g <replaceable>group</replaceable></arg>
		    <arg>-G <replaceable>grouplist</replaceable></arg>
		    <sbr/>
		    <arg>-l <replaceable>name</replaceable></arg>
		    <arg>-m</arg>
		    <arg>-k <replaceable>dir</replaceable></arg>
		    <arg>-w <replaceable>method</replaceable></arg>
		    <arg>-s <replaceable>shell</replaceable></arg>
		    <arg>-L <replaceable>class</replaceable></arg>
		    <arg>-h <replaceable>fd</replaceable></arg>
		    <arg>-N</arg>
		    <arg>-P</arg>
		    <arg>-Y</arg>
		  </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis>
<![CDATA[
salusa# pw usermod -G wheel,operator,daemon,sys -n ivan
salusa#                        
]]>
</programlisting>
</listitem>
</itemizedlist>

<itemizedlist>	
	    <listitem><para>La commande <command>pw userdel</command> : </para>

<programlisting>
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>userdel</replaceable></arg>
	      <group>
		<arg choice="plain" rep="norepeat"><replaceable>name</replaceable></arg>
		<arg choice="plain" rep="norepeat"><replaceable>uid</replaceable></arg>	      
	      </group>
	      <arg>-n <replaceable>name</replaceable></arg>
	      <arg>-u <replaceable>uid</replaceable></arg>
	      <arg>-r</arg>
	      <arg>-Y</arg>
	    </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis>
<![CDATA[
chuck# pw userdel -n ivan                                                  
]]>
</programlisting>
</listitem>
</itemizedlist>	
<itemizedlist>
	    <listitem><para>La première forme de la commande <command>pw groupadd</command> :</para>

<programlisting>
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>groupadd</replaceable></arg>
	      <group>
		<arg choice="plain" rep="norepeat"><replaceable>group</replaceable></arg>
		<arg choice="plain" rep="norepeat"><replaceable>gid</replaceable></arg>	      
	      </group>
	      <arg>-C <replaceable>config</replaceable></arg>
	      <arg>-q</arg>
	      <arg>-n <replaceable>group</replaceable></arg>
	      <arg>-g <replaceable>gid</replaceable></arg>
	      <sbr/>
	    </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis>
<![CDATA[
chuck# pw groupadd -g 999 -n trainees                                                
]]>
</programlisting>
</listitem>
	  </itemizedlist>
<itemizedlist>
	    <listitem><para>La deuxième forme de la commande <command>pw groupadd</command> :</para>

<programlisting>
<emphasis>SYNOPSIS :                                                                     &nbsp;</emphasis>
                                                                                
<cmdsynopsis>
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>groupadd</replaceable></arg>
	      <group>
		<arg choice="plain" rep="norepeat"><replaceable>group</replaceable></arg>
		<arg choice="plain" rep="norepeat"><replaceable>gid</replaceable></arg>	      
	      </group>
	      <arg>-C <replaceable>config</replaceable></arg>
	      <arg>-q</arg>
	      <arg>-n <replaceable>group</replaceable></arg>
	      <arg>-g <replaceable>gid</replaceable></arg>
	      <sbr/>
	      <arg>-M <replaceable>members</replaceable></arg>
	      <arg>-o</arg>
	      <arg>-h <replaceable>fd</replaceable></arg>
	      <arg>-N</arg>
	      <arg>-P</arg>
	      <arg>-Y</arg>
	    </cmdsynopsis>
</programlisting>

</listitem>
	  </itemizedlist>
<itemizedlist>	
	    <listitem><para>La commande <command>pw groupdel</command> :</para>
<programlisting>
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>groupdel</replaceable></arg>
	      <group>
		<arg choice="plain" rep="norepeat"><replaceable>group</replaceable></arg>
		<arg choice="plain" rep="norepeat"><replaceable>gid</replaceable></arg>	      
	      </group>
	      <arg>-C <replaceable>config</replaceable></arg>
	      <arg>-q</arg>
	      <arg>-n <replaceable>group</replaceable></arg>
	      <arg>-g <replaceable>gid</replaceable></arg>
	      <sbr/>
	    </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis>
<![CDATA[
chuck# pw groupdel trainees 
]]>
... ou bien ...                                                                 
<![CDATA[
chuck# pw groupdel -g 999
]]>
</programlisting>
</listitem>
	  </itemizedlist>
<itemizedlist>
	    <listitem><para>La commande <command>pw groupmod</command> :</para>

<programlisting>
<emphasis>SYNOPSIS :</emphasis>
                                                                                
<cmdsynopsis>
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>groupmod</replaceable></arg>
	      <group>
		<arg choice="plain" rep="norepeat"><replaceable>group</replaceable></arg>
		<arg choice="plain" rep="norepeat"><replaceable>gid</replaceable></arg>	      
	      </group>
	      <arg>-C <replaceable>config</replaceable></arg>
	      <arg>-q</arg>
	      <arg>-n <replaceable>group</replaceable></arg>
	      <arg>-g <replaceable>gid</replaceable></arg>
	      <sbr/>
	      <arg>-l <replaceable>name</replaceable></arg>
	      <arg>-M <replaceable>members</replaceable></arg>
	      <arg>-m <replaceable>newmembers</replaceable></arg>
	      <arg>-h <replaceable>fd</replaceable></arg>
	      <arg>-N</arg>
	      <arg>-P</arg>
	      <arg>-Y</arg>
	    </cmdsynopsis>
</programlisting>
</listitem>
	  </itemizedlist>

<itemizedlist>
	    <listitem><para>La commande <command>pw groupshow</command> :</para></listitem>
	  </itemizedlist>
<programlisting>
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>groupshow</replaceable></arg>
	      <group>
		<arg choice="plain" rep="norepeat"><replaceable>group</replaceable></arg>
		<arg choice="plain" rep="norepeat"><replaceable>gid</replaceable></arg>	      
	      </group>
	      <arg>-g <replaceable>name</replaceable></arg>
	      <arg>-g <replaceable>gid</replaceable></arg>
	      <arg>-F</arg>
	      <arg>-P</arg>
	      <arg>-a</arg>
	    </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis>
<![CDATA[
chuck# pw groupshow wheel                                                       
wheel:*:0:root,pascal                                                           
]]>
</programlisting>

<itemizedlist>
	    <listitem><para>La commande <command>pw groupnext</command> qui retourne le prochain <varname>gid</varname> >disponible :</para></listitem>
</itemizedlist>

<programlisting width="80">
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>groupnext</replaceable></arg>
	      <group>
		<arg choice="plain" rep="norepeat"><replaceable>group</replaceable></arg>
		<arg choice="plain" rep="norepeat"><replaceable>gid</replaceable></arg>	      
	      </group>
	      <arg>-q</arg>
	    </cmdsynopsis>
<emphasis>EXEMPLE :</emphasis>
<![CDATA[
chuck# pw groupnext 
2324                                                                            
]]>
</programlisting>

	
<itemizedlist>		
	    <listitem><para>La commande <command>pw lock</command> qui permet de vérouiller l'accès à un compte :</para></listitem>
</itemizedlist>

<programlisting>
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>lock</replaceable></arg>
	      <group>
		<arg choice="plain" rep="norepeat"><replaceable>name</replaceable></arg>
		<arg choice="plain" rep="norepeat"><replaceable>uid</replaceable></arg>	      
	      </group>
	      <arg>-C <replaceable>config</replaceable></arg>
	      <arg>-q</arg>
	    </cmdsynopsis>
<![CDATA[
                                                                                
]]>
</programlisting>

<itemizedlist>
	    <listitem><para>La commande <command>pw unlock</command> qui a un effet symétrique à la commande précédente :</para>

<programlisting>
<emphasis>SYNOPSIS :</emphasis>
<cmdsynopsis>
	      <command>pw</command>
	      <arg>-V <replaceable>etcdir</replaceable></arg>
	      <arg rep='norepeat' choice='plain'><replaceable>unlock</replaceable></arg>
	      <group>
		<arg choice="plain" rep="norepeat"><replaceable>name</replaceable></arg>
		<arg choice="plain" rep="norepeat"><replaceable>uid</replaceable></arg>	      
	      </group>
	      <arg>-C <replaceable>config</replaceable></arg>
	      <arg>-q</arg>
	    </cmdsynopsis>
<![CDATA[
                                                                                
]]>
</programlisting></listitem>
</itemizedlist>
      </sect3>
     

      <sect3>
	<title>Vérification</title>
	<para>Sous &glinux; deux commandes permettent de vérifier l'intégrité des fichiers de gestion des utilisateurs. Ce sont la commande <command>/usr/sbin/pwck</command>, qui vérifie les fichiers &fpasswd; et &fshadow; et la commande <command>/usr/sbin/grpck</command> qui vérifie les fichiers &fgroup; et <filename>/etc/gshadow</filename>.</para>
      </sect3>
      
      <sect3>
	<title>Edition en ligne</title>
	<para>Elle se font par la commande <command>vipw</command> pour le fichier &fpasswd; (et respectivement &mpasswd; pour &fbsd; et &fshadow; pour &glinux;) ; elle synchronise ces deux fichiers. La commande <command>vigr</command> agit de même sur les fichiers &fgroup; et &gshadow; pour &glinux; uniquement.</para>
      </sect3>
    </sect2>
<sect2>
<title>Programmes de gestion des utilisateurs sous FreeBSD</title>
<para>Si l'implémentation de la commande pw est très complète, s'interface directement avec les fichiers &fpasswd; et &fgroup;, et permet de créer des scipts complexes, FreeBSD propose néanmois une série de programmes simples permettant la gestion interactive des utilisateurs. </para>

      <sect3><title><command>adduser</command></title>
<para>
adduser est un programme simple pour ajouter de nouveaux utilisateurs. Il crée les entrées dans les fichiers système &fpasswd; et &fgroup; . Il crée également le répertoire utilisateur pour le nouvel utilisateur, y copie les fichiers de configuration par défaut (dotfiles) à partir de <filename>/usr/share/skel</filename>, et peut éventuellement envoyer à l'utilisateur un courrier électronique de bienvenue.
</para>
	<example>
	  <title>Ajout d'un utilisateur avec <command>adduser</command></title>
	  <programlisting><computeroutput><![CDATA[
                                                                                
salusa# adduser
Username: danielle
Full name: Danielle
Uid (Leave empty for default): 2326
Login group [danielle]: fremens
Login group is fremens. Invite danielle into other groups? []: 
Login class [default]: 
Shell (sh csh tcsh nologin) [sh]: tcsh
Home directory [/home/danielle]: 
Use password-based authentication? [yes]: yes
Use an empty password? (yes/no) [no]: no
Use a random password? (yes/no) [no]: no
Enter password: 
Enter password again: 
Lock out the account after creation? [no]: no 
Username   : danielle
Password   : *****
Full Name  : Danielle
Uid        : 2326
Class      : 
Groups     : fremens 
Home       : /home/danielle
Shell      : /bin/tcsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (danielle) to the user database.
Add another user? (yes/no): no
Goodbye!
salusa#]]></computeroutput></programlisting></example> 

</sect3>

      <sect3><title><command>rmuser</command></title>
<para>
 Le programme <command>rmuser</command> permet de supprimer complètement et de manière interactive un utilisateur du système. Elle effectue les opérations suivantes:

   <orderedlist>

	    <listitem>
	      <para>      Supprime les entrées appartenant à l'utilisateur de la <command>crontab</command> (s'il y en a).</para></listitem>
  
    <listitem>
	    <para> 
      Supprime les tâches <command>at</command>  appartenant à l'utilisateur.</para></listitem>
   
   <listitem>
	    <para> 
      Tue tous les processus appartenant à l'utilisateur.</para></listitem>
   
   <listitem>
	    <para> 
      Supprime l'utilisateur du fichier de mots de passe local.</para></listitem>
    <listitem>
	    <para>   
      Supprime le répertoire l'utilisateur (s'il lui appartient).</para></listitem>
   
   <listitem>
	    <para> 
      Supprime les courriers électroniques en attente pour l'utilisateur dans <filename>/var/mail</filename>.   </para></listitem>
   <listitem>
	    <para> 
      Supprime tous les fichiers temporaires appartenant à l'utilisateur des zones de stockages temporaires comme <filename>/tmp</filename>.</para></listitem>
  
   <listitem>
	      <para>       Et enfin, supprime l'utilisateur de tous les groupes auxquels il appartient dans <filename>/etc/group</filename>. Si le groupe est vide d'utilisateur à la suite de l'opération, le groupe est également supprimé ! </para></listitem></orderedlist>
</para>
<example>
	  <title>Suppression d'un utilisateur avec <command>rmuser</command></title>
	  <programlisting><computeroutput><![CDATA[
salusa# rmuser danielle
Matching password entry:

danielle:*:2325:2325::0:0:User &:/home/danielle:/bin/sh

Is this the entry you wish to remove? yes
Remove user's home directory (/home/danielle)? yes
Removing user (danielle): mailspool home passwd.
salusa# 
]]></computeroutput></programlisting></example> 
</sect3>

      <sect3><title><command>chpass</command></title>
<para>
<command>chpass</command> modifie les informations de la base de données des utilisateurs comme les mots de passe, les interpréteurs de commandes, et les informations personnelles. Utilisé sans options, en dehors du nom facultatif de l'utilisateur,<command> chpass</command> ouvre un éditeur affichant les informations de l'utilisateur. Quand l'utilisateur quitte l'éditeur, la base de données utilisateur est mise à jour avec les nouvelles informations.
</para>
<example>
	  <title>Modification d'un utilisateur avec <command>chpass</command></title>
	  <programlisting><computeroutput><![CDATA[
#Changing user information for danielle.
Login: danielle
Password: $1$9zDHGBah$2v99d67vDnmq0hPhtsF880
Uid [#]: 2325
Gid [# or name]: 2325
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/danielle
Shell: /bin/tcsh
Full Name: Danielle
Office Location:
Office Phone:
Home Phone:
Other information:]]></computeroutput></programlisting></example> 
</sect3>
</sect2>
    <sect2>
      <title>Autres commandes</title>
      <para>
<table frame="topbot" pgwide="0">
	  <title>Autres commandes</title>
	  <!-- one of (graphic mediaobject tgroup) -->
	  <tgroup cols="2">
                <colspec colnum="1" colname="c1" />
                <colspec colnum="2" colname="c2"/>
	    <thead>
	      <row>
		<!-- one of (entrytbl entry) -->
		<entry align="center">commande</entry>
		<entry align="center">sémantique</entry>
	      </row>
	    </thead>
	    <tbody>
	      <row>
		<!-- one of (entrytbl entry) -->
		<entry><command>id</command></entry>
		<entry>Imprime l'uid, le nom de login, le gid, le nom du groupe :<simpara/>
<computeroutput>  ikare:~ >id                                                    </computeroutput><simpara/>
<computeroutput>uid=2323(ikare) gid=2323(ikare) groups=2323(ikare), 0(wheel), 1001(fremens)</computeroutput>
</entry>
	      </row>

	      <row>
		<!-- one of (entrytbl entry) -->
		<entry><command>groups</command></entry>
		<entry>Affiche les groupes de l'utilisateur :<simpara/>
<computeroutput>ikare:~ >groups</computeroutput><simpara/>
<computeroutput>ikare wheel fremens</computeroutput>
</entry>
	      </row>

	       <row>
		<!-- one of (entrytbl entry) -->
		<entry><command>passwd</command></entry>
		<entry>Permet à l'utilisateur de changer son mot de passe (moyennant la connaissance de l'ancien).<simpara/> Invoqué sous l'identité du <emphasis>super</emphasis>-utilisateur avec pour argument un nom d'utilisateur, elle permet de changer inconditionnellement son mot de passe.<simpara/></entry>
	      </row>

	      <row>
		<!-- one of (entrytbl entry) -->
		<entry id="su"><command>su</command></entry>
		<entry>Permet de changer d'identité. Typiquement permet à un utilisateur de devenir <emphasis>super</emphasis>-utilisateur à condition de connaître son mot de passe.<simpara/> Sur les <foreignphrase>flavors</foreignphrase> BSD, seuls les utilisateurs membre du groupe <emphasis>wheel</emphasis> sont autorisés à utiliser cette commande.<simpara/> Par défaut, les seules variables d'environnement modifiées sont : <varname>USER</varname>, <varname>LOGNAME</varname>, <varname>HOME</varname> et <varname>SHELL</varname>.<simpara/>La commande <command>su -</command> permet l'exécution d'un <emphasis>login shell</emphasis> et par conséquent le changement d'environnement.</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</table>
</para>
    </sect2>
</sect1>
 <sect1>
      <title>Exercices</title>
    
<sect2>
<title>Exercices d'applications</title>
   <para>Les exercices suivants sont à pratiquer sous &fbsd;. Indiquez sur papier votre réponse puis testez-là. </para>
 <simplesect>
    <title>Exercice 1</title>
      <para>A l'aide des utilitaires <command>grep</command> et <command>awk</command> déterminer si l'utilisateur <emphasis>bin</emphasis> existe sur votre système. Si oui, donner son uid.</para> 
      <para>Bien s'assurer de ne renvoyer au plus qu'une seule réponse !</para>

      <!-- <para> Réponses  :
grep ^bin: /etc/passwd 
bin:*:3:7:Binaries Commands and Source:/:/sbin/nologin

grep ^bin: /etc/passwd | awk -F ":" '{print "uid="$3}'
      </para> -->
  </simplesect>

<simplesect>
    <title>Exercice 2</title>
      <para>Quels sont les <varname>gid</varname> de vos différents groupes ?</para> 

<!-- <para> Réponses  (FreeBSD) :
$ id -G
666 0 5 668
$ id
uid=666(pascal) gid=666(gnu) groups=666(gnu), 0(wheel), 5(operator), 668(cvs)
      </para> -->

  </simplesect>

<simplesect>
    <title>Exercice 3</title>
      <para>Quels sont les membres du groupe  <emphasis>operator</emphasis> ?</para> 
      <para>Utiliser <command>grep</command> et <command>awk</command></para>
<!-- <para> Réponses  (FreeBSD) :
$ grep ^operator /etc/group | awk -F ":" '{print $4}'
root,pascal
      </para> -->
  </simplesect>

 <simplesect>
    <title>Exercice 4</title>
      <para>[nécessite l'accès <command>sudo</command>] Créer l'utilisateur <emphasis>test</emphasis> avec la commande <command>useradd</command> en utilisant toutes les valeurs par défaut. Vérifier que le compte est bien créé.</para> 
      <para>Ajouter cet utilisateur au groupe <emphasis>operator</emphasis> et vérifier ensuite ces groupes d'appartenance</para>
      <para>Se connecter à ce compte via le login puis via la commande <command>su</command>. Expliquer la différence.</para>
      <para>Que faut-il faire pour que la connexion au login fonctionne pour cet utilisateur ?</para>
  </simplesect>


    </sect2>
 
  </sect1>


<sect1>
<title>Exercices d'évaluation</title>
  <sect2>
    <title>Gestion des utilisateurs</title>

    <para>Création et modification d'utilisateurs et de groupes</para>

    <orderedlist>
      <listitem>
        <para>Créez un groupe "<varname>asr</varname>" </para>
      </listitem>

      <listitem>
        <para>Créez un utilisateur "<varname>asrStag</varname>", avec création
        automatique de son répertoire de domiciliation
        <filename>/home/.asrStag</filename>. Vous prendrez soin de lui
        associer un shell <guimenu>csh</guimenu>.</para>
      </listitem>

      <listitem>
        <para>Affectez cet utilisateur au groupe asr</para>
      </listitem>

      <listitem>
        <para>Vérifiez dans les différents fichiers que tout s'est bien
        passé</para>
      </listitem>

      <listitem>
        <para>Connectez vous à  ce compte en utilisant
        <command>su</command>.</para>
      </listitem>

      <listitem>
	  <para>Vérifiez votre identité en utilisant la commande <command>id</command> (testez
        différents paramêtres)</para>
      </listitem>

      <listitem>
	  <para>Dans un autre <foreignphrase>shell</foreignphrase>, ajoutez le compte <varname>asrStag</varname> au groupe
        <varname>wheel</varname></para>
      </listitem>

      <listitem>
	  <para>Vérifiez le changement dans la session <varname>asrStag</varname>.</para>
      </listitem>
    </orderedlist>
  </sect2>

  <sect2>
    <title>Droits</title>

    <sect3>
      <title>Commandes </title>

      <para>Un certain nombre de commandes permettent de modifier les droits
      des fichiers, ainsi que leur propriétaire. Consultez le <command>man</command>: </para>

      <itemizedlist>
        <listitem>
          <para><command>chmod</command></para>
        </listitem>

        <listitem>
          <para><command>chown</command></para>
        </listitem>

        <listitem>
          <para><command>chgrp</command></para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>Exercice 1</title>

	<para>Exercices à  faire sous les compte <varname>asrdev</varname> et <varname>asrStag</varname></para>

      <orderedlist>
        <listitem>
          <para>Créez un petit texte contenant le <command>man</command> de
          <command>chmod</command>, qui soit lisible par tout le monde, mais
          pas modifiable (même pas par vous).</para>
        </listitem>

        <listitem>
          <para>Donnez les droits de modifications au groupe
          <varname>asr</varname>. Vérifiez en utilisant le compte
          <varname>asrStag</varname>.</para>
        </listitem>

        <listitem>
	    <para>Créez un répertoire nommé <filename>secret</filename>, dont le contenu soit visible
          uniquement par vous même. Les fichiers placés dans ce répertoire
          sont-ils lisibles par d'autres membres de votre groupe ?</para>
        </listitem>

        <listitem>
          <para>Créer un répertoire nommé <filename>connaisseurs</filename>
          tel que les autres utilisateurs ne puissent pas lister son contenu
          mais puissent lire les fichiers qui y sont placés. On obtiendra :
          <computeroutput>$ ls connaisseurs ls : connaisseurs: Permission
          denied $ cat connaisseurs/toto &lt;...le contenu du fichier toto
          (s'il existe)...&gt;</computeroutput></para>
        </listitem>
      </orderedlist>
    </sect3>

    <sect3>
      <title>Exercices 2</title>

      <para>Pour faire cet exercice, vous devez créez deux comptes dans le
      groupe <varname>asr</varname>, <varname>stag1</varname> et <varname>stag2</varname>. Donnez ensuite les commandes nécessaires
      pour chaque étape suivante : </para>

      <orderedlist>
        <listitem>
	    <para><varname>Stag1</varname> et <varname>stag2</varname> créent dans un répertoire<filename>
          ~/adminUsers/exos/droits/</filename></para>
        </listitem>

        <listitem>
	    <para><varname>Stag2</varname> crée un fichier exécutable
          <filename>~/adminUsers/exos/droits/sc.sh</filename>, qui contient
          les lignes suivantes : </para>

          <para><computeroutput>#!/bin/sh echo je suis execute par `whoami`
          stat $0 echo stag2 est passe par la</computeroutput></para>
        </listitem>

        <listitem>
          <para>Dans son repertoire
          <filename>~/adminUsers/exos/droits/</filename>, <varname>stag1</varname> fait un lien
          dur vers le fichier de <varname>stag2</varname>, ayant pour nom
          <filename>sonScript</filename></para>
        </listitem>

        <listitem>
	    <para><varname>Stag1</varname> exécute le fichier<filename> sonScript</filename></para>
        </listitem>

        <listitem>
	    <para><varname>Stag1</varname> modifie le fichier <filename>sonScript</filename> de façon à  ce que
          l'exécution de ce fichier affiche en plus le message :
          <computeroutput><varname>stag1</varname> est passe par la</computeroutput></para>
        </listitem>

        <listitem>
	    <para><varname>Stag2</varname> veut être le seul à  pouvoir modifier le fichier
          <filename>sc.sh</filename></para>
        </listitem>
      </orderedlist>
    </sect3>
  </sect2>

  <sect2>
    <title>Scripts</title>

    <sect3>
      <title>Listage de répertoire</title>

      <para>Ecrire un script csh <filename>listerc_dir.sh</filename>
      permettant d'afficher le contenu d'un répertoire en séparant les
      fichiers et les (sous)répertoires : $ <command>./listrc_dir.sh</command>
      affichera :</para>

      <para><computeroutput>------------------------------------------</computeroutput></para>

      <para><computeroutput> Fichiers dans /etc/rc.d
      rc</computeroutput></para>

      <para><computeroutput> rc.local</computeroutput></para>

      <para><computeroutput> rc.sysinit
      </computeroutput><computeroutput></computeroutput></para>

      <para><computeroutput>------------------------------------------</computeroutput></para>

      <para><computeroutput> Repertoires dans /etc/rc.d init.
      d</computeroutput></para>

      <para><computeroutput> rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d
      rc6.d</computeroutput></para>
    </sect3>

    <sect3 id="cat">
      <title>Affichage des droits</title>

      <para>Créez un script <filename>testfichier.sh</filename>, qui précisera
      le type du fichier passé en paramêtre, ses permissions d'accès pour
      l'utilisateur. Par exemple : </para>

      <para><computeroutput>
      Le fichier /etc est un répertoire : 
      "/etc" est accessible par root en lecture écriture exécution 
      Le fichier /home/ikare/asr-est/doamines.txt est un fichier ordinaire qui n'est pas vide : 
      "/home/ikare/asr-est/doamines.txt" est accessible par ikare en lecture ecriture.</computeroutput></para>
    </sect3>
  </sect2>
</sect1>
</article>
