tuto:linux:acl
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
tuto:linux:acl [2009/03/15 11:29] – créée root | tuto:linux:acl [2009/05/23 23:25] (Version actuelle) – root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== ACL ====== | ||
+ | |||
+ | |||
Si l’on veut donner des droits à un utilisateur ou un groupe particulier, | Si l’on veut donner des droits à un utilisateur ou un groupe particulier, | ||
- | setfacl -m ACL fichier | + | |
où 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, | où 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, | ||
- | setfacl -m user: | + | |
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 à | 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). | utiliser chmod avec les droits Unix classiques (à un détail près que l’on verra ci-dessous pour le groupe). | ||
Ligne 8: | Ligne 11: | ||
Les droits complets d’un fichier ou d’un répertoire peuvent être consultés avec la commande getfacl. | 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, | Cette commande affiche en commentaire les informations sur l’objet auquel elle s’applique, | ||
- | affectées à cet objet. Les droits Unix classiques sont lisibles directement avec les entrées | + | affectées à cet objet. Les droits Unix classiques sont lisibles directement avec les entrées |
- | # file: exemple | + | # file: exemple |
- | # owner: batman | + | # owner: batman |
- | # group: users | + | # group: users |
- | | + | user::rw- |
- | | + | user: |
- | | + | group:: |
- | | + | 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è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, | ||
Ligne 23: | Ligne 26: | ||
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 : | 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. | La première commande modifie les droits sur le masque, et la deuxième ajoute les droits pour tous les utilisateurs du groupe. | ||
Ligne 30: | Ligne 33: | ||
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 : | 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:: », | Vous pourrez toutefois constater que getfacl continue d’afficher les entrées génériques « user:: », | ||
Ligne 39: | Ligne 42: | ||
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. | 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. | ||
+ | |||
+ | ====== ls, cp et mv ====== | ||
+ | |||
+ | Ces commandes doivent pouvoir lister, copier et déplacer les ACL en même temps que les fichiers. Pour les deux premières commandes, il faut préciser explicitement que l'on veut afficher/ | ||
+ | |||
+ | Quand les droits étendus ne peuvent être conservés (déplacement ou copie vers un système de fichier qui n'est pas configuré pour les recevoir ou utilisation d'une version de cp trop ancienne), un message d' | ||
+ | |||
+ | setfacl -m u:luce:rw index.php | ||
+ | cp -a index.php /mnt/vfat | ||
+ | cp: preserving permissions for `/ | ||
+ | |||
+ | Noter qu'un fichier comportant une ACL qu'on veut lister par ls -l n' | ||
+ | |||
+ | setfacl -m u: | ||
+ | ls -l / | ||
+ | | ||
+ | |||
+ | Avec -rw-rw----**+**, | ||
+ | |||
+ | ====== Sauvegarde des données ====== | ||
+ | |||
+ | Sauvegarder des données dotées d'ACL nécessite : | ||
+ | |||
+ | * l' | ||
+ | * et l' | ||
+ | |||
+ | À titre indicatif, tar et cpio et rsync ne le sont pas (à moins d' | ||
+ | |||
+ | Pour contourner le problème de sauvegarde, il est possible d' | ||
+ | getfacl --skip-base -R / | ||
+ | récupère les informations récursivement et les inscrit dans un simple fichier. La restauration se fait au moyen de | ||
+ | setfacl --restore=fichier | ||
+ | Il faut, pour qu' | ||
+ | |||
+ | Par exemple : le répertoire /tmp/test contient trois fichiers à ACL. On sauvegarde les ACL avec | ||
+ | getfacl --skip-base -R /tmp/test > acl.acl | ||
+ | Pour restaurer, on se place à la racine (cd /) et on lance | ||
+ | setfacl --restore=acl.acl | ||
+ | Si on avait lancé la commande depuis /test, setfacl aurait renvoyé les erreurs : | ||
+ | |||
+ | setfacl: tmp/test: Aucun fichier ou répertoire de ce type | ||
+ | setfacl: tmp/test/a: Aucun fichier ou répertoire de ce type | ||
+ | setfacl: tmp/test/b: Aucun fichier ou répertoire de ce type | ||
+ | setfacl: tmp/test/c: Aucun fichier ou répertoire de ce type |
tuto/linux/acl.1237116579.txt.gz · Dernière modification : 2009/03/15 11:29 de root