ACL ou la gestion fine des droits sous Linux
Sur le vieux PC Dell que j'ai évoqué lors de mon précédent billet, j'ai créé un répertoire /home/commun pour que ma chère et tendre et moi-même puissions stocker quelques ressources... communes (vidéos, musique, photos etc).
Mais en matière de gestion des droits d'accès Linux, par défaut, est clairement orienté utilisateur. Gérer les droits pour un groupe n'est pas réellement prévu et donc créer un répertoire commun à tout ou partie des utilisateurs d'un même PC ne fonctionne pas "out of the box". Même si le répertoire initial est créé avec les droits qui vont bien (rwxrwx---) toute écriture à l'intérieur héritera des droits définis (par défaut) par l'auteur. C'est modifiable avec umask, mais outre que ceci ne soit pas trivial cela ne permet pas de gérer individuellement les fichiers et répertoires. Quand à gérer au cas par cas avec chmod autant ne pas en parler.
La solution c'est ACL, pour Access Control List. Comme c'est une dépendance de sytemd c'est déjà installé automatiquement sur Archlinux, ce qui ne veut pas dire qu'il n'y a rien à faire.
Options de montage
Tout d'abord il faut que la partition sur laquelle réside le répertoire concerné soit monté avec l'option ACL. À priori c'est automatiquement le cas si elle est formate en extX ou en btrfs,. Pour vous en assurer tapez la commande# tune2fs -l /dev/sdXY | grep "Default mount options:"Si la réponse est
Default mount options: user_xattr aclC'est tout bon, sinon vous pouvez modifier les options de montage par défaut en utilisant tune2fs
# tune2fs -o acl UUID=uuid (ou /dev/sdXY ou LABEL=volume_name)vous pouver aussi modifier la ligne correspondante dans fstab en rajoutant acl à la fin des options. Par exemple :
# /dev/sda4mais c'est moins souple en cas de disque externe.
UUID=cfa7cb12-e2f8-4789-9003-c19489204ed9 /home ext4 rw,relatime,data=ordered,acl 0 2
Gestion des droits
la commande pour modifier les droits d'un fichier ou d'un répertoire est setfacl# setfacl option(s) <règle> <fichier/répertoire>Lisez la page de man qui va bien pour toutes les combinaisons possibles, nous ne nous arrêterons ici que sur les cas les plus courants.
les options qui nous intéressent ici sont -m (modifie) -R (récursif) et -d (par défaut)
les règles sont construites sous la forme qui:permissions
qui est soit un utilisateur soit un groupe : u:USERNAME ou g:GROUPNAME
permission est une combinaison des caractères r,w et x (read, write et execute).
Pour notre cas concret
# setfacl -dmR g:users:rwx /home/commun
Documentation
wiki archlinux (en anglais)doc ubuntu-fr (en français)
redhat (en anglais)