Outils pour utilisateurs

Outils du site


tuto:linux:acl

Ceci est une ancienne révision du document !


Si l’on veut donner des droits à un utilisateur ou un groupe particulier, on pourra définir une ACL (« Access Control List ») sur le fichier ou le répertoire, et affecter les droits unitairement. Ceci se fait simplement avec la commande setfacl, de la manière suivante :

setfacl -m ACL fichier

ACL est l’ACL à affecter au fichier ou au répertoire fichier. Les ACLs sont constitués d’une liste d’entrées nommées des ACE (« Access Control Entries »). Les ACEs sont séparées par des virgules et définissent chacune un droit. Chacun de ces droits doit être spécifié de manière complète, en précisant la classe d’utilisateur sur lequel il porte avec un mot-clé (user pour l’utilisateur propriétaire, group pour les utilisateurs du groupe propriétaire, ou other pour les autres utilisateurs), le nom de l’utilisateur ou du groupe si nécessaire, et les droits affectés à cet utilisateur ou à ce groupe. Tous ces paramètres doivent être séparés par deux points (caractère ’:’). Par exemple, pour ajouter les droits d’écriture à l’utilisateur alfred sur le fichier exemple, vous pourrez utiliser la commande suivante :

setfacl -m user:alfred:w exemple

Si l’on ne spécifie aucun utilisateur avec la classe d’utilisateurs user dans une entrée, cette entrée se réfère automatiquement à l’utilisateur propriétaire du fichier ou du répertoire. De même, si l’on ne spécifie aucun groupe avec la classe d’utilisateurs group, l’entrée se réfère au groupe auquel le fichier appartient. Fixer ces entrées d’ACL sur un fichier avec ces deux syntaxes revient donc exactement à utiliser chmod avec les droits Unix classiques (à un détail près que l’on verra ci-dessous pour le groupe).

Les droits complets d’un fichier ou d’un répertoire peuvent être consultés avec la commande getfacl. Cette commande affiche en commentaire les informations sur l’objet auquel elle s’applique, à savoir son nom, son propriétaire et son groupe, à la suite d’un dièze (caractère ’#’). Suivent toutes les ACEs affectées à cet objet. Les droits Unix classiques sont lisibles directement avec les entrées user::, group:: et other:: respectivement pour l’utilisateur, les utilisateurs du groupe et les autres utilisateurs. Par exemple, si l’on affiche les ACLs associées au fichier exemple après la commande précédente, on obtient ceci :

# file: exemple
# owner: batman
# group: users
user::rw-
user:alfred:-w-
group::r--
mask::rw-
other::r--

Dès qu’une ACL nominative a été attribuée à un fichier, une ACL spéciale est créée automatiquement. Il s’agit de l’ACL mask, qui, comme son nom l’indique, définit un masque de droits complémentaires pour tous les utilisateurs et les groupes ajoutés nominativement à l’ACL. Pour ces utilisateurs, les droits effectivement accordés sont leurs droits respectifs, restreints aux droits présent dans le masque. Le masque permet donc de restreindre les droits de tous les utilisateurs de la classe group, au sens large.

Par exemple, si le masque contient les droits de lecture et d’écriture, et que l’utilisateur alfred dispose des droits de lecture et d’exécution sur le fichier, ses droits effectifs seront uniquement la lecture. Les droits effectifs sont indiqués en commentaire par getfacl pour les utilisateurs et les groupes s’ils ne sont pas égaux aux droits indiqués dans leurs entrées respectives.

Dès qu’il est défini, le masque remplace l’entrée du groupe du fichier pour les commandes classiques. Ainsi, dès qu’un masque est défini dans l’ACL d’un fichier, les changements de droits sur le groupe effectués avec la commande chmod ne modifient plus que le champ de masque. Cela peut surprendre dans certains situation. Par exemple, si l’entrée de l’ACL décrivant les droits du groupe du fichier ne donne aucun droit, les utilisateurs de ce groupe n’auront toujours aucun droit même après un chmod g+rwx sur le fichier. En effet, cette dernière commande ne modifie que le masque. Il est donc nécessaire d’ajouter les droits sur le groupe du fichier explicitement avec setfacl, de la manière suivante :

chmod g+rwx exemple
setfacl -m group::rwx exemple

La première commande modifie les droits sur le masque, et la deuxième ajoute les droits pour tous les utilisateurs du groupe.

Notez bien que le masque ne s’applique pas pour la détermination des droits du propriétaire et des utilisateurs de la classe other. Par ailleurs, lorsque l’on affiche les droits étendus d’un fichier avec l’option -l de la commande ls, les droits affichés pour le groupe du fichier sont les droits définis dans le masque lui-même (même si aucune entrée d’ACL ne donne complètement ces droits à un utilisateur ou à un groupe). Cela permet donc de voir directement les droits les plus forts qui pourraient être attribués sur ce fichier, ce qui est cohérent avec ce qu’attendent les outils Unix classiques.

Il est possible de supprimer toutes les entrées de l’ACL d’un fichier avec l’option -b de setfacl. Pour supprimer une entrée spécifique de l’ACL, vous devrez utiliser l’option -x. Cette dernière option ne permet pas de supprimer les entrées génériques pour le propriétaire et le groupe du fichier, ni celles des autres utilisateurs. Par exemple, pour retirer toutes les entrées définies précédemment sur le fichier exemple, on utilisera la commande suivante :

setfacl -b exemple

Vous pourrez toutefois constater que getfacl continue d’afficher les entrées génériques « user:: », « group:: » et « other:: ». Les répertoires disposent, en plus de leur ACL normale, d’une ACL par défaut. L’ACL par défaut d’un répertoire est celle qui est appliquée à tout nouveau fichier ou répertoire créés dans ce répertoire. De plus, les sous-répertoires héritent de l’ACL par défaut de leur parent. Les ACLs par défaut sont modifiables avec l’option -d de setfacl et sont affichées avec le préfixe default: par getfacl.

Note : Notez bien que de nombreux outils Unix classiques ne gèrent pas correctement la notion d’ACL (en particulier les gestionnaires de fichiers graphiques). La copie ou la modification d’un fichier peut donc provoquer la perte de son ACL, modifiant ainsi les droits des utilisateurs sur ce fichier. Les ACLs doivent donc être utilisées avec parcimonie et leur manipulation entourée du plus grand soin.

tuto/linux/acl.1237116607.txt.gz · Dernière modification : 2009/05/23 21:56 (modification externe)