Outils pour utilisateurs

Outils du site


cours:informatique:sysadmin:administrer_un_systeme_linux:240_gestion_des_droits

Notes et transcriptions du cours “Administrez un système Linux” disponible sur la plateforme Openclassrooms.

Gérez les droits sur les fichiers

“Sous Linux, tout est fichier.” Cette idée géniale nous vient de Rudd Canaday, l'un des trois fondateurs des systèmes Unix (avec Ken Thompson et Dennis Ritchie) dans les années 70.

Bien entendu, les données sont stockées dans des fichiers, mais les périphériques sont aussi des fichiers, les disques, les cartes réseau, les répertoires, la représentation des processus, etc. Il est donc primordial de comprendre la gestion des droits associée à ces fichiers.

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 : désigne tous 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.

Ce mode de gestion des droits nous vient d'une norme de l'armée américaine nommée Trusted Computer System Evaluation Criteria (plus connu sous le nom du “livre orange” (orange book).

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 “o” (pour “others”).

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 :

  • rwx pour u
  • rwx pour g
  • rwx pour o
# En tant que propriétaire du fichier ou via le compte root
# on peut changer les droits s'appliquant sur un fichier
 
# Accorde tous les droits pour l'utilisateur propriétaire
chmod u+rwx aFile
 
# Retire le droit d'exécution pour tous les utilisateurs
chmod ugo-x aFile
 
# Equivalent
chmod a-x aFile

Simplifiez la gestion des droits avec leur valeur numérique

Vous savez que les bons informaticiens cherchent toujours à économiser les frappes clavier au strict nécessaire. Et la commande précédente chmod ugo-rw+x fut raccourcie de manière très efficace par chmod a=x.

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 taper les commandes :

chmod u=rwx aFile
chmod g=rx aFile
chmod o=r aFile

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 1 * 2^0 soit 1 ;
  • Le bit w est en position 1, sa valeur lorsqu'il est positionné à 1, en base 2 est donc 1 * 2^1, soit 2 ;
  • Le bit r est en position 2, sa valeur lorsqu'il est positionné à 1, en base 2 est donc 1 * 2^2, soit 4 ;

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

Droits valeur binaire Valeur décimale
- - - 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
# Affecter les droits de lecture/ecriture pour tout le monde
chmod 666 aFile
 
# Donner les droits de lecture et d'execution à tous mais
# n'autoriser l'écriture qu'au compte propriétaire
chmod 755 aFile

Changez le propriétaire d’un fichier sous Linux

La seconde commande importante concernant la gestion des droits sous Linux est chown(pour “change owner”, modification du compte propriétaire).

La commande chown permet de changer la propriété d'un objet Linux.

Mais ATTENTION, vous devez disposer d'une élévation de privilèges pour lancer cette commande. En effet, un utilisateur lambda ne peut pas transférer la propriété des ses objets à un autre utilisateur. C'est tout à fait normal, cette fonctionnalité poserait beaucoup de problèmes de sécurité et de fiabilité.

# Meme si je suis propriétaire, je ne peux pas changer le compte propriétaire
 
sudo chown userDest:groupDest aFile

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 :

  • 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.
  • 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).

Ci dessous on montre notamment comment la commande passwd illustre parfaitement le rôle essentiel mais très dangereux de SetUID, et je vous propose d’illustrer le Sticky Bit avec son plus fervent représentant : le répertoire /tmp!

:TODO_DOCUPDATE:

 

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 donc 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

◁ Précédent | ⌂ Retour au sommaire | Suivant ▷

cours/informatique/sysadmin/administrer_un_systeme_linux/240_gestion_des_droits.txt · Dernière modification : 2024/01/26 11:09 de yoann