OS5 – Gestion des droits sur les fichiers Linux
Les droits attribués à un utilisateur sur un fichier ou un sous-répertoire sont différenciés suivant que l'utilisateur :
➢est le propriétaire du fichier ou du s/rép.( u pour « User »),
➢fait partie du groupe propriétaire du fichier ou du s/rép ( g pour « Group »),
➢ne fait partie d'aucune des deux catégories précédentes ( o pour « Other » )
A chaque fichier ou sous-répertoire on associe donc trois jeux de droits (1 jeu par type d'utilisateur : u g et o.).
![]() |
Pour chaque type d’utilisateur ( user, group, other ) trois attributs d’accès à une ressource sont définis :
➢lecture ( r pour « Read » ),
➢écriture ( w pour « Write » ),
➢exécution ( x pour « eXecute » ).
L’absence d’un droit est définie par le caractère tiret « - ».
La combinaison des trois types d’utilisateurs et des 3 attributs possibles pour chaque type d’utilisateur aboutit à l’attribution de 9 droits à chaque ressource ; ces droits se présentent alors sous la forme d’une série de 9 caractères.
Par exemple un fichier modifiable et exécutable par son propriétaire et seulement lisible par les autres types d’utilisateurs possèdera les droits suivants : rw-r--r--
Le tableau suivant détaille l’effet de chaque droit en fonction du type de ressource :
Attribut | Effet sur un fichier | Effet sur un dossier |
Lecture | Lecture des données du fichier | Listage des fichiers et . contenus dans le dossier |
Ecriture |
| Création et destruction de fichiers ou de dossiers. autorisés dans le dossier. |
Exécution | Exécution du fichier :
| Positionnement dans le dossier. ou parcours du dossiera autorisé. Si non accordé, interdit tout accès à un fichier ou positionnement dans un dossier situé dans le dossier ou à un niveau inférieur. |
Pour visualiser les droits d’une ressource, il faut utiliser la commande « ls » de la manière suivante : ls -l fichier ou ls -l dossier
Exemple 1 : ls -l /var affiche les droits étendus sur le sous-répertoire « /var »
Exemple 2 : ls -l /etc/group affiche les droits étendus sur le fichier « /etc/group »
L'affichage des droits est effectué sous la forme de trois triplets de caractères indiquant les attributs (dans l'ordre : r w x) précédés d'un caractère indiquant le type du fichier :
•d : sous-répertoire
•- : fichier
•p : tube
•s : socket.
Chaque triplet correspondant à un type d’utilisateur, les triplets sont affichés dans l'ordre (u g o)
Un attribut non accordé est signalé par le caractère « - » à la place correspondante.
![]() |
Une modification des droits s’effectue A l'aide de la commande « chmod» dont la syntaxe d’utilisation est la suivante : chmod mode ressource
L'argument mode peut comporter plusieurs blocs séparés par des virgules. Chaque bloc indique :
➢pour quelle(s) catégorie(s) d'utilisateur(s) les droits sont modifiés :
◦a : pour toutes les catégories
◦u, g, o : pour le propriétaire, le groupe du propriétaire, les autres utilisateurs.
➢Le type d'action sur l'attribut(s) :
◦+ : l'attribut(s) est ajouté
◦- : l'attribut(s) est retiré
◦= : positionnement des attributs indiqués
➢Les attributs concernés : r w x
Les catégories peuvent être associées ; par exemple pour modifier les droits du propriétaire et du groupe propriétaire on spécifie « ug »
Les attributs peuvent être associés ; par exemple pour agir simultanément (en ajout ou en retrait) sur la lecture et l'écriture on spécifie « rw »
Note : seuls le propriétaire et l'administrateur du système (le root) sont autorisés à modifier les droits sur un fichier (ou une ressource quelconque) sous Linux.
Exemple 1 : Ajouter les attributs lecture et écriture et retirer l'attribut d'exécution au fichier « \tmp\toto.txt » pour le propriétaire et son groupe : chmod ug+rw-x \tmp\toto.txt
Exemple 2 : Ajouter les attributs lecture, écriture et exécution au propriétaire, lecture et exécution au groupe et exécution seule aux autres au fichier « \tmp\titi.txt » pour le propriétaire et son groupe : chmod u=rwx,g=rx,o=x \tmp\titi.txt
On peut également utiliser chmod en spécifiant les droits directement en octal ; pour l’exemple 2 ci-dessus la commande utilisée est alors : chmod 761 \tmp\titi.txt
Pour changer le propriétaire d’une ressource, il faut utiliser la commande « chown » de la manière suivante : chown nouveau_proprio fichier
Exemple – Donner le fichier « toto.txt » à l'utilisateur « riri » : chown riri toto.txt
Pour changer le groupe propriétaire d’une ressource on utilise la commande « chgrp » de la manière suivante : chgrp nouveau_gp_proprio fichier
Exemple – Donner le fichier « toto.txt » au groupe d'utilisateurs « users » : chgrp riri toto.txt
Note : pour des raisons de sécurité, seul l'administrateur du système (le root) est autorisé à modifier le propriétaire d'une ressource quelconque sous Linux.
Lorsqu’un utilisateur ou un processus lancé par un utilisateur crée un fichier (ou n’importe quel objet sur le système de fichiers), ce fichier possède un jeu de droits prédéfinis.
Il est possible de restreindre ce jeu par défaut en utilisant la commande umask accompagnée d’un nombre octal qui précise les droits à enlever.
Exemple : la commande « umask 066 » exécutée dans un shell supprimera automatiquement les droits « r » et « w » pour le groupe propriétaire et les autres de tout nouveau fichier (ou dossier» créé par la suite dans le shell.
Quand un programme exécutable est lancé par un utilisateur, il « hérite » des droits de cet utilisateur.
Exemple : si l’utilisateur « fifi » ne peut pas lire le fichier « silo.txt » et qu’il lance un programme exécutable (nommé par exemple « lecture ») qui cherche à lire ce fichier, l’opération échouera en raison des restrictions des droits de « fifi ».
Supposons à présent que le propriétaire effectif de « lecture », lui, ait le droit de lire « silo.txt », il suffirait alors de « concéder » aux utilisateurs qui lancent ce programme les droits du propriétaire effectif du programme « lecture ».
Cette possibilité est fournie par le propriétaire du programme s’il définit le SUID bit sur ce programme en utilisant la commande suivante :
chmod u+s lecture
La même opération peut être réalisée en donnant les droits d’un groupe propriétaire en utilisant la commande (SGID bit) :
chmod g+s lecture
Note : l’application des « SUID bit » et « SGID » bit n’a d’intérêt que pour un fichier et peut être nuisible pour un sous-répertoire (cf. section « Affichage des bits spéciaux » page 5)
Ce bit nuance le droit « écriture » accordé aux différentes catégories d’utilisateurs sur une ressource.
Pour un dossier il permet d’interdire l’effacement ou la création de fichiers dans le sous-répertoire, par contre ceux-ci sont toujours modifiables.
Pour un fichier exécutable ce bit provoque la conservation en mémoire du processus correspondant à l’exécution de ce fichier quand celui-ci termine son exécution.
La commande permettant d’appliquer ce bit à une ressource (fichier ou sous-répertoire) est la suivante : chmod +t ressource
Exemple : soit le sous-répertoire nommé « partage » dont les droits sont les suivants : rwxr-x--x .
Après application du « sticky bit » à ce sous-répertoire les droits affichés seront : rwxr-x--t
Note : si le droit « x » n’est pas attribué aux « autres » soit les droits suivants : rwxr-x--- . Après application du « sticky bit » à ce sous-répertoire les droits affichés seront : rwxr-x--T
La définition des droits en octal par chmod s’effectue en ajoutant un digit octal devant les 3 digits habituels servant à définir les droits « standards ».
Ce digit est codé de la manière suivante :
•bit 2 : SUID bit
•bit 1 : SGID bit
•bit 0 : sticky bit
Exemple : considérons le dossier « partage » dont les droits sont les suivants :
rwxrw-rw- ces droits traduits en octal donne le nombre suivant : 0766
Appliquons maintenant le SUID bit à ce dossier : chmod 04766
Puis le SGID bit en conservant le SUID bit : chmod 06766
Enfin le sticky bit en conservant le SUID bit et le SGID bit : chmod 07766
Pour effacer les bits SUID, SGID et sticky : chmod 00766
Soit un fichier ou un sous-répertoire pour lequel aucun des bits spéciaux n’est défini au préalable. On suppose que les droits qui lui sont appliqués sont les suivants : rwxrwxr-x
Si on lui applique le SUID bit, les droits deviennent : drwsrwxr-x le droit « x » du propriétaire est alors remplacé par le SUID bit (« s »).
Si on lui applique le SGID bit, ils deviennent : rwsrwsr-x le droit « s » du groupe propriétaire est alors remplacé par le SGID bit (« s »).
Si on lui applique le sticky bit, ils deviennent : rwsrwsr-t le droit « x » des « autres » est alors remplacé par le sticky bit (« t »).
Note : si les droits de départ avait été drwxrwxr-- , après l’application du sticky bit les droits seraient apparus avec un un « T » au lieu d’un « t » : drwsrwsr-T
Attention l’affichage des droits peut faire apparaître les lettres majuscules « S » et « T » dans les cas suivants :
1.si au départ le droit « x » n’est pas attribué aux « autres » :après l’application du « sticky bit » les droits affichés seront : rwsrwsr-T
2.de même si au départ le droit « x » n’est pas attribué au propriétaire et au groupe propriétaire : après l’application du « SUID bit » et du « SGID bit » les droits affichés seront : rwSrwSr-x
Note : l’affichage du « S » pour un sous-répertoire implique que ce sous-répertoire n’est plus « exécutable » c.a.d. qu’on ne peut plus le « traverser » ni s’y positionner. Dans le cas d’un fichier, celui-ci n’est alors exécutable par personne (même pas son propriétaire ou son groupe propriétaire) En clair le fait qu’un « S » apparaisse dans les droits indique très certainement une faute de configuration.
Permet d'étendre les droits historiques en individualisant les droits d'accès à un fichier (ou sous-répertoire) pour chaque utilisateur.
Exemple – Soit le fichier « toto.txt ». Ce fichier appartient à l'utilisateur « marc » et le groupe propriétaire du fichier est « user ». Les droits attribués à ce fichier sont les suivants : rwxr—r--.
Les droits « historiques » attribués au fichier ne permettent pas de donner à l'utilisateur « luc » le droit spécifique d'écrire dedans.
Par contre, on peut associer un nouvel « élément ACL » à ce fichier pour donner le droit « w » à « luc » en utilisant la commande suivante : setfacl -m user:luc:rw- toto.txt
Les commandes permettant d'utiliser les ACL sont les suivantes :
➢ setfacl pour positionner un élément ACL sur un fichier ou un sous-répertoire
➢ getfacl: pour lire les éléments ACL associés à un fichier ou un sous-répertoire.
L’attribution de droits étendus par utilisation d’ACL sur une ressource est signalé lors de l’affichage de ceux-ci par l’ajout du caractère « + ».
Par exemple dans le cas précédent l’utilisation de la commande « ls -l toto.txt » provoquera l’affichage des droits de la manière suivante : rwxr—r--+
Pour vous entraîner vous pouvez réaliser :
•le « TD O5 : Gestion des droits sur les fichiers » présent dans le présent document,
•les exercices 7 à 8 proposés sur la page web « http://ofppt.info/exercices-linux/ »
Une version approchante de ce Quizz est également disponible sur le site « www.evalbox.com ».
Après avoir bien relu votre cours répondez de mémoire aux questions suivantes :
1.Quelles sont les trois catégories d'utilisateurs d'un fichier (ou d'une ressource quelconque) sous Linux ? Caractérisez-les.
2.Quels sont les trois types d'attributs que l'on peut affecter à une ressource quelconque sous Linux ?
3.Quelle commande Linux (avec l'option nécessaire) permet de visualiser les droits attribués à une ressource quelconque sous Linux ?
4.Quelle commande Linux permet de modifier les droits d'une ressource quelconque ?
5.Quels sont les deux utilisateurs autorisés à modifier les droits d'une ressource quelconque sous Linux ?
6.Quelle commande Linux permet de modifier le propriétaire d'une ressource quelconque ?
7.Quel est le seul utilisateur autorisé à modifier le propriétaire d'une ressource quelconque ?