Droits d’accès fichiers et Access Control Lists (ACL)

Les droits d’accès

Dans un système d’exploitation, les dossiers et les fichiers sont protégés par un système de droits d’accès. Les permissions accordées concernent le plus souvent un utilisateur ou un groupe défini.

Les droits d’accès classiques (à la Unix)

On distingue les types de permission suivants:

  • read: le mode lecture (r)
  • write: le mode écriture permettant la modification (w)
  • execute: pour permettre l’exécution (x) pour un fichier. Mais pour un dossier, il permet de d’indiquer la possibilité de référencer les noms qu’il contient.
  • si la permission n’est pas accordée alors on la remplace par : -

On peut constater d’autres symboles combinés avec les permissions standards mais qui concernent plutôt la nature des fichiers :

  • lien: désigne si c’est un raccourci (l)
  • dossier: indique que c’est un dossier (d)
  • fichier: un fichier normal (-)

Sous linux, pour afficher les droits d’accès des dossiers ou des fichiers, on peut utiliser la commande ls -l. On obtient une sortie contenant quelque chose comme -rwxrwxrwx correspondant au masque des permissions dont la signification des lettres est expliquée ci-dessus. La première lettre désigne si c’est un fichier ou un dossier ou un lien, les 3 lettres suivantes définissent l’accès pour l’utilisateur, les 3 lettres suivantes pour le groupe, et les 3 dernières pour les autres. Voici un exemple d’exécution de cette commande (droit d’accès du fichier toto.txt pour l’utilisateur carole et le groupe carole) :

  • 1ère lettre - : fichier
  • 3 lettres suivantes rw- : l’utilisateur carole pourra lire et modifier le fichier toto.txt mais pas l’exécuter.
  • 3 lettres suivantes r-- : le groupe carole pourra lire le fichier toto.txt et non le modifier ni l’exécuter.
  • 3 dernières lettres r-- : les autres ne pourra que lire le fichier toto.txt.

Les droits spéciaux

  • SUID : utilisé pour les programmes (s à la place de x). Si le programme avec ce droit est exécuté, alors les droits du processus seront ceux du propriétaire du fichier et non ceux de celui qui exécute la commande. L’exemple le plus courant de son utilisation est avec le programme passwd. En effet, passwd demande à modifier les fichiers /etc/passwd et /etc/shadow qui sont des fichiers appartenant à root et ne peuvent être modifiés que sous contrôle.
  • SGID: utilisé pour les programmes et les dossiers (s à la place de x). Comme SUID, une fois exécuté, le programme aura les même droits que le groupe auquel appartient le fichier et non pas ceux du groupe de l’utilisateur qui lance. Par contre s’il s’agit d’un dossier, alors les fichiers et sous-dossiers contenus appartiendront au groupe du dossier à leur création.
  • Sticky bit: appliqué à un fichier (t à la place de x), le sticky bit permet au processus de rester le plus longtemps possible en mémoire. En revanche pour un dossier, il interdit aux autres utilisateurs à part le propriétaire de supprimer le contenu du dossier. Un exemple simple est le répertoire /tmp dont on souhaite à la fois qu’il contienne pour tout le monde des fichiers d’usage temporaire mais que chacun ne puisse supprimer que les siens.

Les ACLs c’est quoi ?

Les droits d’accès classiques sont restreints à ne s’appliquer que pour un seul utilisateur ou un seul groupe. C’est là qu’interviennent les ACLs. En effet, leur rôle est de peaufiner les droits standards en permettant de définir des droits avec une granularité aussi fine que l’on souhaite.

Voici la structure des commandes ordinaire pour définir une ACL :

setfacl <-s/-m/-x> u:<utilisateur>:<permissions> <fichier(s)>
setfacl <-s/-m/-x> g:<groupe>:<permissions> <fichier(s)>
setfacl <-s/-m/-x> o:<permissions> <fichier(s)>

Notation :

Les options -s , -m et -x permettent respectivement d’attribuer, de modifier et de supprimer des permissions. Les lettres u, g et o permettent de définir si la permission s’applique à un utilisateur, ou à un groupe ou autres (respectivement). Les parties entre <> sont à remplacer et permissions correspond aux même types que les droits d’accès classiques.

Pour connaître l’ACL d’un fichier ou un dossier, on utilise la commande :

getfacl fichier

Exemple de scénario d’utilisation

Reprenons notre exemple le fichier toto.txt :

Ici, il n’y a rien d’extraordinaire. Pour le fichier toto.txt, le propriétaire c’est carole appartenant au groupe carole. L’utilisateur pourra lire et écrire le fichier. Les membres du groupe ainsi que les autres ne peuvent que lire le fichier.

Disons maintenant qu’on a un nouvel utilisateur jojo qui appartient au groupe carole mais auquel on veut attribuer des privilèges d’écriture, de lecture et d’exécution sur le fichier toto.txt.

Vérifions avec la commande test -x toto.txt si notre modification fonctionne bien avec ce nous espérons c’est-à-dire que l’utilisateur carole n’a pas le droit d’exécution sur le fichier toto.txt et que l’utilisateur jojo aura le droit d’exécution sur le fichier toto.txt.

Mais comment savoir si un fichier est configuré avec une ACL ? Quand on exécute la commande ls -l si un “+” est ajouté à la fin du masque comme par exemple pour le fichier toto.txt alors ce fichier a des droits étendus (ACL) :

Si on change le propriétaire du fichier avec la commande chown, cela n’affectera pas la configuration des ACLs.

ACL par défaut et héritage

Lors de la création d’un fichier ou d’un dossier, les permissions standards du répertoire parent sont transmis au fils mais pas les droits étendus (les ACLs). Pour y remédier, il est possible de définir nous mêmes des ACLs de défauts qui seront seront transmis à tous les fichiers fils ainsi que tous les sous-répertoires. Pour cela on ajoute le paramètre -d à la commande setfacl lorsque l’on affecte l’ACL du répertoire parent.

Illustration:
Soit un répertoire nommé monDossierParent auquel on affecte une ACL pour restreindre l’accès pour l’utilisateur jojo. On crée un sous répertoire nommé monDossierFils.

Le sous-répertoire monDossierFils n’a pas hérité des ACLs de son parent. Maintenant, on va ajouter une ACL par défaut à monDossierFils pour que tous les descendants de monDossierFils héritent de cette ACL.

Le fichier titi.txt a hérité des ACLs de son dossier parent.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.