Access control lists (ACLs) Linux

Les droits standards et les droits étendus sont des fonctionnalités intéressantes mais qui ne s’applique que pour un seul utilisateur ou un seul groupe. Comment définir des permissions spécifiques, voire différents, pour d’autres utilisateurs ou groupes que les propriétaires ? Les ACLs offrent une réponse à cette question.

Note : “Les ACL ne sont nativement pas activées sur Ubuntu mais le noyau les prend en charge. Le paquet apt://acl doit normalement être déjà installé.” https://doc.ubuntu-fr.org/acl.

Les ACLs Linux sont supportées nativement sur les distributions basées Red Hat.

1. Complément aux droits standards et étendus

Les Access control lists (ACLs) permettent de définir des permissions différentes pour un ou plusieurs utilisateurs / groupes sur un fichier / répertoire.

A une époque, il fallait adapter le noyau et le FS au support des ACLs. Techniquement, ces informations étendues sur les fichiers sont enregistrées en tant que méta-donnés su FS.

2. Support du système de fichiers

Avant de démarrer avec les ACLs, il faut que le système de fichiers soit monté pour les supporter car ses métadonnées devront être étendues.

3. Visualiser les permissions ACLs

Créer un dossier /opt/partage et visualiser les permissions :

mkdir /opt/partage
ls -ld /opt/partage
drwxr-xr-x. 2 root root 6 23 fév 20:16 /opt/partage

Visualiser les permissions ACLs du dossier :

getfacl /opt/partage
getfacl : suppression du premier « / » des noms de chemins absolus
# file: opt/partage
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

4. Ajouter un ACLs à un répertoire

setfacl -m g:omega:rx /opt/partage
setfacl -m u:alfa:rwx /opt/partage
getfacl /opt/partage
getfacl : suppression du premier « / » des noms de chemins absolus
# file: opt/partage
# owner: root
# group: root
user::rwx
user:alfa:rwx
group::r-x
group:omega:r-x
mask::rwx
other::r-x

5. ACLs par défaut

Les ACLs par défaut permettent de donner des permissions ACL en héritage pour tout sous-répertoire ou fichier créé dans un répertoire. Toutefois, ces ACLs par défaut ne s’appliquent pas aux objets déjà présents dans le répertoire.

Dans la configuration d’un partage avec des accès multiples, il sera donc nécessaire de procéder en deux étapes :

  1. Modifier l’ACL des fichiers existants
  2. Appliquer un ACL par défaut
setfacl -R -m u:alfa:rx /opt/partage
setfacl -m d:u:alfa:rx /opt/partage
getfacl /opt/partage
getfacl : suppression du premier « / » des noms de chemins absolus
# file: opt/partage
# owner: root
# group: root
user::rwx
user:alfa:r-x
group::r-x
group:omega:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:alfa:r-x
default:group::r-x
default:mask::r-x
default:other::r-x

Enfin, il peut être intéressant d’utiliser les ACLs par défaut pour définir les droits des autres (other) sur les fichiers nouvellement créés.

Par exemple pour empêcher tous les autres en termes de permissions pour tout nouveau fichier ou sous-répertoire créé :

setfacl -m d:o::- /opt/partage
getfacl /opt/partage
getfacl : suppression du premier « / » des noms de chemins absolus
# file: opt/partage
# owner: root
# group: root
user::rwx
user:alpha:r-x
group::r-x
group:omega:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:alpha:r-x
default:group::r-x
default:mask::r-x
default:other::---

6. Compatibilité

Tous les utilitaires (sauvegarde, copie, déplacement de fichiers) ne sont pas nécessairement compatibles avec les ACLs. Il sera donc indiqué de sauvegarder les ACLs définies pour un dossier afin de les repousser sur une copie des fichiers.

Par exemple, on copie le répertoire /opt/partagedans opt/p2 avec récursion (option -R) :

cp -R /opt/partage /opt/p2
getfacl /opt/p2
getfacl : suppression du premier « / » des noms de chemins absolus
# file: opt/p2
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

Sauvegarde de l’ACL originale :

getfacl -R /opt/partage > acls
getfacl : suppression du premier « / » des noms de chemins absolus

Adaptation des nouveaux droits :

sed -i -e "s/opt\/partage/\/opt\/p2/g" acls
getfacl /opt/p2
getfacl : suppression du premier « / » des noms de chemins absolus
# file: opt/p2
# owner: root
# group: root
user::rwx
user:alpha:r-x
group::r-x
group:omega:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:alpha:r-x
default:group::r-x
default:mask::r-x
default:other::---

Restauration de l’ACL :

setfacl --restore=acls

7. star

Notons que l’outil star se comporte et se manipule comme tar mais avec le support des ACLs (option -acl).