Vous devez donner accès à un dossier à une personne, mais vous ne voulez ni changer son groupe principal, ni ouvrir les droits avec un chmod 777. C’est exactement le cas où une ACL devient utile. Avec setfacl, vous ajoutez une règle pour un utilisateur ou un groupe précis, tout en conservant le propriétaire et les permissions classiques du fichier.
Je vous conseille tout de même de lire l’ACL avant de la modifier. Une règle correcte peut sembler inopérante si un dossier parent bloque le passage ou si le masque ACL limite les droits effectifs.

Vérifier les droits avant d’ajouter une ACL
Les commandes setfacl et getfacl sont fournies par le paquet acl. Vérifiez d’abord leur présence :
command -v setfacl
command -v getfacl
Sur Debian ou Ubuntu, installez-les avec :
sudo apt update
sudo apt install acl
Sur Fedora, Rocky Linux ou AlmaLinux :
sudo dnf install acl
Sur Arch Linux :
sudo pacman -S acl
Je pars ici d’un dossier /srv/rapports auquel l’utilisateur alice doit accéder. Commencez par relever le propriétaire, le groupe et les permissions classiques :
ls -ld /srv/rapports
namei -l /srv/rapports
getfacl -p /srv/rapports
namei -l affiche chaque composant du chemin. C’est important, car le droit x doit autoriser la traversée de tous les dossiers parents. getfacl -p affiche ensuite l’ACL complète sans retirer le slash initial du chemin.
Donner un accès précis avec setfacl
Pour accorder à alice la lecture et la traversée du dossier, testez d’abord la modification sans l’appliquer :
sudo setfacl --test -m u:alice:rx /srv/rapports
Si le résultat correspond à ce que vous attendez, appliquez la règle :
sudo setfacl -m u:alice:rx /srv/rapports
getfacl -p /srv/rapports
Dans u:alice:rx, u cible un utilisateur nommé, alice est le compte concerné et rx autorise la lecture du contenu du dossier ainsi que sa traversée. Pour un groupe, utilisez la même logique :
sudo setfacl -m g:audit:rx /srv/rapports
Cette ACL ne donne pas automatiquement accès aux fichiers déjà présents. Pour un fichier précis, accordez le droit nécessaire sur ce fichier :
sudo setfacl -m u:alice:r-- /srv/rapports/bilan.pdf
getfacl -p /srv/rapports/bilan.pdf
Si vous devez traiter toute une arborescence, sauvegardez-la d’abord, puis utilisez rX. Le X majuscule ajoute l’exécution uniquement aux dossiers et aux fichiers déjà exécutables :
sudo getfacl -R -p /srv/rapports > acl-rapports-backup.txt
sudo setfacl -R -m u:alice:rX /srv/rapports
Ne lancez pas une modification récursive sur /srv ou /var/www par facilité. Ciblez le dossier réellement concerné. Le même principe s’applique à chmod récursif sous Linux, qui peut casser rapidement les droits d’une application.
Comprendre le masque et les droits effectifs
Dès qu’une ACL contient un utilisateur ou un groupe nommé, elle possède aussi une entrée mask. Ce masque plafonne les droits du groupe propriétaire, des utilisateurs nommés et des groupes nommés.
getfacl -p /srv/rapports
Vous pouvez par exemple voir :
user:alice:rwx
mask::r-x
# effective:r-x
Dans ce cas, alice affiche rwx, mais le masque retire l’écriture. Ses droits effectifs sont donc r-x. Par défaut, setfacl recalcule le masque à partir des entrées concernées. Évitez l’option -n tant que vous n’avez pas une raison précise d’empêcher ce recalcul.
Un ls -l affiche généralement un signe + après les permissions lorsqu’une ACL étendue est présente. Attention aussi aux modifications ultérieures avec chmod : les bits du groupe correspondent au masque ACL et peuvent donc changer les droits effectifs. Relisez toujours l’ACL après avoir mélangé les deux outils.
Faire hériter les droits aux nouveaux fichiers
Une ACL d’accès règle le dossier actuel. Pour que les nouveaux fichiers et sous-dossiers héritent d’une règle, ajoutez une ACL par défaut sur le répertoire :
sudo setfacl -m d:u:alice:rwX /srv/rapports
getfacl -p /srv/rapports
Les lignes préfixées par default: s’appliqueront aux objets créés ensuite. Elles ne corrigent pas rétroactivement les fichiers existants. Vérifiez aussi l’umask du service qui crée les fichiers, puis créez un fichier de test avec le même compte ou le même service.
Sur un espace de travail partagé, demandez-vous d’abord si un groupe Linux classique serait plus simple à maintenir. Le guide sur la gestion des groupes sous Linux couvre ce cas. Une ACL est surtout intéressante pour ajouter une exception ciblée sans multiplier les groupes ou modifier les droits de tous les autres utilisateurs.
Tester l’accès et savoir revenir en arrière
Ne vous contentez pas de la sortie de getfacl. Testez avec le compte concerné :
sudo -u alice test -x /srv/rapports && echo acces-dossier-ok
sudo -u alice test -r /srv/rapports/bilan.pdf && echo lecture-fichier-ok
Pour retirer seulement l’entrée de alice :
sudo setfacl -x u:alice /srv/rapports
sudo setfacl -x u:alice /srv/rapports/bilan.pdf
Pour supprimer toutes les ACL étendues du dossier tout en gardant les entrées classiques propriétaire, groupe et autres :
sudo setfacl -b /srv/rapports
Pour retirer uniquement l’ACL par défaut :
sudo setfacl -k /srv/rapports
Enfin, le fichier créé avec getfacl -R permet une restauration complète de l’arborescence :
sudo setfacl --restore=acl-rapports-backup.txt
Conservez cette sauvegarde avec prudence : elle peut contenir les chemins, propriétaires, groupes et indicateurs spéciaux de l’arborescence. Sur NFS, CIFS ou un système de fichiers particulier, les ACL disponibles peuvent dépendre du serveur et des options de montage. Si setfacl renvoie Operation not supported, identifiez d’abord le système de fichiers avec findmnt -T /srv/rapports au lieu de contourner le problème avec des droits trop larges.
Les pages de manuel de setfacl, getfacl et acl détaillent les entrées, le masque et l’héritage. Pour un dossier où plusieurs utilisateurs écrivent mais ne doivent pas effacer les fichiers des autres, regardez aussi le fonctionnement du sticky bit sous Linux : il répond à un autre problème que les ACL.