XATTR(7) Manuel du programmeur Linux XATTR(7)

xattr – Attributs étendus

Les attributs étendus sont des paires nom:valeur associées de façon permanente à des fichiers ou des répertoires, de manière similaire aux chaînes d’environnement associées à un processus. Un attribut peut être défini ou non. S’il l’est, sa valeur peut être absente ou non.

Les attributs étendus sont des extensions aux attributs normaux qui sont associés à tous les inœuds (inode) du système (c’est-à-dire les données stat(2)). Il sont souvent utilisés pour fournir des fonctionnalités supplémentaires à un système de fichiers, par exemple, des fonctions de sécurité telles que les listes de contrôle d’accès (ACL) peuvent être mises en œuvre en utilisant les attributs étendus.

Les utilisateurs ayant le droit de recherche pour un fichier ou un répertoire peuvent utiliser listxattr(2) pour récupérer une liste des noms des attributs définis pour ce fichier ou ce répertoire.

Les attributs étendus sont obtenus sous forme d’objets atomiques. Leur lecture (getxattr(2)) récupère en entier la valeur d’un attribut et la stocke dans un tampon. Leur écriture (setxattr(2)) remplace toute valeur précédente par sa nouvelle valeur.

L’espace utilisé pour les attributs étendus peut être décompté des quotas de disque du propriétaire du fichier ou du groupe de fichiers.

Les noms d’attribut sont des chaînes terminées par NULL. Le nom d’attribut est toujours indiqué sous la forme complète espace_de_noms.attribut, par exemple, user.mime_type, trusted.md5sum, system.posix_acl_access ou security.selinux.

Le mécanisme d’espace de noms est utilisé pour définir des classes différentes d’attributs étendus. Ces classes existent pour plusieurs raisons. Par exemple, les permissions et les capacités nécessaires pour manipuler les attributs étendus peuvent différer d’un espace de noms à un autre.

Actuellement les classes d’attributs étendus security, system, trusted et user sont définies comme décrites ci-après. De nouvelles classes pourront être ajoutées dans le futur.

L’espace de noms des attributs de sécurité est utilisé par les modules de sécurité du noyau, tels que Security Enhanced Linux et mettent en œuvre des capacités de fichier (consultez capabilities(7)). Les permissions de lecture et écriture des attributs de sécurité dépendent de la politique mise en œuvre pour chaque attribut de sécurité par le module de sécurité. Quand aucun module de sécurité n’est chargé, tous les processus ont l’accès en lecture des attributs étendus de sécurité et l’accès en écriture est limité aux processus qui ont la capacité CAP_SYS_ADMIN.

Les attributs étendus du système sont utilisés par le noyau pour stocker des objets du système tels que les ACL (Access Control List). L’accès en lecture et écriture dépend de la politique mise en œuvre pour chaque attribut du système implémenté par les systèmes de fichiers dans le noyau.

Les attributs étendus fiables (trusted) sont visibles et accessibles uniquement aux processus qui ont la capacité CAP_SYS_ADMIN. Les attributs de cette classe sont utilisés pour implémenter des mécanismes en espace utilisateur (c’est-à-dire en dehors du noyau) qui conserve l’information dans des attributs étendus auxquels les processus ordinaires ne devraient pas avoir accès.

Les attributs étendus d’utilisateur peuvent être assignés à des fichiers et des répertoires pour stocker des informations arbitraires supplémentaires telles que le type MIME, le jeu de caractères ou l’encodage du fichier. Les permissions d’accès pour les attributs d’utilisateur sont définis par les bits de permissions de fichier : la permission de lecture est nécessaire pour récupérer la valeur d’attribut et la permission d’écriture est nécessaire pour la modifier.

Les bits de permission des fichiers normaux et des répertoires sont interprétés différemment des bits de permission de fichiers spéciaux et de liens symboliques. Pour les fichiers normaux et les répertoires, les bits de permission définissent l’accès aux contenus de fichier tandis que pour les fichiers spéciaux ils définissent l’accès au périphérique décrit par le fichier spécial. Les permissions de fichier des liens symboliques ne sont pas utilisées dans les vérifications d’accès. Ces différences pourraient permettre d’utiliser des ressources de système de fichiers d’une façon non contrôlable par les quotas de disque pour le groupe ou pour les fichiers spéciaux ou les répertoires accessibles à tous.

Pour cette raison, les attributs étendus d’utilisateur sont autorisés pour les fichiers normaux et les répertoires, et l’accès aux attributs étendus d’utilisateur est restreint au propriétaire et aux utilisateurs avec les capacités appropriées pour les répertoires avec le bit sticky défini (consultez la page de manuel de chmod(1) pour une explication sur le bit sticky).

Le noyau et le système de fichiers peuvent poser des limites sur le nombre maximal et la taille des attributs étendus pouvant être associés à un fichier. Le système de fichiers virtuel (VFS) impose comme limitations pour un nom d’attribut 255 octets et 64 ko pour sa valeur. La liste des noms d’attribut qui peut être renvoyée est aussi limitée à 64 ko (consultez la section BOGUES dans listxattr(2)).

Certains systèmes de fichiers, tel Reiserfs (et, historiquement, ext2 et ext3), exigent que le système de fichiers soit monté avec l’option de montage user_xattr pour pouvoir utiliser les attributs étendus d’utilisateur.

Dans les implémentations actuelles de systèmes de fichiers ext2, ext3 et ext4, le total des octets utilisés par les noms et valeurs de tous les attributs étendus de fichier doivent loger dans un seul bloc du système de fichiers (1024, 2048 ou 4096 octets, en fonction de la taille de bloc spécifiée lors de la création du système de fichiers).

Dans les implémentations de système de fichiers Btrfs, XFS et Reiserfs, il n’existe pas dans la pratique de limite sur le nombre d’attributs étendus associés à un fichier et les algorithmes utilisés pour stocker les informations d’attributs étendus sur le disque sont redimensionnables.

Dans les implémentations de système de fichiers JFS, XFS et Reiserfs, la limite pour les octets utilisés dans une valeur d’attribut étendu est le plafond imposé par le système de fichiers virtuel (VFS).

Dans l’implémentation du système de fichiers Btrfs, le total des octets utilisés pour le nom, la valeur et les octets d’en-tête de l’implémentation est limité à la valeur nodesize du système de fichiers (16 ko par défaut).

Les attributs étendus ne sont pas mentionnés dans POSIX.1, mais certains autres systèmes (par exemple, les BSD et Solaris) fournissent une fonctionnalité semblable.

Puisque les systèmes de fichiers pour lesquels les attributs étendus sont stockés peuvent être aussi utilisés sur des architectures avec un ordre pour les octets différents et une taille de mot de la machine différente, une attention devrait être portée à stocker les valeurs d’attribut dans un format indépendant de l’architecture.

Cette page était précédemment appelée attr(5).

attr(1), getfattr(1), setfattr(1), getxattr(2), ioctl_iflags(2), listxattr(2), removexattr(2), setxattr(2), acl(5), capabilities(7), selinux(8)

Cette page fait partie de la publication 5.11 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

La traduction française de cette page de manuel a été créée par Christophe Blaess https://www.blaess.fr/christophe/, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.

9 juin 2020 Linux