tuteurs.ens.fr/unix/droits.tml
2009-09-27 15:43:57 +02:00

388 lines
11 KiB
XML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>Droits d'accès</title>
</head>
<body>
<h1>Les droits d'accès sous Unix</h1>
<p>
Qu'est-ce que ces « droits d'accès » ? C'est un modèle qui décrit,
pour chaque fichier ou chaque répertoire, qui a le droit de lire,
exécuter (ou traverser dans le cas d'un répertoire) ou modifier. Sur
votre Mac ou PC Windows personnel, ces considérations ne sont
peut-être pas très importantes si vous êtes le seul utilisateur. Mais
c'est particulièrement important sous Unix, qui est un système conçu
pour être multi-utilisateurs.
</p>
<h2>Lire les droits</h2>
<p>
Chaque fichier a plusieurs propriétés associées : le
<em>propriétaire</em>, le <em>groupe propriétaire</em>, la date de
dernière modification, et les <em>droits d'accès</em>. On peut
examiner ces propriétés grâce à l'option <code>-l</code> de
<code>ls</code>. Dans cet exemple, nous voyons les permissions
standard d'un répertoire et de deux fichiers :
</p>
<pre>
<span class="prompt">clipper ~/DEA $</span> ls -l
total 205
drwxr-xr-x 2 toto phy03 512 Jan 16 10:02 fiches/
-rw-r--r-- 1 toto phy03 72008 Oct 2 2003 article.dvi
-rw-r--r-- 1 toto phy03 145905 Oct 2 2003 article.pdf
</pre>
<p class="continue">
Les permissions sont indiquées dans la colonne de gauche, suivant un
format bien particulier :
</p>
<div class="illustration">
<img src="acces.png" width="379" height="168"
alt="[Structure des permissions d'un fichier et d'un répertoire]" />
</div>
<h3>Permissions</h3>
<p>
Comme nous le voyons sur l'image ci-dessus, le bloc de permissions se
divise en quatre éléments.
</p>
<h4>Type</h4>
<p>
Le premier caractère du bloc de permissions indique le type du
fichier : <code>-</code> pour un fichier normal, <code>d</code> pour
un répertoire. On trouve également parfois <code>l</code> pour les
liens symboliques, et d'autres choses plus exotiques.
</p>
<h4>Droits du propriétaire</h4>
<ul>
<li><strong>r</strong> ou <code>-</code> : droit de lire (r pour <i
lang="en">read</i>) le fichier (<code>r</code> pour oui,
<code>-</code> pour non)</li>
<li><strong>w</strong> ou <code>-</code> : droit d'écrire (w pour <i
lang="en">write</i>) dans le fichier</li>
<li><strong>x</strong> ou <code>-</code> : droit d'exécuter (x pour <i
lang="en">execute</i>) le fichier.</li>
</ul>
<p>
Pour un répertoire, les choses sont un peu différentes. Le couple
<code>rx</code> donne le droit d'examiner le répertoire et son
contenu. Le bit <code>w</code> donne le droit d'ajouter ou de
supprimer des fichiers dans le répertoire.
</p>
<p>
Il existe d'autres types de droits plus exotiques, comme le bit setuid
(s) ou encore le « sticky bit » (t). Si ça vous intéresse, lisez la <a
href="&url.tuteurs;unix/aide.html">page de man</a> de
<code>chmod</code>.
</p>
<h4>Droits du groupe</h4>
<p>
Comme les droits du propriétaire, mais s'applique aux gens qui sont
dans le groupe propriétaire (voir ci-dessous sur les <a
href="#group">groupes</a>).
</p>
<h4>Droits des autres</h4>
<p>
Comme les droits du propriétaire, mais s'applique aux gens qui sont ni
le propriétaire, ni dans le groupe propriétaire.
</p>
<h3>Liens</h3>
<p>
Nombre de liens du fichier; un répertoire en a au moins deux (<code>.</code> et
<code>..</code>). Un répertoire qui contient 5 sous-répertoires en a 7, etc.
</p>
<h3>Propriétaire</h3>
<p>
Le nom de login de la personne à qui appartient ce fichier. Seul le
propriétaire peut changer les droits ou le groupe d'un fichier.
</p>
<h3><a name="group">Groupe propriétaire</a></h3>
<p>
Les groupes sont des ensembles d'utilisateurs qui sont fixés par
l'administrateur du système. Ils sont un moyen pour gérer un peu
finement les droits d'accès. En l'espèce, à l'ENS, les groupes n'ont
pas une très grande importance. Votre groupe porte le nom de votre
spécialité (<code>litt</code> pour les littéraires, <code>bio</code>
pour les biologistes, etc.) assorti de votre promo. C'est la commande
<code>id</code> qui vous révèle le(s) groupe(s) auquel vous
appartenez :
</p>
<pre>
<span class="prompt">clipper ~ $</span> id
uid=4242(toto) gid=276(phy03) groups=276(phy03)
</pre>
<p class="continue">
La commande vous indique d'abord votre identifiant d'utilisateur (UID)
et votre login, puis votre identifiant de groupe principal (GID) et
enfin tous les groupes dans lesquels vous vous trouvez.
</p>
<h3>Taille</h3>
<p>
Elle est indiquée en octets.
</p>
<h2>Modifier les droits d'accès</h2>
<p>
Il existe 4 commandes liées aux droits d'accès :
</p>
<ul>
<li> <code>chmod</code> (<i lang="en">change mode</i>), la plus utile,
qui modifie les permissions</li>
<li> <code>chgrp</code> (<i lang="en">change group</i>) qui modifie le
groupe d'un fichier ou répertoire</li>
<li> <code>chown</code> (<i lang="en">change owner</i>) qui modifie le
propriétaire d'un fichier ou répertoire</li>
<li> <code>umask</code>, qui définit les protections par défaut</li>
</ul>
<p>
Les commandes <code>chgrp</code> et <code>chown</code> servent surtout
à l'administrateur du système, donc nous ne les examinerons pas ici
(lisez leur <a href="&url.tuteurs;unix/aide.html">page de man</a> pour
en savoir plus). En revanche, <code>chmod</code> est une commande très
pratique dans une utiisation courante.
</p>
<h3>Notation symbolique</h3>
<p>
Cette notation consiste à associer un ou plusieurs degrés de
propriété, une action et un ou plusieurs types d'accès. On l'utilise
généralement pour ajouter ou retirer des permissions par rapport à la
normale (<code>-rw-r--r--</code> pour un fichier,
<code>drwxr-xr-x</code> pour un répertoire).
</p>
<table class="tableau">
<tr>
<th>Degré de propriété</th><th>Action</th><th>Type d'accès</th>
</tr><tr>
<td>
<table>
<tr>
<td><code>u</code> (utilisateur)</td>
</tr><tr>
<td><code>g</code> (groupe)</td>
</tr><tr>
<td><code>o</code> (autres)</td>
</tr><tr>
<td><code>a</code> (tout le monde)</td>
</tr>
</table>
</td>
<td>
<table>
<tr>
<td>+ (ajoute le droit)</td>
</tr><tr>
<td><code>-</code> (enlève le droit)</td>
</tr><tr>
<td><code>=</code> (définit le droit)</td>
</tr>
</table>
</td>
<td>
<table>
<tr>
<td><code>r</code> (lecture)</td>
</tr><tr>
<td><code>w</code> (écriture)</td>
</tr><tr>
<td><code>x</code> (exécution</td>
</tr>
</table>
</td>
</tr>
</table>
<h3>Quelques exemples</h3>
<h4>Protéger un fichier</h4>
<p>
Ici, vous interdisez à tout autre que vous l'accès à votre fichier
(c'est ce qu'à l'ENS on appelle couramment le « mode parano »).
</p>
<pre>
<span class="prompt">clipper ~ $</span> ls -l fichier.txt
-rw-r--r-- 1 toto phy03 42 Jan 5 12:08 fichier.txt
<span class="prompt">clipper ~ $</span> chmod og-r fichier.txt
<span class="prompt">clipper ~ $</span> ls -l fichier.txt
-rw------- 1 toto phy03 42 Feb 5 12:08 fichier.txt
</pre>
<h4>Protéger un répertoire</h4>
<p>
Même chose pour un répertoire...
</p>
<pre>
<span class="prompt">clipper ~ $</span> ls -l | grep repertoire
drwxr-xr-x 2 toto phy03 512 Feb 5 12:19 repertoire/
<span class="prompt">clipper ~ $</span> chmod go-rx repertoire
<span class="prompt">clipper ~ $</span> ls -l | grep repertoire
drwx------ 2 toto phy03 512 Feb 5 12:19 repertoire/
</pre>
<h4>Rétablir des droits normaux pour un fichier</h4>
<p>
Certains fichiers sont par défaut en mode parano. C'est le cas par
exemple de votre mail : quand vous sauvegardez un fichier en
provenance de votre boîte aux lettres, il est protégé. Pour permettre
aux autres l'accès au fichier :
</p>
<pre>
<span class="prompt">clipper ~ $</span> chmod og+r fichier.txt
</pre>
<h4>Rétablir des droits normaux pour un répertoire</h4>
<pre>
<span class="prompt">clipper ~ $</span> chmod go+rx repertoire
</pre>
<h4>Rendre un script exécutable</h4>
<p>
Par défaut un fichier n'est pas un exécutable. Pour rendre exécutable
par tout le monde le joli script que vous venez d'écrire, faites
simplement :
</p>
<pre>
<span class="prompt">clipper ~ $</span> chmod +x script
</pre>
<h3>Notation numérique</h3>
<p>
Cette notation est un peu plus complexe. Elle se fonde sur le principe
suivant : considérons un bloc de permissions,
<code>rw-r--r--</code>. Quand une lettre est présente, ça veut dire
que l'accès est autorisé, quand elle est absente (-), il est
refusé. On peut traduire ceci de façon binaire :
</p>
<table class="tableau">
<tr>
<td>r</td><td>w</td><td>-</td><td>r</td><td>-</td><td>-</td><td>r</td><td>-</td><td>-</td>
</tr><tr>
<td>1</td><td>1</td><td>0</td><td>1</td><td>0</td><td>0</td><td>1</td><td>0</td><td>0</td>
</tr>
</table>
<p class="continue">
Ce qui donne 110-100-100. 110 vaut 6 en décimal, 100 vaut 4 (voir le
teableau ci-dessous), donc la représentation numérique de
<code>rw-r--r--</code> est 644. Cette valeur peut être indiquée
exactement à <code>chmod</code> :
</p>
<pre>
<span class="prompt">clipper ~ $</span> ls -l fichier.txt
-rw------- 1 toto phy03 42 Feb 5 12:08 fichier.txt
<span class="prompt">clipper ~ $</span> chmod 644 fichier.txt
<span class="prompt">clipper ~ $</span> ls -l fichier.txt
-rw-r--r-- 1 toto phy03 42 Jan 5 12:08 fichier.txt
</pre>
<table class="tableau">
<tr>
<th>Accès</th><td>---</td><td>--x</td><td>-w-</td><td>-wx</td><td>r--</td><td>r-x</td><td>rw-</td><td>rwx</td>
</tr><tr>
<th>Binaire</th><td>000</td><td>001</td><td>010</td><td>011</td><td>100</td><td>101</td><td>110</td><td>111</td>
</tr><tr>
<th>Décimal</th><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td>
</tr>
</table>
<h3>Quelques permissions habituelles</h3>
<table class="tableau">
<tr>
<th>Permission</th><th>Valeur
numérique</th><th>Type de fichier</th><th>Signification</th>
</tr><tr>
<td>---------</td><td>000</td><td>N'importe quel type.</td><td>Aucun
accès à qui que ce soit</td>
</tr><tr>
<td>rw-------</td><td>600</td><td>Fichiers</td><td>Fichier parano :
lecture et écriture réservées au propriétaire.</td>
</tr><tr>
<td>rw-r--r--</td><td>644</td><td>Fichiers</td><td>Standard : tout le
monde peut lire le fichier mais vous êtes le seul à pouvoir le
modifier.</td>
</tr><tr>
<td>rw-rw-rw</td><td>666</td><td>Fichiers</td><td>Fichier public :
tout le monde peut lire et écrire.</td>
</tr><tr>
<td>rwx------</td><td>700</td><td>Répertoires</td><td>Répertoire parano :
lecture, accès et écriture réservés au propriétaire.</td>
</tr><tr>
<td rowspan="2">rwxr-xr-x</td><td rowspan="2">755</td><td>Fichiers</td><td>Fichier
lisible et exécutable par tous, vous seul pouvez le modifier.</td>
</tr><tr>
<td>Répertoires</td><td>Standard : tout le monde peut accéder au
répertoire et lire son contenu, vous seul pouvez modifier le contenu.</td>
</tr><tr>
<td rowspan="2">rwxrwxrwx</td><td
rowspan="2">777</td><td>Répertoires</td><td>Répertoire public : tout
le monde peut y accéder, lire le contenu et modifier celui-ci.</td>
</tr><tr>
<td>Fichiers</td><td>Exécutable public : tout le
monde peut le lire, l'exécuter et le modifier.</td>
</tr>
</table>
<div class="metainformation">
Auteurs : Émilia Robin, Nicolas George, Marie-Lan Nguyen. Dernière modification : <date
value="$Date: 2007-07-17 10:03:10 $" /> </div>
</body>
</html>