La gestion des droits

Droits de base UNIX

Les droits détaillés ci-après s'appliquent à l'ensemble des composantes de l'arborescence GNU/Linux, à savoir les fichiers et les répertoires.

Droits essentiels :

  • lecture

  • écriture

  • exécution

Autres droits :

  • sticky bit

  • setuid et setgid bits

Description d'un fichier

  1. numéro d'inode

  2. type & droits sur le fichier (ou répertoire)

  3. compteur de liens physiques

  4. propriétaire

  5. groupe

  6. taille

  7. date de dernière modification

  8. nom du fichier (répertoire)

Représentation du type et des droits des fichiers

Le schéma précédent montre, dans le second bloc, comment sont affichés les droits associés à un fichier (ou répertoire).

Ce bloc se décompose en 4 sous-parties :

  • La première, codée sur un caractère, représente le type du fichier

  • On trouve ensuite 3 groupes de 3 caractères indiquant les droits de lecture/écriture/exécution.

Le type du fichier peut être un des éléments suivants :

  • d : répertoire

  • l : lien symbolique

  • c : périphérique de type caractère

  • b : périphérique de type bloc

  • p : pile fifo

  • s : socket

  • - : fichier classique

Exemple

  • Fichiers de périphériques :

    • brw-rw---- 1 root disk 8, 0 nov 12 08:17 /dev/sda

    • brw-rw---- 1 root cdrom 3, 0 nov 12 08:17 /dev/hda

    • crw-r----- 1 root kmem 1, 1 nov 12 08:17 mem

    • crw-rw---- 1 root root 4, 0 nov 12 08:17 tty0

  • Répertoires :

    • drwxr-xr-x 13 root root 4096 oct 20 10:22 /usr

    • drwxr-xr-x 17 user1 group1 4096 oct 31 09:18 /home/user1

  • Fichiers standards :

    • -rw-r--r-- 1 root root 2008 oct 17 19:36 /etc/inittab

    • -rw-r--r-- 1 root root 724 déc 20 2006 /etc/crontab

    • -rwxr-x--1 root root 1024 oct 29 /home/user1/monScript

  • Lien symbolique :

    • lrwxrwxrwx 1 root root 31 oct 27 15:00 /var/lib/postgresql/8.3/main/root.crt -> /etc/postgresql-common/root.crt

  • Socket :

    • srw-rw-rw- 1 root root 0 nov 12 08:18 /var/run/gdm_socket

Détail des droits standards

Comme énoncé précédemment, les droits sont codés sur 3 jeux de 3 droits.

Cet ensemble de 3 droits sur 3 entités se représente généralement de la façon suivante : on écrit côte à côte les droits r (Read/lecture), w (Write/écriture) puis x (eXecute/exécution) respectivement pour le propriétaire (u), le groupe (g) et les autres utilisateurs (o). Les codes u, g et o (u comme user, g comme group et o comme others) sont utilisés par les commandes UNIX qui permettent d'attribuer les droits et l'appartenance des fichiers.

Lorsqu'un droit est attribué à une entité, on écrit ce droit (r, w ou x), et lorsqu'il n'est pas attribué, on écrit un '-'. Par exemple : rwxr-xr--

Droits Spécifiques

SUID Bit

Ce droit s'applique aux fichiers exécutables, il permet d'allouer temporairement à un utilisateur les droits du propriétaire du fichier, durant son exécution.

En effet, lorsqu'un programme est exécuté par un utilisateur, les tâches qu'il accomplira seront restreintes par ses propres droits, qui s'appliquent donc au programme.

Lorsque le droit SUID est appliqué à un exécutable et qu'un utilisateur quelconque l'exécute, le programme détiendra alors les droits du propriétaire du fichier durant son exécution.

Bien sûr, un utilisateur ne peut jouir du droit SUID que s'il détient par ailleurs les droits d'exécution du programme. Ce droit est utilisé lorsqu'une tâche, bien que légitime pour un utilisateur classique, nécessite des droits supplémentaires (généralement ceux de root). Il est donc à utiliser avec précaution.

  • -r-s--x--x 1 root root 15540 jun 20 2004 /usr/bin/passwd

C'est un s si le droit d'exécution du propriétaire est présent, ou un S sinon. Il se place donc comme ceci : ---s------ ou ---S------

SGUID Bit

Ce droit fonctionne comme le droit SUID, mais appliqué aux groupes. Il donne à un utilisateur les droits du groupe auquel appartient le propriétaire de l'exécutable et non plus les droits du propriétaire.

De plus, ce droit a une tout autre utilisation s'il est appliqué à un répertoire. Normalement, lorsqu'un fichier est créé par un utilisateur, il en est propriétaire, et un groupe par défaut lui est appliqué (généralement users si le fichier a été créé par un utilisateur, et root s'il a été créé par root). Cependant, lorsqu'un fichier est créé dans un répertoire portant le droit SGID, alors ce fichier se verra attribuer par défaut le groupe du répertoire. De plus, si c'est un autre répertoire qui est créé dans le répertoire portant le droit SGID, ce sous-répertoire portera également ce droit.

  • -rwxr-sr-x 1 root utmp 319344 avr 21 2008 /usr/bin/xterm

C'est un s si le droit d'exécution du propriétaire est présent, ou un S sinon. Il se place donc comme ceci : ---s------ ou ---S------

Sticky Bit

Lorsque ce droit est positionné sur un répertoire, il interdit la suppression des fichiers qu'il contient à tout utilisateur autre que le propriétaire. Néanmoins, il est toujours possible pour un utilisateur possédant les droits d'écriture sur ce fichier de le modifier (par exemple de le transformer en un fichier vide).

Notation : il est représenté par la lettre t ou T, qui vient remplacer le droit d'exécution x des autres utilisateurs que le propriétaire et ceux appartenant au groupe du fichier, de la même façon que les droits SUID et SGID. La majuscule fonctionne aussi de la même façon, elle est présente si le droit d'exécution x caché n'est pas présent : ---------t ou ---------T

Exemple : le répertoire /tmp

  • drwxrwxrwt 23 root root 4096 oct 20 14:27 /tmp/

Listes de contrôle d'accès

Une liste de contrôle d'accès ou ACL, permet de définir une liste de permission sur un fichier ou répertoire.

Aux habituels utilisateur, groupe et autre, il est possible d'étendre le nombre d'utilisateurs et de groupes ayant des droits sur un même fichier

Les ACLs s'ajoutent aux droits standards. Lorsqu'on liste les droits d'un fichier, les ACLs sont symbolisées par un "+".

-rwxrwx---+ 1 root professeurs 26 2009-05-27 16:37 fic

Les droits étendus apparaissent de la façon suivante :

user::rwx

user:p.nom:rwx

group::---

mask::rwx

other::---

Les ACLs d'un dossier père ne sont pas automatiquement repris pour le fichier fils.

Il est possible de modifier ce comportement, à associant des droits par défaut (grâce à l'attribut default).

Par exemple :

user::rwx

user:p.nom:rwx

group::rwx

mask::rwx

other::--x

default:user::rwx

default:user:p.nom:rwx

default:group::---

default:mask::rwx

default:other::---