Les ACL sous Linux

Dans le cadre de ce tutoriel, nous allons voir comment utiliser les ACL sous Linux pour gérer les permissions de façon plus fines, de façon similaire à ce qui se fait sous Windows.

Activation des ACL

La première étape consiste à activer le support ACL si ce n’est déjà fait sur votre machine. Dans le fichier /etc/fstab, ajoutez l’option de montage acl:

/dev/mapper/ubuntu--vg-root on / type ext4 (rw,errors=remount-ro,acl)

Pour que les utilisateurs « standards » puissent également définir des ACL, il est nécessaire d’ajouter une seconde option user_xattr:

/dev/mapper/ubuntu--vg-root on / type ext4 (rw,errors=remount-ro,acl,user_xattr)

En cas de doute, utilisez la commande tune2fs -l /dev/sda1 (ou /dev/mapper/… pour une partition LVM):

tune2fs -l /dev/mapper/ubuntu--vg-root | grep acl

Pour activer les ACL directement, sans redémarrage, utilisez mount -o remount sur la partition modifiée:

mount -o remount,acl,user_xattr /dev/mapper/ubuntu--vg-root

Nous sommes à présent prêt à utiliser les ACL

Utilisation des ACL

Commençons par un petit test:

# Création d'un répertoire de test
cd /tmp & mkdir test
# Affichage des permissions ACL
getfacl test

Résultat attendu:

# file: test
# owner: simon
# group: simon
user::rwx
group::---
other::---

On voit ici que le propriétaire et le groupe est simon et que le groupe & les autres utilisateurs n’y ont pas accès. Imaginons que nous souhaitons qu’un utilisateur usr1 y ait également accès en lecture+exécution.

Nous pouvons bien sûr jouer sur les groupes (méthode « classique » pour résoudre le problème):

root@ubuntu:/tmp# groupadd usrgrp1
root@ubuntu:/tmp# chgrp usrgrp1 test
root@ubuntu:/tmp# usermod -G usrgrp1 usr1
root@ubuntu:/tmp# usermod -G usrgrp1 simon
root@ubuntu:/tmp# chmod g=rx test

Cette méthode oblige à changer le groupe à usrgrp1 et à jouer sur l’umask ou à faire à chaque fois un chmod sur les nouveaux éléments pour que le groupe soit autorisé à y accéder.

Passer par les ACL va nous simplifier énormément la tâche:

setfacl -dm u:usr1:rx test

setfacl est la commande à utiliser pour définir ou retirer des ACL sur un fichier ou un dossier.
getfacl est la commande à utiliser pour afficher les ACL appliqués sur un fichier ou un dossier.

L’option -m de facl permet de définir les ACL. On utilisera -x pour retirer l’ACL passé en paramètre et -b pour retirer toutes les ACL appliqués à l’élément.
L’option -d permet de définir l’ACL par défaut, tous les éléments enfants créés par al suite en hériteront. On utilisera -k pour retirer l’ACL par défaut.

Résultat:

root@ubuntu:/tmp# getfacl test
# file: test
# owner: simon
# group: simon
user::rwx
user:usr1:r-x
group::---
mask::r-x
other::---

L’utilisateur usr1 dispose à présent des permissions en lecture+exécution sur notre répertoire test ainsi que sur les éléments qui seront créés dans celui-ci (grâce à -d).
On peut voir la valeur par défaut à la ligne mask, ici r-x. Sans valeur par défaut, c’est l’umask par défaut qui s’appliquera avec les permissions POSIX (utilisateur,groupe,autres).

Syntaxe de facl

Vous avez vu ci-dessus que nous avons utilisé u:usr1:rx comme ACL. Petite explication:

On décompose une ACL en quatre parties séparées par des ‘:’:

  • La première facultative, indique qu’il s’agit d’une valeur par défaut: d
  • La seconde indique s’il s’agit d’un utilisateur (u), d’un groupe (g), du masque (m) ou des autres (o) qui est concerné.
  • La troisième, également facultative, indique l’UID ou le GID concerné.
  • La quatrième indique les permissions à appliquer.

Voici quelques exemples:

  • L’utilisateur usr1 a les droits en lecture+exécution: u:usr1:rx
  • Le groupe usrgrp1 a les droits en écriture uniquement: g:usrgrp1:w
  • Le groupe usrgrp1 a les droits en écriture sur le dossier et les éléments qui seront créés par la suite: d:g:usrgrp1:w
  • Les autres utilisateurs ne pourront rien faire sur l’élément: o::-
  • Les autres utilisateurs ne pourront rien faire sur le dossier et les éléments qui seront créés par la suite: d:o::-

Vous avez compris l’idée

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s