tuteurs.ens.fr/unix/droits.tml

390 lines
11 KiB
Text
Raw Normal View History

<?xml version="1.0" encoding="UTF-8"?>
2002-11-22 16:47:02 +01:00
<!DOCTYPE html
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>Droits d'accès</title>
2002-11-22 16:47:02 +01:00
</head>
<body>
<h1>Les droits d'accès sous Unix</h1>
2002-11-22 16:47:02 +01:00
<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>
2002-11-22 16:47:02 +01:00
<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 :
2002-11-22 16:47:02 +01:00
</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
2002-11-22 16:47:02 +01:00
</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>
2002-11-22 16:47:02 +01:00
<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.
2002-11-22 16:47:02 +01:00
</p>
<h4>Droits du propriétaire</h4>
2002-11-22 16:47:02 +01:00
<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>
2002-11-22 16:47:02 +01:00
</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>
2002-11-22 16:47:02 +01:00
<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>).
2002-11-22 16:47:02 +01:00
</p>
<h4>Droits des autres</h4>
2002-11-22 16:47:02 +01:00
<p>
Comme les droits du propriétaire, mais s'applique aux gens qui sont ni
le propriétaire, ni dans le groupe propriétaire.
2002-11-22 16:47:02 +01:00
</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.
2002-11-22 16:47:02 +01:00
</p>
<h3>Propriétaire</h3>
2002-11-22 16:47:02 +01:00
<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.
2002-11-22 16:47:02 +01:00
</p>
<h3><a name="group">Groupe propriétaire</a></h3>
2002-11-22 16:47:02 +01:00
<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.
2002-11-22 16:47:02 +01:00
</p>
<h3>Taille</h3>
<p>
Elle est indiquée en octets.
2002-11-22 16:47:02 +01:00
</p>
<h2>Modifier les droits d'accès</h2>
2002-11-22 16:47:02 +01:00
<p>
Il existe 4 commandes liées aux droits d'accès :
2002-11-22 16:47:02 +01:00
</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>
2002-11-22 16:47:02 +01:00
</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>
2002-11-22 16:47:02 +01:00
<div class="metainformation">
Auteurs : Émilia Robin, Nicolas George, Marie-Lan Nguyen.
<date value="from git" />
</div>
2002-11-22 16:47:02 +01:00
</body>
</html>