Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

Developpez.com - Linux
X

Choisissez d'abord la catégorieensuite la rubrique :

 

VI. Droits d'accès aux fichiers

Par Hugo ETIEVANT



Notion de droits

Les droits d'accès aux fichiers (appelés encore modes ou permissions) sont un point essentiel du système Unix. Ils permettent de définir des droits différents sur un même fichier selon la catégorie d'utilisateurs.

Ainsi les manipulations de fichiers sont restreintes selon les droits alloués à chaque fichier. A chaque catégorie d'utilisateur correspond des droits spécifiques sur un fichier.


Affichage des droits (ls)

Pour afficher à l'écran les droits alloués à un fichier, il faut utiliser la commande ls -l qui permet de lister les fichiers d'un répertoire avec toutes les informations connexes possibles dont les droits du fichier.

Exemple :
ls -l
-rw-r--r-- cyberzoide univ astuces.txt
drwxr-xr-x cyberzoide univ data
-rw-r--r-- cyberzoide univ lettre.doc
-rw------- cyberzoide univ Mail

Ici n'ont été reproduites que les informations intéressantes affichées par la commande (certaines ont été effacées). Sont affichés : la liste des droits puis le nom du propriétaire de chaque fichier, le nom du groupe d'utilisateurs auquel appartient de propriétaire des fichier et enfin le nom du fichier.

En préfixe des droits (et ici en noir) est affiché le type du fichier (d pour les répertoires et - pour les fichiers normaux et les exécutables).

On peut voir dans cet exemple que tous les fichiers sont du même propriétaire dont le nom est cyberzoide. Ce propriétaire daisant partie du groupe appelé univ. Vous apprendrez par la suite la significations des lettres r, w et x.

Droits d'accès aux fichiers.

Droits d'accès

Les droits d'accès d'un fichier sont au nombre de trois:

Lecture

L'accès en lecture autorise la lecture du fichier, c'est-à-dire qu'il est possible d'éditer ce fichier avec une application quelconque pour en voir le contenu. Cet accès est désigné par la lettre r (read).

Alloué à un répertoire, ce droit permet de lister les fichiers qu'il contient.

Ecriture

L'accès en écriture permet de modifier un fichier et de le supprimer. Il est désigné par la lettre w (write).

Alloué à un répertoire, il autorise la modification et la suppression des fichiers qu'il contient quelques soient les droits d'accès des fichiers de ce répertoire (mêmes s'ils ne possèdent pas eux-même le droit en écriture). Donc attention!

Exécution

L'accès en exécution permet à un fichier exécutable d'être lancé et à un répertoire d'être ouvert. Il est désigné par la lettre x (execute).

Pour qu'un programme puisse être exécuté, il est indispensable que le droit en exécution sur ce fichier soit autorisé pour l'utilisateur qui souhaite le lancer.

Quant à un répertoire, il est tout aussi indispensable que son droit en exécution soit autorisé pour qu'on puisse accèder aux fichiers qu'il contient.

Ce droit en exécution est sans effet lorsqu'il est affecté à un fichier qui n'est pas un exécutable.


Catégories d'utilisateurs

A un fichier on affecte les droits correspondants à trois catégories d'utilisateurs : les droits du propriétaire du fichier, les permissions du groupe d'utilisateurs auquel appartient le propriétaire et celles concédées à tous les autres.

Propriétaire

Le propriétaire d'un fichier est la personne qui le crée. Il est désigné par la lettre u (owner).

Le UID désigne par un identificateur numérique unique le propriétaire d'un fichier.

Groupe

Un groupe d'utilisateur est un ensemble d'utilisateurs privilégiés ayant en général des permissions moindre que le propriétaire d'un fichier mais plus grandes que la catégorie qui suit. Cette catégorie est désignée par la lettre g (group).

Le GID désigne par un identificateur numérique unique le groupe auquel appartient le propriétaire d'un fichier.

Autres

Cette catégorie regroupe tous les utilisateurs qui ne sont ni le propriétaire d'un fichier ni faisant partir du même groupe que le propriétaire. On les désignent par la lettre a (other).


Modèle concentrique des droits d'accès

Modèle concentrique des catégories d'utilisateurs.

Le schéma ci-haut montre qu'un ensemble de propriétaires forme un groupe, qu'un ensemble de groupes forme la catégorie "autres" (qui sont tous ceux qui prétendent à accéder aux données).

L'accès à un sous ensemble concentrique suppose a priori d'obtenir des droits supplémentaires.


Identification des droits

Identification globale

Identification des droits.

A chaque catégorie d'utilisateur on associe un triplet de droits : lecture, écriture et exécution. Au total 9 droits (3*3) sont affectés à chaque fichier.

Lorsqu'un droit est alloué, on voit la lettre correspondante (r, w ou x). Si le droit est refusé, on voit un tiret (-).

Dans l'exemple ci-contre, le propriétaire dispose des droits de lecture et d'écriture. Tandit que le groupe ainsi que les autres ne disposent que du droit de lecture.

Combinaisons des droits

A chacune des 3 catégories d'utilisateur, on associe d'une des 8 combinaisons différentes possibles pour l'allocation des droits que le tableau ci-dessous récapitule.

TripletDroits correspondants
---aucun
--xexécution
-w-écriture
-wxécriture et exécution
r--lecture
r-xlecture et exécution
rw-lecture et écriture
rwxlecture, écriture et exécution

Or les droits globaux d'un fichier sont identifiés par l'association de 3 triplets de droits. Ce qui nous fait 83=512 combinaisons différentes. Le tableau suivant regroupe quelques unes de ces combinaisons possibles.

Droits globauxDescription
rwxr-xr-xLe propriétaire a tous les droits, et le groupe ainsi que les autres n'ont pas accès en écriture.
rwxr--r--Le propriétaire a tous les droits, et le groupe ainsi que les autres n'ont accès qu'en lecture.
rwxr-x---Le propriétaire a tous les droits, le groupe possède les droits de lecture et d'exécution alors que les autres n'ont aucun droit.
rwx------Le propriétaire a tous les droits mais le groupe et les autres aucun.
rw-r--r--Le propriétaire possède les droits de lecture, écriture mais pas exécution. Et le groupe et les autres ont le droit en lecture.
rw-rw----Le propriétaire et le groupe ont le droit en lecture et écriture mais les autres n'ont aucun droit.

Changement des droits (chmod)

Il est offert au propriétaire d'un fichier (et seulement à lui seul) de modifier les droits du fichier. C'est-à-dire qu'il peut supprimer des droits ou bien en rajouter de nouveaux à chacune des trois catégories d'utilisateur.

Pour cela, on utilise la commande chmod (change mode) selon la syntaxe suivante :

chmod droits fichier.

On peut utiliser cette commande de deux façons différentes pour les mêmes résultats. On choisit soit la notation symbolique soit la notation numérique.

Notation symbolique

Pour affecter à chaque catégorie les droits voulus, on peut utiliser une notation symbolique selon la syntaxe :

chmod catégorie+opération+liste-des-droits fichier

Où les termes catégorie, opération et liste des droits doivent êtres respectivement remplacés par leur notation décrite dans les tableaux suivants.

CatégorieDescription
upropriétaire
ggroupe
aautres

OpérationDescription
+ajouter
-retirer
=définir

DroitDescription
rlecture
wécriture
xexécution

Comme le montre le tableau ci-dessous, la commande chmod lorsqu'elle est utilisée en notation symbolique ne permet de modifier les droits que pour une catégorie d'utilisateurs à la fois.

On peut retirer, ajouter ou définir un ou plusieurs droits en même temps.

ExempleDescription
chmod g=rwx temps.txtAlloue au groupe tous les droits.
chmod g-w temps.txtRetire au groupe le droit d'écriture.
chmod a-rwx temps.txtRetire aux autres tous les droits.
chmod u=rw temps.txtAlloue au propriétaire les droits en lecture et en écriture.
chmod a+r temps.txtRajoute aux autres le droit en lecture.

Notation numérique

L'avantage de la notation numérique sur la précédente est de permettre sur un fichier la définition absolue des droits de toutes les catégories en même temps selon la syntaxe :

chmod serie-de-3-chiffres fichier

Ainsi on remplace chacun des triplets par un nombre compris entre 0 et 7. Ce qui nous fait un nombre à trois chiffres en guise de notation numérique.

Le tableau ci-après permet de faire la convertion entre les différentes triplets possibles et leur notation octale (nombre en base 8).

TripletNombre binaireNombre octal
---0000
--x0011
-w-0102
-wx0113
r--1004
r-x1015
rw-1106
rwx1117

L'emploi de cette numérotion suppose de connaître ou de savoir retrouver aisément le nombre octal associé à chaque triplet. Ce qui est assez simple, puisque cette numérotation est la convertion en octal de la représentation binaire du triplet. Considérez la présence d'un droit comme un booléen valant 1 et son absence comme 0, vous obtenez alors un nombre binaire qu'il est aisé de convertir en octal (ce qui revient à du décimal car on ne passe pas aux dizaines dans la base 8).

ExempleDroits globaux associés
chmod 640 temps.txtrw-r-----
chmod 700 temps.txtrwx------
chmod 664 temps.txtrw-rw-r--
chmod 761 temps.txtrwxrw-r--
chmod 610 temps.txtrw-r-----

Remarques importantes

Exécutable

Un programme ne peut être exécuté que si le fichier exécutable coorespondant possède le droit d'exécution dans la catégorie à laquelle appartient l'utilisateur.

Répertoire

On ne peut accèder à un fichier que si les répertoires successifs constitutifs du chemin absolu de ce fichier possèdent le droit en exécution.

Pour pouvoir lister les fichiers d'un répertoire, ce dernier doit être accessible en lecture.

Fichier

Le droit en exécution n'a aucune incidence sur un fichier non exécutable.

Par contre, un script (c'est-à-dire un fichier texte contenant des commandes du Shell) doit avoir les droits en lecture et en exécution pour pouvoir être interprété et exécuté par le Shell.


Masque de protection des fichiers (umask)

Le masque de protection de fichier permet de définir les droits par défaut de tout fichier créé.

Manipulation

Ce masque se comporte comme un filtre et utilise la notation numérique. On parle de filtre car il ne contient pas la série des 3 chiffres octaux correspondants aux droits à allouer aux fichiers, mais celle correspondant aux droits à ne pas allouer.

Le système Unix affecte à un fichier les droits globaux résultant de la soustraction des droits maxima 777 par le masque de protection.

Exemple : si le masque de protection vaut 037 alors 740 (=777-037) seront les droits alloués à tout nouveau fichier.

La commande permettant de définir un nouveau masque de protection est umask.

Syntaxe : umask droits

Exemple : umask 037

  777 = rwx rwx rwx = 111 111 111
- 037 = --- -wx rwx = 000 011 111
= 740 = rwx r-- --- = 111 100 000

D'après cet exemple, tout nouveau fichier aura les droits 740 (rwxr-----) car le masque de protection vaudra 037 (----wxrwx).

Pour connaître la valeur du masque de protection, tapez umask sans attribut.

Remarque

Lors de la création d'un fichier, même si le masque de protection spécifie le droit en exécution, ce dernier ne sera pas affecté au fichier nouvellement créé mais seulement à un répertoire. Donc, si vous créez un fichier exécutable ou un script il faudra lui rajouter manuellement le droit en exécution.


Droits étendus

SUID

Définition

Nous avons vu plus haut que chaque catégorie d'utlisateurs dispose de droits différenciés sur les fichiers. Et seul le propriétaire d'un fichier a le pouvoir de céder des droits à d'autres utilisateurs.

Lorsqu'un utilisateur lance un programme, ce programme s'approprie les droits de l'utilisateur pour la manipulation des fichiers et non pas ceux du propriétaire du fichier (sinon quel souk!).

Mais il est quelque fois nécessaire de permettre à d'autres utilisateurs l'accès à des données normalement protégées. Ce droit SUID permet de préter à un utilisateur de façon temporaire, des droits suplémentaires par l'intermédiaire d'un programme (fichier exécutable).

En exécutant un programme possédant un droit SUID, un utilisateur s'appropie les droits du propriétaire du fichier exécutable durant le temps d'exécution du programme. Ces droits supplémentaires ne sont valables que sur les fichiers appelés par le programme et les opérations effectuées par le programme et que durant le temps d'exécution du programme.

Son utilité vient du fait qu'il n'est pas besoin d'accorder durablement des droits étendus à n'importe qui sur des fichiers sensibles. Puisque l'accès à ces fichiers est filtré par un programme qui est seul à prendre des initiatives sur ces fichiers.

Exemple

L'exemple le plus flagrant est celui du programme /usr/bin/passwd (rws--x--x) qui appartient à l'utilisateur root. Ce programme possède le droit s en lieu et place du droit en exécution du triplet du propriétaire. Ce programme sert à modifier votre mot de passe personnel qui est stocké dans le fichier /etc/passwd (rw-r--r--) appartenant à root dont vous n'avez pas les droits en écriture.

Comment donc modifier votre mot de passe si vous n'êtes pas autorisé à écrire sur le fichier stockant les mots passes ?!! Pour des raisons de sécurité évidentes, le root interdit à quiconque de pouvoir modifier ou supprimer ce fichier. Par contre le programme /usr/bin/passwd vous y autorise grace au droit SUID : vous utilisez le droit en écriture du root durant l'exécution du programme qui change votre mot de passe.

Manipulation

Pour ajouter un droit SUID à un programme, utiliser la commande chmod de la même manière que vous procéderiez pour un droit normal.

Notation symbolique

Syntaxe : chmod u+s fichier-exécutable.

Exemple : chmod u+s data/hotprog.

Notation numérique

La valeur numérique d'un SIUD est 4000 et s'ajoute à la valeur de la série numérique globale.

Syntaxe : chmod 4+droits fichier-exécutable.

Exemple : chmod 4755 monprog.

Dans cet exemple on donne les droits rwsr-xr-x au fichier monprog. Ne pas oublier que le droit SUID s'affiche à la place du droit en exécution du propriétaire sans que ce dernier soit supprimé!

Nota : la présence du droit SUID suppose la présence du droit en exécution qui permet de lancer le fichier exécutable.

SGID

Le droit SGID fonctionne différemment selon qu'il est affecté à un fichier exécutable ou à un répertoire.

Exécutable

Sur un fichier exécutable, le SGID est similaire au droit SUID vu précédemment sauf qu'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.

Répertoire

Tout fichier créé porte les droits du masque de protection de son propriétaire. De plus, tout fichier porte un UID (identificateur de propriétaire) et un GID (identificateur de groupe). C'est-à-dire qu'un fichier est toujours identifié par le nom de son propriétaire ainsi que par le nom du groupe auquel appartient le propriétaire.

Le droit SGID, lorsqu'il est affecté à un répertoire, casse cette logique. Puisque tout nouveau fichier créé dans un répertoire marqué par le SGID sera de groupe non pas celui du propriétaire du fichier mais celui du propriétaire du répertoire.

Ainsi, tout fichier créé dans un répertoire portant le SGID, héritera du groupe du propriétaire du répertoire.

Manipulation

La valeur numérique du droit SGID est 2000, il est symbolisé par la lettre s et est affiché à la place du droit d'exécution du groupe.

Notation symbolique

Syntaxe : chmod g+s fichier-exécutable|répertoire.

Exemple : chmod g+s data/.

Notation numérique

Syntaxe : chmod 2+droits fichier-exécutable|répertoire.

Exemple : chmod 2755 monprog.

Dans cet exemple on donne les droits rwxr-sr-x au fichier monprog. Ne pas oublier que le droit GUID s'affiche à la place du droit en exécution du groupe sans que ce dernier soit supprimé!

Sticky Bit

Le droit Sticky Bit (appellé aussi bit collant) est alloué à la catégorie autres d'un répertoire.

Il permet d'interdire à tout utilisateur (sauf le root) de supprimer un fichier dont il n'est pas le propriétaire, quelque soient ses droits.

Si le répertoire en question est accessible en écriture par n'importe quel utilisateur (rwxrwxrwx), n'importe qui peut poser ce bit collant qui protège tous les fichiers d'une suppression ou modification de la part d'un utilisateur autre que son propriétaire.

Ce bit collant permet donc d'aller à l'encontre du droit en écriture d'un répertoire dont héritent les fichiers du répertoire.

Sa valeur numérique est 1000 et est représenté symboliquement par t.

Exemple : chmod 1755 tmp/.

Exemple : chmod a+t tmp/.

Ce droit s'affiche en lieu et place du droit en exécution de la catégorie autres.

Contacter le responsable de la rubrique Linux