Source de cours/utilisateurs.php

<?
  
require ("../page.inc");
  require (
"lessons.inc");
  
  
$currentPage = new LessonPage("utilisateurs");

  
$currentPage->setContent('');
  
$currentPage->addChapter('general''Généralités''
<p>
Dans un système Gnu/Linux, il y le plus souvent plusieurs utilisateurs.
Un utilisateur peut correspondre à une personne physique qui va se servir
de la machine. Mais aussi à un service particulier. Par exemple un service
fournissant des pages web pourra être lancé par un utilisateur s\'appelant
<strong>web</strong>.
</p><p>
Chaque utilisateur aura des données qui lui sont propres. 
Il s\'agit de réglages comme la configuration de son environnement graphique
(image de fond, couleurs utilisées,...) ou de fichiers (documents, images,...). Tout cela est
enregistré dans ce que l\'on appelle généralement le
<strong>répertoire personnel</strong> de l\'utilisateur,
ou en anglais son <strong lang="en" xml:lang="en">home directory</strong>.
</p><p>
Un utilisateur a un nom qui doit être unique et comporte généralement
des restrictions comme le fait de ne pas pouvoir contenir d\'espace.
Toutefois à ce nom logique peut être associé un nom réel qui n\'a pas
ces limitations.
</p><p>
Au coeur du système d\'exploitation, ce n\'est pas ce nom qui est utilisé
mais un numéro appelé
<acronym lang="en" xml:lang="en" title="User IDentifier">UID</acronym>.
</p><p>
L\'utilisateur courant est celui qui a été renseigné lors de la connexion. Mais
il peut aussi être changé par la suite au moyen du programme <strong>su</strong>
(dont le nom vient des initiales de <strong lang="en" xml:lang="en">Substitute User</strong>).
su est suivi du nom d\'utilisateur cible. Il y a une option facultative entre la commande et le nom d\'utilisateur qui est un
<strong>-</strong> (tiret). S\'il est présent, tout se passe comme s\'il s\'agissait d\'une nouvelle connexion. Le 
shell va donc aller lire ses fichiers de démarrage et aussi ceux spécifiques à l\'utilisateur.
Par exemple&nbsp;:
</p>
<code class="terminal">
&gt; su - tian
</code>
<p>
Cela permet à l\'utilisateur courant de devenir l\'utilisateur tian. Une différence notable entre l\'utilisation ou non
de l\'option <strong>-</strong> est le fait qu\'après cette opération, on se retrouve dans le répertoire personnel de 
l\'utilisateur si elle a été spécifiée. Dans le cas contraire, on reste dans le répertoire courant.
</p><p>
Pour savoir à tout moment quel est l\'utilisateur 
actif dans une invite de commande, il faut taper&nbsp;:
</p>
<code class="terminal">
&gt; whoami
</code>
<p>

</p>
'
);

  
$currentPage->addChapter('base''Base de données des utilisateurs''
<p>
Le fichier utilisé pour contenir la liste des utilisateurs est <strong>/etc/passwd</strong>. Il pourrait ressembler à ceci&nbsp;:
</p>
<code>
root:x:0:0:root:/root:/bin/bash<br />
nobody:x:99:99:Nobody:/:/sbin/nologin<br />
tian:x:500:100:Tian:/home/tian:/bin/bash<br />
tv:x:501:100:Television:/home/tv:/bin/bash<br />
</code>
<p>
Voici la signification des différents champs de chaque ligne de ce fichier&nbsp;:
</p>
<div class="lesson-spacer">
<table class="lesson" summary="Format des lignes du fichier /etc/passwd">
<caption>Format dans /etc/passwd</caption>
<tr>
<th scope="col" abbr="Position">Position</th><th scope="col" abbr="Nom">Nom</th><th scope="col" abbr="Description">Description</th>
</tr>
<tr>
<td class="lesson-spacing"></td><td class="lesson-spacing"></td><td class="lesson-spacing"></td>
</tr>
<tr>
<td>1</td><td><strong>Utilisateur</strong></td><td>Le nom d\'utilisateur tel qu\'il devra être saisi pour se connecter.</td>
</tr>
<tr>
<td>2</td><td><strong>Mot de passe</strong></td><td>Le mot de passe de l\'utilisateur. Lorsque celui-ci est présent, il est crypté. Mais comme il était quand même possible de le retrouver, les systèmes modernes mettent le mot de passe dans le fichier <strong>/etc/shadow</strong> (protégé en lecture) et on trouve dans ce champ seulement un <strong>x</strong>.</td>
</tr>
<tr>
<td>3</td><td><strong>Identifiant utilisateur</strong></td><td>Un nombre identifiant de manière unique un utilisateur dans le système. En interne, c\'est lui qui sera utilisé plutôt que le nom.</td>
</tr>
<tr>
<td>4</td><td><strong>Identifiant groupe</strong></td><td>Un nombre correspondant à l\'identifiant du groupe par défaut de l\'utilisateur. On le retrouve dans <strong>/etc/groups</strong>.</td>
</tr>
<tr>
<td>5</td><td><strong>Nom complet</strong></td><td>Le nom complet de l\'utilisateur qui pourra être utilisé pour l\'affichage. Il n\'a pas de réelle utilité.</td>
</tr>
<tr>
<td>6</td><td><strong>Répertoire personnel</strong></td><td>Le chemin vers le répertoire où sont stockées les données personnelles de l\'utilisateur.</td>
</tr>
<tr>
<td>7</td><td><strong>Shell</strong></td><td>Le shell qui doit être lancé après une connexion réussie.</td>
</tr>
</table>
</div>
<p>
Dans l\'exemple précédent, on peut voir <strong>/sbin/nologin</strong> pour le shell de connexion. Cela correspond à un programme affichant un message d\'erreur afin d\'empêcher que quelqu\'un ne se connecte avec cet utilisateur. On peut aussi, selon les systèmes, trouver <strong>/bin/false</strong> pour obtenir le même effet.
</p><p>
L\'autre fichier utilisé est <strong>/etc/group</strong> qui contient la liste des groupes. En voici un exemple&nbsp;:
</p>
<code>
root:x:0:root<br />
nogroup:x:99:nobody<br />
utilisateurs:x:100:tian,tv<br />
video:x:200:tv<br />
</code>
<p>
Le fichier contient les champs suivants&nbsp;:
</p>
<div class="lesson-spacer">
<table class="lesson" summary="Format des lignes du fichier /etc/group">
<caption>Format dans /etc/group</caption>
<tr>
<th scope="col" abbr="Position">Position</th><th scope="col" abbr="Nom">Nom</th><th scope="col" abbr="Description">Description</th>
</tr>
<tr>
<td class="lesson-spacing"></td><td class="lesson-spacing"></td><td class="lesson-spacing"></td>
</tr>
<tr>
<td>1</td><td><strong>Groupe</strong></td><td>Le nom du groupe.</td>
</tr>
<tr>
<td>2</td><td><strong>Mot de passe</strong></td><td>Ce champ  peut servir à stocker un mot de passe pour le groupe. Il est très rarement utilisé et contiendra la valeur <strong>x</strong> ou parfois <strong>!</strong> selon les systèmes.</td>
</tr>
<tr>
<td>3</td><td><strong>Identifiant groupe</strong></td><td>Un nombre identifiant de manière unique un groupe dans le système. C\'est lui qui est référencé dans <strong>/etc/passwd</strong> et qui sera utilisé en interne.</td>
</tr>
<tr>
<td>4</td><td><strong>Membres du groupe</strong></td><td>Une liste des utilisateurs appartenant à ce groupe. Les différents utilisateurs sont séparés par des virgules.</td>
</tr>
</table>
</div>
<p>
A noter que si l\'utilisateur a un <strong>groupe principal</strong> référencé dans /etc/passwd, il peut appartenir à d\'autre groupes. Dans l\'exemple précédent, tv appartient au groupe utilisateurs qui est son groupe principal, mais aussi au groupe video.
</p>
<p>
Il existe d\'autres possibilités pour référencer les utilisateurs. On peut citer <acronym lang="en" xml:lang="en" title="Lightweight Directory Access Protocol">LDAP</acronym>. Il permet entre autres d\'avoir un annuaire centralisé contenant une liste d\'utilisateurs partagés par plusieurs systèmes. Cet annuaire contient alors des informations semblables à celles données ci-dessus.
</p>
'
);


  
$currentPage->addChapter('users''Catégories d\'utilisateurs''
<p>
Il y a sur tous les systèmes un utilisateur particulier, l\'<strong>administrateur</strong>, appelé traditionnellement <strong>root</strong>. Cet utilisateur a le UID de numéro <strong>0</strong>.
</p><p>
Le root a tous les droits sur un système GNU/Linux. Il peut supprimer tous les fichiers, changer toutes les 
configurations et aussi devenir n\'importe quel utilisateur sans devoir entrer de mot de passe.
</p><p>
Cet utilisateur est typiquement créé lors de l\'installation du système. Il sera ensuite utilisé pour créer tous les autres utilisateurs.
</p><p>
L\'administrateur étant un peu à part, on distingue ensuite deux catégories principales d\'utilisateurs.
</p><p>
Il y a tout d\'abord les <strong>utilisateurs réels</strong>. Ils correspondent à une personne qui va se connecter sur le système. La manière de se connecter peut varier. Cela peut être fait en ayant accès physiquement à la machine, ou à distance sur un ordinateur en réseau.
</p><p>
Il est bien sûr possible pour une personne physique d\'avoir plusieurs de ces utilisateurs dans un système. Ce peut être utile par exemple pour avoir des configurations différentes.
</p><p>
Les autres utilisateurs sont appelés <strong>utilisateurs systèmes</strong>. Ils sont utilisés de manière interne, notamment pour lancer les <a href="processus.php#demon">démons</a>. Il  s\'agit par exemple de l\'utilisateur web évoqué en début d\'article.
</p><p>
A noter que ces catégories se différencient surtout par l\'usage que l\'on en fait et ne sont pas liées aux groupes vus précédemment. Il n\'y a pas réellement de configuration visible pour spécifier à quelle catégorie appartient un utilisateur donné. On peut toutefois trouver le plus souvent quelques caractéristiques communes. Par exemple les utilisateurs sans shell de connexion (ou alors avec quelque chose comme <strong>/sbin/nologin</strong>) seront utilisés par le système. De même les utilisateurs réels pourront avoir un répertoire personnel dans une arborescence commune (sous le répertoire <strong>/home</strong>).
</p>
'
);

  
$currentPage->addChapter('creation''Création de nouveaux utilisateurs''
<p>
Pour créer des utilisateurs, la commande de base est <strong>useradd</strong>. On peut l\'utiliser simplement en lui passant un nom d\'utilisateur.
</p>
<code class="terminal">
&gt; useradd nouveau
</code>
<p>
Cela va uniquement ajouter l\'utilisateur au système avec les options par défaut. Il existe plusieurs options pouvant être utilisées avec ce programme. Malheureusement elles peuvent varier selon les systèmes. Il vaut donc mieux consulter sa page de manuel pour connaître les différentes possibilités.
</p>
<code class="terminal">
&gt; man useradd
</code>
<p>
Une option courante est <strong>-m</strong> qui permet la création du répertoire personnel de l\'utilisateur. Ceci est très utile pour les utilisateurs véritables, mais ne le sera pas pour les utilisateurs systèmes. Le répertoire sera créé en ajoutant au chemin par défaut (généralement /home) le nom de l\'utilisateur.
</p>
<p>
La manière de changer les options par défaut (répertoire de base, shell, groupe,...) est aussi très différente selon les versions de useradd, et il faudra donc à nouveau consulter la documentation associée.
</p>
'
);




  
$currentPage -> display();
?>