Linux a été conçu dès le début comme système multiutilisateur qui permet à
plusieurs personnes de l'utiliser simultanément. Au début de chaque session
de travail, l'utilisateur doit se connecter au système. L'utilisateur dispose
pour cela d'un nom d'utilisateur et d'un mot de passe qui lui sont propres.
Il est ainsi garanti que des personnes non autorisées ne pourront pas lire
des données auquelles elles ne devraient pas avoir accès. De la même façon,
les modifications importantes concernant le système, telles que, par exemple,
l'installation de programmes, ne peuvent pas être effectuées par un
utilisateur ordinaire, si ce n'est, dans certains cas particuliers, dans des
limites extrêmement restreintes. Seul root, le super
utilisateur, possède des droits
illimités et peut accéder sans aucune restriction à tous les fichiers. Ceux
qui appliquent judicieusement ce concept et se connectent uniquement en cas
de besoin avec la toute puissance de root peuvent diminuer notablement le risque de
pertes de données accidentelles. Comme en règle générale l'administrateur est
le seul qui soit autorisé à effacer des systèmes de fichiers ou à formater
des disques durs, les risques potentiels que constituent les chevaux de Troie
ou les commandes destructrices exécutées par erreur sont très nettement
réduits.
Dans le système de fichiers Linux, un fichier appartient toujours à un utilisateur et à un groupe. Le propriétaire du fichier peut assigner à ces deux parties mais aussi à des utilisateurs externes des droits de lecture, d'écriture et d'exécution.
On désigne sous le nom de groupe l'ensemble des utilisateurs d'un système
qui possèdent certains droits collectifs. Une équipe travaillant à la
réalisation d'un projet et que nous appellerons projet3
constitue un tel groupe. Chaque utilisateur sous Linux fait partie, au
minimum, d'une unité de gestion qui est par défaut le groupe
users. Il est possible de créer plusieurs
autres groupes mais seul root est
autorisé à prendre cette mesure. Avec la commande
groups, chaque utilisateur peut savoir à quel groupe il
appartient.
Voyons de plus près comment sont structurés les droits dans le système de fichiers. Commençons par les droits sur les fichiers. La sortie de ls -l pourrait avoir l'aspect de Exemple 19.1, « Exemple d'affichage des droits d'accès aux fichiers ».
Exemple 19.1. Exemple d'affichage des droits d'accès aux fichiers
-rw-r----- 1 tux projet3 14197 Jun 21 15:03 Roadmap
Comme vous pouvez le voir dans la troisième et la quatrième colonnes, ce
fichier appartient à l'utilisateur
tux faisant partie du groupe
projet3. Pour pouvoir cependant voir quels droits ont
été attribués sur le fichier, il est nécessaire d'examiner plus
attentivement la première colonne.
- | rw- | r-- | --- |
Type | Droits utilisateur | Droits groupe | Droits pour d'autres utilisateurs |
Cette colonne est constituée d'un caractère d'introduction ainsi que de
neuf caractères répartis par groupes de trois. Le premier des dix
caractères représente le type de l'élément du système de fichiers
listé ici. Le trait d'union - indique qu'il s'agit
d'un fichier normal. Ici, il pourrait tout aussi bien être fait
référence à un répertoire (d), à un lien
(l), à un périphérique bloc (b)
ou à un périphérique caractères (c).
Les trois blocs suivants se conforment à un schéma unifié: Le premier
des trois caractères indique si l'entité concernée (utilisateur, groupe
ou autres) a des droits d'accès en lecture sur le fichier
(r) ou si ces droits ne sont pas attribués
(-). Un w dans l'unité du milieu
indique que l'accès en écriture au fichier concerné est autorisé. Un
trait d'union (-) indique que l'accès en écriture
n'est pas possible. Il pourrait figurer, dans la colonne de droite, un
x qui symboliserait les droits d'exécution. Mais comme
il s'agit ici d'un fichier texte et non pas d'un fichier exécutable, il
n'est bien sûr pas nécessaire d'attribuer des droits d'exécution.
Dans notre exemple, l'utilisateur
tux, en tant que propriétaire
du fichier Roadmap, a des droits d'accès aussi bien
en lecture (r) qu'en écriture (w)
mais il n'a pas de droits d'exécution (x) qui,
d'ailleurs, ne lui serviraient à rien. Les membres du groupe
projet3 sont autorisés à lire le fichier mais ne
peuvent ni le modifier ni l'exécuter. Les utilisateurs autres que
tux et les autres membres du
groupe projet3n'ont eux aucun droit d'accès à ce
fichier. D'autres permissions peuvent être attribuées au moyen d'ACL
(access control lists). Pour plus de détails, consultez Section 19.2.6, « Listes de contrôle d'accès » et le
chapitre correspondant dans le Guide de l'administrateur.
Abordons maintenant la question des droits d'accès aux répertoires dont
le type est d. Ici, les droits ont une signification
quelque peu différente.
Exemple 19.2. Exemple d'affichage des droits d'accès aux répertoires
drwxrwxr-x 1 tux projet3 35 Jun 21 15:15 Projets
Dans Exemple 19.2, « Exemple d'affichage des droits d'accès aux répertoires », le
propriétaire (tux) et le groupe
propriétaire (projet3) du répertoire
Projets sont faciles à reconnaître. Contrairement
à ce qui se passe pour les droits sur les fichiers vus dans
Droits sur les fichiers, le
r symbolisant les droits de lecture indique que le
contenu du répertoire peut être affiché. Les droits d'écriture
(w) incluent en plus l'autorisation de créer de
nouveaux fichiers et par le droit d'exécution (x),
l'utilisateur est autorisé à passer dans ce répertoire. Dans notre
exemple, cela signifie qu'outre l'utilisateur
tux, les membres du groupe
projet3 sont autorisés à accéder au répertoire
Projets (x), à faire afficher son
contenu (r) et à y ajouter ou supprimer des fichiers
(w). Tous les autres utilisateurs ont des droits
beaucoup plus restreints. Ils sont autorisés à accéder au répertoire
(x) ou à faire afficher son contenu
(r) mais ils ne peuvent y déposer aucun fichier
(w n'est pas positionné).
Les droits d'accès à un fichier ou à un répertoire peuvent être
modifiés par le propriétaire (et bien sûr aussi par
root) avec la commande
chmod
à laquelle on ajoute des paramètres spécifiant les droits d'accès à
changer ainsi que les noms des fichiers à modifier.
Les paramètres constituent différentes catégories :
les utilisateurs concernés
u (user)—le
propriétaire du fichier)
g (group)—le
groupe propriétaire du fichier)
o (others)—autres
utilisateurs (si aucun paramètre n'est spécifié, les modifications
sont valables pour toutes les catégories))
un signe de soustraction (–), d'égalité
(=) ou d'addition (+)
les abréviations
r—read (lecture)
w—write (écriture)
x—execute (exécution)
et le(s) nom(s) du ou des fichier(s) concerné(s) séparés par des espaces.
Si l'utilisateur tux dont il est
question dans Exemple 19.2, « Exemple d'affichage des droits d'accès aux répertoires »
désire accorder à d'autres utilisateurs un accès en écriture
(w) au répertoire Projets, il
peut leur assigner ces droits au moyen de la commande chmod o+w
Projets.
S'il veut supprimer le droit d'écriture pour tous les utilisateurs sauf
pour lui-même, il tapera la commande chmod go-w
Projets. Pour interdire à tous les utilisateurs de déposer un
nouveau fichier dans le répertoire Projets, on tape
la commande chmod -w Projets. Maintenant, aucun
utilisateur, pas même le propriétaire, n'est autorisé à écrire sur le
fichier tant que les droits en écriture ne sont pas restaurés.
D'autres commandes essentielles qui règlent les droits de propriété
dans le système de fichiers sont chown
(change owner) et chgrp
(change group). La commande chown est utilisée pour
changer le propriétaire d'un fichier spécifié. Cependant, seul
root est autorisé à faire
cette modification.
Supposons que le fichier Roadmap de
Exemple 19.2, « Exemple d'affichage des droits d'accès aux répertoires » ne doive plus
désormais appartenir à tux
mais à l'utilisateur geeko. La
commande – qui devra être lancée par l'utilisateur
root sera : chown
geeko Roadmap.
La commande chgrp fonctionne de la même façon ;
elle est utilisée pour modifier l'appartenance d'un fichier à un groupe.
Il convient ici de noter que le propriétaire du fichier doit être membre
du nouveau groupe auquel il veut attribuer le fichier. Ainsi,
l'utilisateur tux de
Exemple 19.1, « Exemple d'affichage des droits d'accès aux fichiers » pourrait donc, avec la commande
chgrp projet4 Projets, faire passer la propriété du
fichier Projets au groupe projet4
s'il est lui-même membre de ce groupe. Pour root, cette restriction n'existe pas.
Dans certaines situations, les droits d'accès peuvent sembler trop
restrictifs. À cette fin, il existe sous Linux des paramètres
supplémentaires qui permettent la modification temporaire de l'identité de
l'utilisateur et du groupe courants pour une action spécifique.
Par exemple, le programme passwd nécessite en fait des
permissions root pour accéder à /etc/passwd.
Ce fichier contient des informations importantes telles que les répertoires
personnels des utilisateurs et les ID des utilisateurs et groupes. Ainsi,
un utilisateur normal ne peut pas modifier passwd
car il serait trop dangereux d'accorder à tous les utilisateurs l'accès direct
à ce fichier.
Le mécanisme setuid offre une solution à ce problème. Setuid (Set User ID)
est un attribut de fichier spécial qui indique au système qu'il doit
exécuter les programmes marqués par cet attribut sous un ID utilisateur
spécifique. Considérons la commande passwd :
-rwsr-xr-x 1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd
Vous pouvez voir le bit s défini pour les droits de
l'utilisateur. Avec le bit setuid, tous les utilisateurs qui démarrent la commande
passwd l'exécute en tant que root.
L'attribut setuid s'applique à l'utilisateur, mais il existe une propriété équivalente pour les groupes : l'attribut setgid. Un programme fonctionne alors sous l'ID de groupe sous lequel il a été enregistré quelque soit l'utilisateur qui l'adémarré. En conséquence, dans un répertoire avec le bit setgid, tous les nouveaux fichiers et sous-répertoires créés seront attribués au groupe auquel est attribué le répertoire. Considérons l'exemple suivant :
drwxrws--- 2 tux archive 48 Nov 19 17:12 backup
Vous pouvez voir le bit s défini pour les droits du groupe.
Le propriétaire du répertoire et les membres du groupe archive peuvent accéder au répertoire.
Les utilisateurs qui ne sont pas membres de ce groupe sont
« mappés » au groupe respectif ; l'id de groupe effectif
de tous les fichiers écrits sera archive. Par exemple, un programme
de sauvegarde qui est exécuté avec l'id de groupe archive pourra accéder à ce répertoire
sans même jouir des privilèges de root.
Outre les bits setuid et setgid, il existe également le bit sticky. Il faut
ici différencier le cas où le bit sticky appartient à un programme
exécutable du cas où il appartient à un répertoire. S'il appartient à un
programme, un fichier marqué de cette façon est chargé dans le RAM
pour éviter d'avoir à le charger depuis le disque dur à chaque fois qu'il
est utilisé. Cet attribut est rarement utilisé parce que les disques durs
modernes sont suffisamment rapides.
Par contre, si cet attribut est assigné à un répertoire, cela empêche les
utilisateurs de s'effacer les fichiers réciproquement (dans les répertoires
avec le bit sticky, les utilisateurs n'ont le droit d'effacer que les
fichiers dont ils sont propriétaires). Les répertoires
/tmp et /var/tmp en sont des
exemples typiques :
drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp
Sous Linux, les listes de contrôle d'accès (ACL, en anglais Access Control Lists) représentent une extension du concept de permissions traditionnel pour les fichiers et répertoires. À l'aide des ACL, des permissions peuvent être attribuées à des utilisateurs ou à des groupes autres que l'utilisateur ou le groupe propriétaire d'origine.
Vous pouvez reconnaitre les répertoires ou fichiers dont les droits d'accès sont étendus tout simplement à l'aide de la commande ls -l :
-rw-r--r--+ 1 tux projet3 14197 Jun 21 15:03 Roadmap
Au premier coup d'œil, la sortie de la commande ls
n'a pas beaucoup changé. Le fichier Roadmap appartient
à l'utilisateur tux qui lui même fait partie du groupe
projet3. tux possède aussi bien les
droits d'accès en lecture qu'en écriture, le groupe possède les droits
d'accès en lecture ainsi que tous les autres utilisateurs. Le seul détail
indiquant une différence avec un fichier sans ACL est le
+ supplémentaire dans la première colonne des bits de
permissions.
Vous obtenez des détails relatifs à l'ACL en exécutant la commande
getfacl pour votre fichier exemple
Roadmap :
# file: Roadmap # owner: tux # group: projet3 user::rw- user:jane:rw- effective: r-- group::r-- group:jungle:rw- effective: r-- mask::r-- other::---
Les trois premières lignes n'apportent aucune information nouvelle par
rapport à celles obtenues avec la commande ls -l. Il ne
s'agit ici que du nom du fichier, du propriétaire et du groupe. De la
quatrième à la neuvième ligne sont affichées les données ACL
(ACL entries). Les droits d'accès
conventionnels représentent un sous-ensemble de permissions que l'on peut
définir à l'aide des ACL. Ici, l'exemple d'ACL attribue des droits d'accès
en lecture et en écriture au propriétaire du fichier ainsi qu'à
l'utilisateur jane (lignes 4 et 5) ; il s'agit donc
d'une extension des permissions conventionnelles. La même chose est valable
pour les groupes : le groupe propriétaire du fichier possède les
droits d'accès en lecture (ligne 6), le groupe jungle se
voyant lui attribuer des droits d'accès en lecture et en écriture (ligne
7). L'entrée mask en ligne 8 limite les droits d'accès
effectifs pour l'utilisateur jane et le groupe
jungle à la lecture. Aucun autre utilisateur ou groupe ne
se voit accorder de permissions d'accès au fichier (ligne 9).
Vous trouverez des informations plus détaillées dans le guide de l'administrateur.