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, l'administrateur, 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 la sortie 21.1, « Exemple d'affichage des droits d'accès aux fichiers ».
Exemple 21.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 ; voyez à ce sujet la section 21.3.6, « Access Control Lists » et le chapitre Access Control Lists sous Linux 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. Voici un exemple qui devrait rendre les choses plus claires :
Exemple 21.2. Exemple d'affichage des droits d'accès aux répertoires
drwxrwxr-x 1 tux projet3 35 Jun 21 15:15 Projets
Dans la sortie 21.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 que nous avons vus dans la section 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 déposer 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 deux paramètres sont constitués par les éléments suivants :
les utilisateurs concernés
u user, le propriétaire du fichier
g group, les groupes du 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 déjà connues pour
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 ont il est question dans l'exemple 21.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 l'exemple 21.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 l'exemple 21.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 cdrecord nécessite en fait des permissions root pour accéder au graveur pour graver des CD (ou DVD). En effet, par défaut, un utilisateur normal ne peut pas créer des CD car il serait trop dangereux d'accorder à tous les utilisateurs l'accès direct à tous les périphériques.
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 le programme cdrecord :
-rwxr-x--- 1 root root 281356 2002-10-08 21:30 /usr/bin/cdrecord
Définissez le bit setuid à l'aide de la commande chmod u+s /usr/bin/cdrecord. Puis, avec la commande chgrp users /usr/bin/cdrecord, le programme cdrecord est attribué au groupe users.
Les droits d'accès suivants sont accordés :
-rws--x--- 1 root users 281356 2002-10-08 21:30 /usr/bin/cdrecord
Grâce au bit setuid, tous les utilisateurs qui appartiennent au groupe users peuvent utiliser le programme. En pratique, ceci signifie que le programme est exécuté en tant qu'utilisateur root.
![]() | Avertissement |
|---|---|
Veuillez noter qu'attribuer le bit setuid à un programme rend votre ordinateur plus vulnérable aux attaques. Ceci ne doit être fait que dans des cas exceptionnels si vous connaissez parfaitement le programme et pouvez en évaluer les risques potentiels. | |
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 de répertoire suivant :
drwxrwxr-- 2 root archive 48 Nov 19 17:12 backup
Attribuons maintenant le bit setgid avec la commande chmod g+s /test
Les droits d'accès seront alors comme suit :
drwxrwsr-- 2 root archive 48 Nov 19 17:12 backup
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. Pour les fichiers, ce bit n'est aujourd'hui pratiquement plus utilisé et n'a plus qu'une signification historique.
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, ACL Access Control Lists représente 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 517 2003-01-08 18:12 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 conséquentes dans le guide de l'administrateur, au chapitre Access Control Lists sous Linux.