Aller au contenu
Administration Linux medium

Affiner les permissions avec les ACL

12 min de lecture

Trois développeurs travaillent sur /srv/projet. Alice doit lire et écrire, Bob seulement lire, et tout le reste de l’équipe n’a aucun accès. Avec les permissions POSIX classiques (propriétaire / groupe / autres), c’est impossible sans créer un groupe dédié par combinaison de droits.

Les ACL (Access Control Lists) résolvent ce problème. Elles permettent d’attribuer des permissions par utilisateur et par groupe, indépendamment du propriétaire et du groupe principal. C’est le mécanisme standard du noyau Linux pour gérer des droits fins sur ext4, XFS et Btrfs — les trois systèmes de fichiers les plus courants en production.

Sans ACL, l’administrateur contourne le problème en multipliant les groupes, en relâchant les droits other, ou en utilisant sudo à outrance — autant de pratiques qui augmentent la surface d’exposition.

  • Distinguer quand les ACL sont nécessaires et quand les permissions classiques suffisent
  • Lire une ACL avec getfacl et la modifier avec setfacl
  • Poser des ACL par défaut pour que les nouveaux fichiers héritent des bons droits
  • Diagnostiquer un problème d’accès lié au mask ou à un héritage manquant

Avant de poser des ACL, il faut savoir si elles sont réellement nécessaires. Les permissions POSIX classiques couvrent la majorité des cas. Les ACL interviennent quand le modèle propriétaire/groupe/autres ne suffit plus.

Imaginez un immeuble. Les permissions classiques, c’est comme avoir une seule clé pour les résidents et une autre pour les visiteurs. Les ACL, c’est un badge nominatif : chaque personne a exactement les accès dont elle a besoin, pièce par pièce.

SituationPermissions classiquesACL
Un propriétaire, un groupe, accès uniformeSuffisantInutile
Deux utilisateurs dans des groupes différents doivent accéder au même fichierCréer un groupe dédiéPlus simple avec ACL
Chaque utilisateur a un niveau d’accès différent sur le même répertoireImpossibleSeule solution
Un prestataire externe doit lire un dossier sans rejoindre un groupeRisqué (élargir other)ACL sur l’utilisateur
Héritage automatique de droits pour les nouveaux fichiersumask limitéDefault ACL

Sur les distributions modernes, les ACL sont activées par défaut sur ext4, XFS et Btrfs. Vérifiez tout de même avant de commencer.

Fenêtre de terminal
tune2fs -l /dev/sda1 | grep "Default mount options"

Sortie attendue :

Default mount options: user_xattr acl

Si acl n’apparaît pas, ajoutez-le dans /etc/fstab :

UUID=xxxxxxxx-xxxx / ext4 defaults,acl 0 1

Puis remontez :

Fenêtre de terminal
mount -o remount /

Vérification : créez un test rapide pour confirmer que les ACL fonctionnent :

Fenêtre de terminal
touch /tmp/test-acl
setfacl -m u:nobody:r /tmp/test-acl
getfacl /tmp/test-acl | grep "user:nobody"

Si la sortie affiche user:nobody:r--, les ACL sont opérationnelles.

Fenêtre de terminal
rm /tmp/test-acl

Avant d’entrer dans la théorie, voyons le geste de base.

Scénario : le fichier /srv/rapport.txt appartient à alice. Vous devez donner l’accès en lecture à bob, sans modifier le groupe du fichier.

  1. Posez l’ACL :

    Fenêtre de terminal
    setfacl -m u:bob:r /srv/rapport.txt
  2. Vérifiez avec getfacl :

    Fenêtre de terminal
    getfacl /srv/rapport.txt

    Sortie :

    srv/rapport.txt
    # owner: alice
    # group: alice
    user::rw-
    user:bob:r--
    group::r--
    mask::r--
    other::---
  3. Confirmez avec ls -l — le + à la fin des permissions indique une ACL active :

    Fenêtre de terminal
    ls -l /srv/rapport.txt
    -rw-r-----+ 1 alice alice 42 avr 5 10:00 /srv/rapport.txt

bob peut maintenant lire le fichier. alice conserve la lecture et l’écriture. Les autres utilisateurs n’ont aucun accès.

Maintenant que vous avez vu le geste, décortiquons ce que getfacl affiche.

Chaque ligne de la sortie de getfacl est une entrée ACL :

EntréeSignification
user::rw-Permissions du propriétaire du fichier
user:bob:r--Permissions spécifiques pour l’utilisateur bob
group::r--Permissions du groupe propriétaire
group:dev:rw-Permissions spécifiques pour le groupe dev
mask::rw-Permissions maximales pour les entrées nommées
other::---Permissions pour tous les autres

Le mask est le concept le plus important (et le plus mal compris) des ACL. Il agit comme un plafond : même si une entrée accorde rwx, les permissions effectives sont limitées par le mask.

Exemple :

user:bob:rw- #effective:r--
mask::r--

Bob a rw- dans son entrée ACL, mais le mask est à r--. Ses permissions effectives sont donc uniquement r--.

Vérification : après chaque setfacl, vérifiez le mask :

Fenêtre de terminal
getfacl fichier | grep mask

Si le mask est trop restrictif, corrigez-le :

Fenêtre de terminal
setfacl -m m::rwx fichier

Sur un répertoire, vous pouvez poser des default ACL. Chaque nouveau fichier ou sous-répertoire créé à l’intérieur hérite automatiquement de ces ACL.

Les entrées par défaut commencent par default: dans la sortie de getfacl :

default:user::rwx
default:user:bob:rw-
default:group::r-x
default:mask::rwx
default:other::r-x

Pour un utilisateur :

Fenêtre de terminal
setfacl -m u:bob:rw /srv/projet/config.yml

Pour un groupe :

Fenêtre de terminal
setfacl -m g:dev:r /srv/projet/config.yml

Vérification :

Fenêtre de terminal
getfacl /srv/projet/config.yml

Pour que tous les fichiers créés dans /srv/projet héritent des droits de bob :

Fenêtre de terminal
setfacl -d -m u:bob:rw /srv/projet

Vérification : créez un fichier et contrôlez ses ACL :

Fenêtre de terminal
touch /srv/projet/test.txt
getfacl /srv/projet/test.txt | grep "user:bob"

Sortie attendue : user:bob:rw-.

Retirer les droits spécifiques de bob :

Fenêtre de terminal
setfacl -x u:bob /srv/projet/config.yml

Pour revenir aux permissions classiques :

Fenêtre de terminal
setfacl -b /srv/projet/config.yml

Vérification : ls -l ne doit plus montrer le + :

Fenêtre de terminal
ls -l /srv/projet/config.yml

Pour poser une ACL sur tout un répertoire et son contenu :

Fenêtre de terminal
setfacl -R -m u:bob:rw /srv/projet

Pour poser des ACL par défaut sur tous les sous-répertoires :

Fenêtre de terminal
setfacl -R -d -m u:bob:rw /srv/projet

Voici un scénario complet d’administration. Trois personnes travaillent sur /srv/webapp :

  • alice (développeuse) : lecture, écriture, exécution
  • bob (intégrateur) : lecture et écriture
  • carol (auditrice externe) : lecture seule
  1. Créez le répertoire et posez les ACL :

    Fenêtre de terminal
    mkdir -p /srv/webapp
    chown alice:dev /srv/webapp
    chmod 750 /srv/webapp
    setfacl -m u:bob:rw /srv/webapp
    setfacl -m u:carol:r /srv/webapp
  2. Posez les ACL par défaut pour l’héritage :

    Fenêtre de terminal
    setfacl -d -m u:alice:rwx /srv/webapp
    setfacl -d -m u:bob:rw /srv/webapp
    setfacl -d -m u:carol:r /srv/webapp
  3. Vérifiez l’état complet :

    Fenêtre de terminal
    getfacl /srv/webapp
    # file: srv/webapp
    # owner: alice
    # group: dev
    user::rwx
    user:bob:rw-
    user:carol:r--
    group::r-x
    mask::rwx
    other::---
    default:user::rwx
    default:user:alice:rwx
    default:user:bob:rw-
    default:user:carol:r--
    default:group::r-x
    default:mask::rwx
    default:other::---
  4. Testez l’héritage — créez un fichier et vérifiez :

    Fenêtre de terminal
    su - alice -c "touch /srv/webapp/app.py"
    getfacl /srv/webapp/app.py

    Les entrées pour bob et carol doivent apparaître automatiquement.

Lors d’une migration ou d’une sauvegarde, les outils standard (cp, tar, rsync) ne préservent pas toujours les ACL. Sauvegardez-les séparément.

Sauvegarder :

Fenêtre de terminal
getfacl -R /srv/webapp > /root/acl-webapp.bak

Restaurer :

Fenêtre de terminal
setfacl --restore=/root/acl-webapp.bak

Les ACL sont un outil puissant, mais mal utilisées, elles élargissent la surface d’exposition au lieu de la réduire.

  • N’accordez que les droits nécessaires : si bob n’a besoin que de lire, ne donnez pas rw.
  • Préférez les permissions par groupe plutôt que par utilisateur quand plusieurs personnes ont le même besoin.
  • Supprimez les ACL d’un prestataire dès la fin de sa mission.

Programmez un contrôle périodique des ACL sur les répertoires sensibles :

Fenêtre de terminal
getfacl -R /srv/webapp | grep "user:" | sort -u

Cela liste tous les utilisateurs ayant des droits spécifiques. Comparez avec la liste des accès autorisés.

Les ACL opèrent au niveau du système de fichiers. Si SELinux ou AppArmor est actif, un accès peut être refusé par le MAC (Mandatory Access Control) même si l’ACL l’autorise. Vérifiez les deux couches en cas de Permission denied inattendu.

SymptômeCause probableSolution
setfacl: Operation not supportedSystème de fichiers sans support ACL (FAT32, ancien ext3 sans option)Vérifier tune2fs -l ou passer à ext4/XFS
Permission denied malgré ACL correcteLe mask plafonne les droitsgetfacl fichier | grep mask puis setfacl -m m::rwx fichier
Permission denied avec mask OKSELinux ou AppArmor bloqueausearch -m AVC -ts recent (SELinux) ou dmesg | grep apparmor
Nouveaux fichiers sans ACL héritéesPas de default ACL sur le répertoire parentsetfacl -d -m u:bob:rw /srv/projet
chmod a cassé les ACLchmod modifie le maskRecréer le mask : setfacl -m m::rwx fichier
Le + disparaît après cpcp sans -p ou --preserve=allUtiliser cp -a ou rsync -A

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Les ACL complètent les permissions POSIX quand le modèle propriétaire/groupe/autres ne suffit plus.
  • getfacl lit les ACL, setfacl les pose — toujours vérifier après chaque modification.
  • Le mask est le plafond des permissions nommées. Un simple chmod peut le modifier et casser vos ACL sans avertissement.
  • Les default ACL sur un répertoire assurent l’héritage automatique pour les nouveaux fichiers.
  • Sauvegardez les ACL séparément (getfacl -R > fichier) avant toute migration ou restauration.
  • Appliquez le moindre privilège : ne donnez que les droits nécessaires, auditez régulièrement les accès.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn