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
etx
ouX
(ce dernier représentant, comme avecchmod
, 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
etsetfacl -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
.
- créez un fichier
~/toto
et y écrire quelque chose - retirer les droits de lecture et écriture pour tout le monde en dehors de vous
avec la méthode classique (
chmod
) - avec la commande
setfacl
, donnez les droits de lecture à votre binôme ou votre voisin
setfacl -m u:bob:r toto
- un
ls -l ~/toto
affiche un '+
' à la suite des droits montrant que des ACL ont été ajoutés au fichier - 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 !
- 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.
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 »).
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
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'arborescenceArbo
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::---