# Droits d'accès

# Les droits d'accès sous Unix

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.

## Lire les droits

Chaque fichier a plusieurs propriétés associées : le propriétaire, le groupe propriétaire, la date de dernière modification, et les droits d'accès. On peut examiner ces propriétés grâce à l'option `-l` de `ls`. Dans cet exemple, nous voyons les permissions standard d'un répertoire et de deux fichiers :

    clipper ~/DEA $ 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

Les permissions sont indiquées dans la colonne de gauche, suivant un format bien particulier :

### Permissions

Comme nous le voyons sur l'image ci-dessus, le bloc de permissions se divise en quatre éléments.

#### Type

Le premier caractère du bloc de permissions indique le type du fichier : `-` pour un fichier normal, `d` pour un répertoire. On trouve également parfois `l` pour les liens symboliques, et d'autres choses plus exotiques.

#### Droits du propriétaire

- r ou `-` : droit de lire (r pour read) le fichier (`r` pour oui, `-` pour non)
- w ou `-` : droit d'écrire (w pour write) dans le fichier
- x ou `-` : droit d'exécuter (x pour execute) le fichier.

Pour un répertoire, les choses sont un peu différentes. Le couple `rx` donne le droit d'examiner le répertoire et son contenu. Le bit `w` donne le droit d'ajouter ou de supprimer des fichiers dans le répertoire.

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 page de man de `chmod`.

#### Droits du groupe

Comme les droits du propriétaire, mais s'applique aux gens qui sont dans le groupe propriétaire (voir ci-dessous sur les groupes).

#### Droits des autres

Comme les droits du propriétaire, mais s'applique aux gens qui sont ni le propriétaire, ni dans le groupe propriétaire.

### Liens

Nombre de liens du fichier; un répertoire en a au moins deux (`.` et `..`). Un répertoire qui contient 5 sous-répertoires en a 7, etc.

### Propriétaire

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.

### Groupe propriétaire

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é (`litt` pour les littéraires, `bio` pour les biologistes, etc.) assorti de votre promo. C'est la commande `id` qui vous révèle le(s) groupe(s) auquel vous appartenez :

    clipper ~ $ id
    uid=4242(toto) gid=276(phy03) groups=276(phy03)

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.

### Taille

Elle est indiquée en octets.

## Modifier les droits d'accès

Il existe 4 commandes liées aux droits d'accès :

- `chmod` (change mode), la plus utile, qui modifie les permissions
- `chgrp` (change group) qui modifie le groupe d'un fichier ou répertoire
- `chown` (change owner) qui modifie le propriétaire d'un fichier ou répertoire
- `umask`, qui définit les protections par défaut

Les commandes `chgrp` et `chown` servent surtout à l'administrateur du système, donc nous ne les examinerons pas ici (lisez leur page de man pour en savoir plus). En revanche, `chmod` est une commande très pratique dans une utiisation courante.

### Notation symbolique

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 (`-rw-r--r--` pour un fichier, `drwxr-xr-x` pour un répertoire).

Degré de propriété | Action | Type d'accès
--- | --- | ---

`u` (utilisateur)
`g` (groupe)
`o` (autres)
`a` (tout le monde)

+ (ajoute le droit)
`-` (enlève le droit)
`=` (définit le droit)

`r` (lecture)
`w` (écriture)
`x` (exécution

### Quelques exemples

#### Protéger un fichier

Ici, vous interdisez à tout autre que vous l'accès à votre fichier (c'est ce qu'à l'ENS on appelle couramment le « mode parano »).

    clipper ~ $ ls -l fichier.txt
    -rw-r--r--    1 toto phy03          42 Jan  5 12:08 fichier.txt
    clipper ~ $ chmod og-r fichier.txt
    clipper ~ $ ls -l fichier.txt
    -rw-------    1 toto phy03          42 Feb  5 12:08 fichier.txt

#### Protéger un répertoire

Même chose pour un répertoire...

    clipper ~ $ ls -l | grep repertoire
    drwxr-xr-x    2 toto phy03        512 Feb  5 12:19 repertoire/
    clipper ~ $ chmod go-rx repertoire
    clipper ~ $ ls -l | grep repertoire
    drwx------    2 toto phy03        512 Feb  5 12:19 repertoire/

#### Rétablir des droits normaux pour un fichier

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 :

    clipper ~ $ chmod og+r fichier.txt

#### Rétablir des droits normaux pour un répertoire

    clipper ~ $ chmod go+rx repertoire

#### Rendre un script exécutable

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 :

    clipper ~ $ chmod +x script

### Notation numérique

Cette notation est un peu plus complexe. Elle se fonde sur le principe suivant : considérons un bloc de permissions, `rw-r--r--`. 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 :

r | w | - | r | - | - | r | - | -
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0

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 `rw-r--r--` est 644. Cette valeur peut être indiquée exactement à `chmod` :

    clipper ~ $ ls -l fichier.txt
    -rw-------    1 toto phy03          42 Feb  5 12:08 fichier.txt
    clipper ~ $ chmod 644 fichier.txt
    clipper ~ $ ls -l fichier.txt
    -rw-r--r--    1 toto phy03          42 Jan  5 12:08 fichier.txt

Accès | --- | --x | -w- | -wx | r-- | r-x | rw- | rwx
Binaire | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111
Décimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7

### Quelques permissions habituelles

Permission | Valeur numérique | Type de fichier | Signification
--- | --- | --- | ---
--------- | 000 | N'importe quel type. | Aucun accès à qui que ce soit
rw------- | 600 | Fichiers | Fichier parano : lecture et écriture réservées au propriétaire.
rw-r--r-- | 644 | Fichiers | Standard : tout le monde peut lire le fichier mais vous êtes le seul à pouvoir le modifier.
rw-rw-rw | 666 | Fichiers | Fichier public : tout le monde peut lire et écrire.
rwx------ | 700 | Répertoires | Répertoire parano : lecture, accès et écriture réservés au propriétaire.
rwxr-xr-x | 755 | Fichiers | Fichier lisible et exécutable par tous, vous seul pouvez le modifier.
Répertoires | Standard : tout le monde peut accéder au répertoire et lire son contenu, vous seul pouvez modifier le contenu.
rwxrwxrwx | 777 | Répertoires | Répertoire public : tout le monde peut y accéder, lire le contenu et modifier celui-ci.
Fichiers | Exécutable public : tout le monde peut le lire, l'exécuter et le modifier.

Auteurs : Émilia Robin, Nicolas George, Marie-Lan Nguyen. Dernière modification :