• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 22/11/2023

Gérez les droits sur les fichiers

“Sous Linux, tout est fichier.”

Dans ce chapitre, je vous propose de détailler le principe fondamental de la gestion des droits sous Linux dit DAC pour Discretionary Access Control.

Nous verrons ensuite :

  • la représentation de ces droits : lecture, écriture, exécution pour les fichiers et les répertoires,

  • leur correspondance numérique

Et nous verrons deux droits un peu particulier sous Linux :SetUID et StickyBit

Appréhendez le principe régissant les droits sous Linux

Le contrôle d'accès sous les systèmes Unix, et par héritage sous Linux, est dit “discrétionnaire“ : tous les objets (répertoires, fichiers, processus, etc.) sont la propriété d'un compte utilisateur ou système, ainsi que d'un groupe de comptes utilisateurs et/ou système.

Les droits associés à ces objets sont donc définis pour :

  • Le propriétaire de l'objet

  • Le groupe propriétaire de l'objet

  • Tous les autres : comptes utilisateurs et/ou système qui ne sont pas le compte et le groupe propriétaire.

L'aspect discrétionnaire de la gestion de ces droits réside dans le fait que le propriétaire de l'objet (ainsi que le super utilisateur root) peut directement gérer les droits associés à cet objet.

Selon cette norme, un utilisateur peut donc créer, modifier ou supprimer ses propres objets, et définir quels autres comptes utilisateurs peuvent accéder en lecture ou modification à cet objet.

Associée à la présence d'un compte super utilisateur, généralement root, cette gestion de droits reste finalement assez simple. Mais on peut alors lui reprocher son manque de granularité. Par exemple, un processus lancé par un utilisateur hérite de ses droits même si ce processus n'en a pas forcément besoin.

Maîtrisez le triplets des droits sous Linux

Les droits sous Linux sont définis à l'aide de 3 bits :

  1. Un bit à la position 2, pour indiquer le droit de lecture, généralement noté r (pour "read").

  2. Un bit à la position 1, pour indiquer le droit en écriture, généralement noté w (pour "write").

  3. Un bit à la position 0, pour indiquer le droit en exécution, généralement noté x (pour "execute").

Et nous avons vu ci-dessus que les droits étaient exprimés :

  • pour le propriétaire noté u (pour "user") ;

  • pour le groupe propriétaire noté g (pour "group") ;

  • et enfin pour tous les autres, notés eux o (pour "others" comme un très bon film d’ailleurs).

Vous pouvez en déduire une expression générale des droits sur un objet à l'aide de 9 bits, répartis en 3 groupes de 3 dans l'ordre suivant :

  1. rwx pour u

  2. rwx pour g

  3. rwx pour o 

Voilà, vous avez tout compris ! Ah… on me signale dans l’oreillette qu’un petit screencast qui détaille tout ça serait le bienvenu ? Pas de soucis, et au passage on en profite pour découvrir les commandes touch et chmod, c’est parti !

Simplifiez la gestion des droits avec leur valeur numérique

Mais qu'en est-il lorsque vous souhaitez positionner des droits spécifiques à chaque utilisateur ? Par exemple :

  • rwx pour l'utilisateur propriétaire ;

  • rx pour le groupe propriétaire ;

  • r uniquement pour tous les autres.

Il faudrait alors écrire :

  • chmod u=rwx fichier

  • puis chmod g=rx fichier

  • puis chmod o=r fichier

Les bons informaticiens étant fainéants, il y a forcément plus court ! Et oui, il y a effectivement plus court, en passant notamment par la valeur numérique de chaque bit de permission.

En effet, en considérant que :

  • le bit x est en position 0, sa valeur lorsqu'il est positionné à 1, en base 2 est donc 1x2exp0, soit 1 ;

  • Le bit w est en position 1, sa valeur lorsqu'il est positionné à 1, en base 2 est donc 1x2exp1, soit 2 ;

  • Le bit r est en position 2, sa valeur lorsqu'il est positionné à 1, en base 2 est donc 1x2exp2, soit 4 ;

Nous avons donc une valeur en base décimale équivalente à chaque combinaison possible de ces 3 bits telle que :

- - -  ->  000  ->  0+0+0  ->  0

- - x    ->  001  ->  0+0+1  ->  1

- w - ->  010  ->  0+2+0  ->  2

- w x ->  011  ->  0+2+1  ->  3

r - - ->  100  ->  4+0+0  ->  4

r - x ->  101  ->  4+0+1  ->  5

r w - ->  110  ->  4+2+0  ->  6

r w x ->  111  ->  4+2+1  ->  7

Oui, bon, je sais, tout ça parait un peu compliqué, mais il n’en est rien. La preuve : je vous montre comment vous servir de la base 2 pour gérer les droits sur les fichiers !

Changez le propriétaire d’un fichier sous Linux

Je vous montre cette fonctionnalité importante dans le screencast ci-dessous, et au passage nous verrons l’utilité de son option-R( pour "recursive") qui est très pratique :

Manipulez les droits spéciaux sous Linux

Vous connaissez désormais les droits standard sous Linux, mais il existe deux droits spéciaux supplémentaires que je vous propose d'analyser :

  1. Le premier de ces droits particuliers se nomme le SetUID bit, et son petit frère le SetGID bit. Ce droit permet notamment d’exécuter un fichier avec les droits de son propriétaire ! C’est très important, car de nombreux aspects de la gestion des droits sous Linux utilisent cette propriété fondamentale.

  2. Le second est le Sticky Bit(le "bit collant"). Ce droit est une tentative de gestion d'espaces collaboratifs, proposé par la branche BSD de Unix au milieu des années 80 (même si une version antérieure de cette fonctionnalité existait déjà sur Unix dès les années 70, mais pas du tout avec le même objectif).

Allez, je vous montre tout ça dans le screencast ci-dessous. Vous verrez notamment comment la commande passwd illustre parfaitement le rôle essentiel mais très dangereux deSetUID, et je vous propose d’illustrer le Sticky Bit avec son plus fervent représentant : le répertoire /tmp!

En résumé

  • Le contrôle d'accès sous Linux est discrétionnaire (DAC)

  • Les droits d'accès sont donc définis pour 3 entités : le propriétaire de l'objet, le groupe propriétaire et tous les autres comptes utilisateurs et/ou système.

  • Les droits d'accès sont également définis avec 3 bits : READ, WRITE et EXECUTE

  • Au total, il faut 9 bits (READ, WRITE et EXECUTE x 3 entités) pour définir les droits d'accès d'un objet sous Linux

  • Ces droits sont exprimés en puissance de 2 avec les valeurs 0, 1, 2 et 4 offrant une combinaison unique, par exemple 755

  • Les commandes chown/chgrp("change owner"/"change group") permettent de changer le propriétaire et le groupe propriétaire d'un objet

  • SetUID est un droit spécial permettant d'exécuter un fichier avec les droits de son propriétaire 

  • Sticky Bit est un droit spécial permettant de gérer des espaces partagés

Bref, les fichiers Linux n'ont presque plus de secret pour vous ! Il est temps de passer à un autre gros morceau : la gestion du réseau. En route vers la prochaine partie alors !

Exemple de certificat de réussite
Exemple de certificat de réussite