TP5 – Liste de contrôle d'accès
(ACL : Access Control List)

Introduction

Une ACL, ou Access Control List (en français : « liste de contrôle d'accès ») est, pour définir simplement la notion, une liste de permissions sur un fichier, un répertoire ou une arborescence, ajoutée aux permissions « classiques » de ce fichier. Ces permissions concernent des utilisateurs et/ou des groupes définis.

Au moyen des ACL, on peut étendre le nombre d'utilisateurs et de groupes ayant des droits sur un même fichier. Rappelons que, dans le monde UNIX, chaque fichier ne peut normalement indiquer des permissions que pour un seul utilisateur et un seul groupe, qui s'opposent à une unique catégorie correspondant à « tous les autres » (ou « le reste du monde »). Avec les ACL, on peut (entre autres) ajouter à un fichier d'autres utilisateurs et groupes et définir leurs droits séparément.

Les ACL sont très utiles (voire indispensables) dans des environnements informatiques axés sur le travail collaboratif et mutualisé.

Références :

http://fr.openclassrooms.com/informatique/cours/les-acl-access-control-lists-sous-linux

http://lea-linux.org/documentations/Gestion_des_ACL

Comment faisait-on avant les ACL ?

Dans certains cas n'affecter des droits que pour 3 catégories d'utilisateurs (soi, son groupe et les autres) représente une limitation importante. Par exemple, on peut vouloir mettre son devoir en lecture et écriture pour son binôme, mais pas pour le reste de la promo.

On atteind ce résultat avec le système de permissions classiques en stockant le fichier de son devoir dans un répertoire façade avec les droits suivants :

 └── [drwx--x--x]  Binome
     └── [-rw-rw-r--]  devoir_983.tex

Le dossier Binome est accessible à tous, mais il est impossible d'en lister son contenu (pas de droit de lecture). Il suffit alors de communiquer à son binôme le nom du fichier partagé pour qu'il puisse le modifier.

Commandes

Il existe deux commandes essentielles : l'une pour manipuler l'ACL d'un fichier ( setfacl) et l'autre pour la consulter ( getfacl). Les commandes traditionnelles chmod (et chown) ne peuvent accéder aux ACL.

setfacl

Le nom de la commande se comprend set file's ACL (« régler l'ACL du fichier »). Elle possède de nombreuses options dont il convient de prendre connaissance en consultant la page de manuel ( man setfacl).

Ajouter des permissions

La syntaxe fondamentale est simple. La commande setfacl -m u:homer:rw devoir.tex modifiera ( -m) l'ACL de devoir.tex en attribuant à l'utilisateur (préfixe u:) homer les droits rw et en lui refusant le droit d'exécution (qui n'a pas été mentionné dans la commande).

Les principaux paramètres à connaître sont :

  • préfixes :
    • u: (droits pour un utilisateur, nommé ou désigné par son uid) ;
    • g: (droits pour un groupe, nommé ou désigné par son gid) ;
    • o: (droits pour other, le reste du monde).
  • permissions : elles sont codées dans l'ordre r, w et x ou X (ce dernier représentant, comme avec chmod, le droit d'entrée dans les répertoires ou celui d'exécution pour les fichiers qui ont déjà un marqueur x). On les remplace par - pour une interdiction explicite. Ne pas mentionner un droit revient aussi à une interdiction : setfacl -m u:homer:w devoir.tex et setfacl -m u:homer:-w- devoir.tex reviennent au même.

On peut construire des commandes plus complexes en enchaînant les entrées dans l'ACL : setfacl -m u:homer:rw,g:etudiants:r--,o:--- devoir.tex définit des permissions dans l'ACL de devoir.tex pour l'utilisateur homer, le groupe etudiants et le reste du monde.

La commande fonctionne bien sûr aussi de manière récursive (option -R) : setfacl -Rm u:homer:rw Devoir/ modifie l'ACL de tous les fichiers situés sous Devoir/ en attribuant une permission de lecture et d'écriture à l'utilisateur homer.

Expérimentez
  1. créez un fichier ~/toto et y écrire quelque chose
  2. retirer les droits de lecture et écriture pour tout le monde en dehors de vous avec la méthode classique ( chmod)
  3. avec la commande setfacl, donnez les droits de lecture à votre binôme ou votre voisin
    setfacl -m u:bob:r toto
  4. un ls -l ~/toto affiche un ' +' à la suite des droits montrant que des ACL ont été ajoutés au fichier
  5. si vous avez un binôme
    • ouvrez un deuxième terminal à côté du premier
    • laissez votre binôme se connecter : su bob
    • votre binôme doit pouvoir lire le fichier et seulement vous !
  6. si vous n'avez pas de binôme
    • vérifiez que votre voisin peut lire votre fichier
    • Assurez vous que personne d'autre ne peut le lire

Retirer des permissions

Pour annuler tout ou partie d'une ACL : setfacl -b /var/www/index.php ôte tout le contenu de l'ACL du fichier, tandis que setfacl -x u:homer,g:étudiants /var/www/index.php retire les permissions propres à homer et au groupe étudiants.

Les permissions ACL par défaut d'un répertoire (d:) s'annulent par setfacl -k.

Expérimentez

Retirer les ACL sur ~/toto et assurez-vous qu'elles ont disparues :

  • avec ls -l ~/toto : il n'y a plus le ' +'
  • le binôme ou voisin ne peut plus lire le fichier

getfacl

Cette commande suivie d'un nom de fichier affiche l'ACL de ce fichier (get file's ACL « récupérer l'ACL du fichier »).

Expérimentez

Recréer un fichier toto et changer ses droits en une seule commande :

  • lecture pour votre votre binôme ou voisin
  • rien pour le groupe et les autres

Afficher les droits avec getfacl

 getfacl toto
 # file: toto
 # owner: bob
 # group: bob
 user::rw-
 user:homer:r--
 group::---
 mask::r--
 other::---

ACL et interface graphique

Interface graphique du programme eiciel

Il est possible de visionner et modifier les liste de contrôle d'accès (ACL) avec une interface graphique avec le programme eiciel.

Par exemple avec l'expérimentation précédente, nous obtenons l'interface ci-contre.

Exercice

En vous inspirant du script développé dans l' exercice 3 du TP3, vous allez créer deux scripts creer_arbo_ACL.sh et montre_arbo_ACL.sh.

Script creer_arbo_ACL

Ce script va créer la même arborescence que dans l' exercice du TP4, mais la racine sera le dossier Arbo.

Ensuite, les droits du dossier Binome seront modifiés de la manière suivante :

  • le dossier Binome ne peut être accédé et lu et modifié que par soi-même. Seul son binôme (ou voisin) peut y accéder en lecture grâce à une ACL.
  • Personne ne peut lire ou modifier le fichier devoir.tex, à part soi-même et votre binôme.

Comme dans le TP3, le script commence par détruire le dossier Arbo pour construire l'arborescence à partir de rien.

Script montre_arbo_ACL

Ce script affichera des informations sur l'arborescence Arbo de la manière suivante :
 -- Affichage des droits de l'arborescence Arbo
 -  Auteur(s) : Nom1 et Nom2

 Arbo
 ├── [drwx------]  Binome
 │   └── [-rw-------]  devoir.tex
 ├── [drwxr--r--]  Connaisseurs
 │   └── [-rw-r--r--]  reponse746.txt
 ├── [drwx-wx-wx]  Depot
 ├── [drwxr-xr-x]  Public
 │   ├── [drwxr-xr-x]  images
 │   ├── [drwxr-xr-x]  medias
 │   └── [-rw-r--r--]  wikipedia.html
 └── [drwx------]  Secret
     └── [-rw-------]  journal.doc

 7 directories, 4 files

 # file: Arbo/Binome/
 # owner: bob
 # group: bob
 user::rwx
 user:homer:r-x
 group::---
 mask::r-x
 other::---

 # file: Arbo/Binome/devoir.tex
 # owner: bob
 # group: bob
 user::rw-
 user:homer:rw-
 group::---
 mask::r--
 other::---