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
numéro d'inode
type & droits sur le fichier (ou répertoire)
compteur de liens physiques
propriétaire
groupe
taille
date de dernière modification
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épertoirel
: lien symboliquec
: périphérique de type caractèreb
: périphérique de type blocp
: pile fifos
: 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::---