En plus des autorisations habituelles de lecture, d’écriture et d’exécution, les fichiers Linux possèdent un autre ensemble d’attributs qui contrôlent d’autres caractéristiques du fichier. Voici comment les voir et les modifier.

Permissions et attributs

Sous Linux, les personnes qui peuvent accéder à un fichier et ce qu’elles peuvent en faire sont contrôlés par un ensemble de permissions centrées sur l’utilisateur. Cet ensemble de permissions détermine si vous pouvez lire le contenu d’un fichier, écrire de nouvelles données dans le fichier ou exécuter un fichier s’il s’agit d’un script ou d’un programme. Les permissions sont appliquées au fichier, mais elles définissent les restrictions et les capacités pour différentes catégories d’utilisateurs.

Il existe des permissions pour le propriétaire du fichier, pour le groupe du fichier et pour les autres, c’est-à-dire les utilisateurs qui ne font pas partie des deux premières catégories. Vous pouvez utiliser la commande ls avec l’option -l (long listing) pour connaître les autorisations d’un fichier ou d’un répertoire.

Pour modifier les autorisations, vous utilisez la commande chmod. Du moins, vous pouvez le faire si vous avez les droits d’écriture sur le fichier ou si vous êtes l’utilisateur root.

Nous pouvons voir que les permissions de fichiers sont centrées sur l’utilisateur car elles attribuent ou suppriment des permissions au niveau de l’utilisateur. En revanche, les attributs d’un fichier sont centrés sur le système de fichiers. Comme les permissions, ils sont définis sur le fichier ou le répertoire. Mais une fois qu’ils sont définis, ils sont les mêmes pour tous les utilisateurs.

Les attributs constituent une collection de paramètres distincte des autorisations. Les attributs contrôlent des caractéristiques telles que l’immuabilité et d’autres comportements au niveau du système de fichiers. Pour voir les attributs d’un fichier ou d’un répertoire, on utilise la commande lsattr. Pour définir les attributs, on utilise la commande chattr.

Les permissions et les attributs sont stockés dans des inodes. Un inode est une structure de système de fichiers qui contient des informations sur les objets du système de fichiers tels que les fichiers et les répertoires. L’emplacement d’un fichier sur le disque dur, sa date de création, ses autorisations et ses attributs sont tous stockés dans son inode.

Comme les différents systèmes de fichiers ont des structures et des capacités sous-jacentes différentes, les attributs peuvent se comporter différemment, voire être complètement ignorés par certains systèmes de fichiers. Dans cet article, nous utilisons ext4 qui est le système de fichiers par défaut de nombreuses distributions Linux.

5 SYSTÈMES D’EXPLOITATION LINUX POUR SMARTPHONES À INSTALLER SUR VOTRE APPAREIL

Examen des attributs d’un fichier

Les commandes chattr et lsattr sont déjà présentes sur votre ordinateur, il n’est donc pas nécessaire d’installer quoi que ce soit.

Pour vérifier les attributs des fichiers dans le répertoire actuel, utilisez lsattr :

lsattr

Liste des attributs de tous les fichiers d’un répertoire

Les lignes en pointillés sont des espaces réservés pour les attributs qui ne sont pas définis. Le seul attribut qui est défini est l’attribut e (extents). Cela montre que les inodes du système de fichiers utilisent – ou utiliseront si nécessaire – les extents pour pointer vers toutes les parties du fichier sur le disque dur.

Si le fichier est conservé dans une séquence contiguë de blocs de disque dur, son inode ne doit enregistrer que les premier et dernier blocs utilisés pour stocker le fichier. Si le fichier est fragmenté, l’inode doit enregistrer le numéro du premier et du dernier bloc de chaque partie du fichier. Ces paires de numéros de blocs de disque dur sont appelées « extents ».

Voici la liste des attributs les plus couramment utilisés.

a : Ajout seulement. Un fichier doté de cet attribut ne peut être qu'annexé. Il est toujours possible d'y écrire, mais uniquement à la fin du fichier. Il n'est pas possible d'écraser les données existantes dans le fichier.
c : Compressé. Le fichier est automatiquement compressé sur le disque dur et décompressé lorsqu'il est lu. Les données écrites dans les fichiers sont compressées avant d'être écrites sur le disque dur.
A : Pas de mise à jour atime. L'atime est une valeur dans un inode qui enregistre la dernière fois qu'un fichier a été consulté.
C : Pas de copie sur écriture. Si deux processus demandent l'accès à un fichier, ils peuvent recevoir des pointeurs vers le même fichier. Ils ne reçoivent leur propre copie unique du fichier que s'ils essaient d'écrire dans le fichier, ce qui le rend unique à ce processus.
d : Pas de vidage. La commande dump de Linux est utilisée pour écrire des copies de systèmes de fichiers entiers sur des supports de sauvegarde. Cet attribut fait que dump ignore le fichier. Il est exclu de la sauvegarde.
D : Mises à jour synchronisées des répertoires. Lorsque cet attribut est activé pour un répertoire, toutes les modifications apportées à ce répertoire sont écrites de manière synchrone, c'est-à-dire immédiatement, sur le disque dur. Les opérations de données peuvent être mises en mémoire tampon.
e : Extent format. L'attribut e indique que le système de fichiers utilise des extents pour mapper l'emplacement du fichier sur le disque dur. Vous ne pouvez pas le modifier avec chattr. Il s'agit d'une fonction du fonctionnement du système de fichiers.
i : Immuable. Un fichier immuable ne peut pas être modifié, y compris renommé ou supprimé. L'utilisateur root est la seule personne qui peut définir ou non cet attribut.
s : Suppression sécurisée. Lorsqu'un fichier dont cet attribut est défini est supprimé, les blocs du disque dur qui contenaient les données du fichier sont remplacés par des octets contenant des zéros. Notez que ceci n'est pas honoré par le système de fichiers ext4.
S : Mises à jour synchrones. Les modifications apportées à un fichier dont l'attribut S est défini sont écrites dans le fichier de manière synchrone.
u : La suppression d'un fichier dont l'attribut u est défini entraîne la création d'une copie du fichier. Cela peut être utile pour la récupération du fichier si celui-ci a été supprimé par erreur.

Modification des attributs d’un fichier

La commande chattr nous permet de modifier les attributs d’un fichier ou d’un répertoire. Nous pouvons utiliser les opérateurs + (set) et – (unset) pour appliquer ou supprimer un attribut, de manière similaire à la commande chmod et aux permissions.

La commande chattr possède également un opérateur = (set only). Cela définit les attributs d’un fichier ou d’un répertoire uniquement avec les attributs spécifiés dans la commande. En d’autres termes, tous les attributs non répertoriés dans la ligne de commande sont désactivés.

Définition de l’attribut Append Only

Définissons l’attribut append-only sur un fichier texte et voyons comment cela affecte ce que nous pouvons faire avec ce fichier.

sudo chattr +a fichier-texte.txt

Définition de l’attribut append-only sur un fichier texte

Nous pouvons vérifier que l’attribut append-only a été activé en utilisant lsattr :

lsattr fichier-texte.txt

Liste des attributs d’un fichier texte

La lettre « a » indique que l’attribut a été activé. Essayons d’écraser le fichier. La redirection de la sortie vers un fichier avec un crochet simple « > » remplace tout le contenu du fichier par la sortie redirigée.

Nous avons préchargé le fichier texte avec un texte de remplacement lorem ipsum.

cat-fichier-texte.txt

Texte de remplacement dans un fichier texte

Nous allons rediriger la sortie de ls dans le fichier :

ls -l > fichier-texte.txt

sudo ls -l > fichier-texte.txt

Essayer d’écraser un fichier texte de type append-only

Cette opération n’est pas autorisée, même si nous utilisons la commande sudo.

Si nous utilisons deux crochets « >> » pour rediriger la sortie, celle-ci est ajoutée aux données existantes dans le fichier. Cela devrait être acceptable pour notre fichier texte « append-only ».

sudo ls -l >> fichier-texte.txt

Rediriger la sortie vers la fin d’un fichier texte

Nous sommes renvoyés à l’invite de commande sans aucun message d’erreur. Regardons à l’intérieur du fichier pour voir ce qui s’est passé.

cat fichier-texte.txt

Examen du contenu d’un fichier texte

La sortie redirigée de ls a été ajoutée à la fin du fichier.

Nouvelles données ajoutées à un fichier texte en mode append only

Bien que nous puissions ajouter des données au fichier, c’est la seule modification que nous pouvons y apporter. Nous ne pouvons pas le supprimer et root non plus.

rm fichier-texte.txt

sudo rm fichier-texte.txt

Échec de l’effacement d’un fichier texte en mode « append only

Définition de l’attribut Immutable

Si vous souhaitez protéger un fichier auquel aucune nouvelle donnée ne sera ajoutée, vous pouvez définir l’attribut immuable. Cela empêche toute modification du fichier, y compris l’ajout de données.

sudo chattr +i second-fichier.txt

lsattr second-fichier.txt

Définition de l’attribut immuable sur un fichier texte

Nous pouvons voir le « i » indiquant que l’attribut immuable a été défini. Ayant rendu notre fichier immuable, même l’utilisateur root ne peut pas le renommer (mv), le supprimer (rm) ou y ajouter des données.

sudo mv second-fichier.txt nouveau-nom.txt

sudo rm second-fichier.txt

sudo ls -l >> second-fichier.txt

Un fichier immuable résistant aux changements

Ne comptez pas sur la suppression sécurisée sur ext4

Comme nous l’avons souligné, certains systèmes d’exploitation ne prennent pas en charge tous les attributs. L’attribut de suppression sécurisée n’est pas honoré par la famille de systèmes de fichiers ext, y compris ext4. Ne comptez pas sur cet attribut pour la suppression sécurisée des fichiers.

Il est facile de voir que cela ne fonctionne pas dans ext4. Nous allons définir l’attribut s (suppression sécurisée) sur un fichier texte.

sudo chattr +s troisième-fichier.txt

Définir l’attribut de suppression sécurisée sur un fichier texte

Ce que nous allons faire, c’est trouver l’inode qui contient les métadonnées de ce fichier. L’inode contient le premier bloc de disque dur occupé par le fichier. Le fichier contient un texte de remplacement lorem ipsum.

Nous allons lire ce bloc directement à partir du disque dur pour vérifier que nous lisons l’emplacement correct du disque dur. Nous supprimerons le fichier, puis nous lirons à nouveau ce même bloc de disque dur. Si l’attribut de suppression sécurisée est respecté, nous devrions lire des octets nuls.

Nous pouvons trouver l’inode du fichier en utilisant la commande hdparm avec l’option –fibmap (file block map).

sudo hdparm –fibmap troisième-fichier.txt

Recherche de l’inode d’un fichier

Le premier bloc du disque dur est le 18100656. Nous allons utiliser la commande dd pour le lire.

Les options sont :

if=/dev/sda : Lire depuis le premier disque dur de cet ordinateur.
bs=512 : Utilise une taille de bloc de disque dur de 512 octets.
skip=18100656 : Sauter tous les blocs avant le bloc 18100656. En d'autres termes, commencez la lecture au bloc 18100656.
count=1 : Lire un bloc de données.

sudo dd if=/dev/sda bs=512 skip=18100656 count=1

Lecture du premier bloc de données d’un fichier sur le disque dur

Comme prévu, nous voyons le texte de remplacement lorem ipsum. Nous lisons le bloc correct sur le disque dur.

Maintenant, nous allons supprimer le fichier.

rm troisième-fichier.txt

Si nous lisons ce même bloc du disque dur, nous pouvons toujours voir les données.

sudo dd if=/dev/sda bs=512 skip=18100656 count=1

Lecture des données d’un bloc de disque dur utilisé par un fichier supprimé

Encore une fois, ne vous fiez pas à cette méthode pour une suppression sécurisée sur ext4. Il existe de meilleures méthodes pour supprimer des fichiers de manière à ce qu’ils ne puissent pas être récupérés.

Utile, mais à utiliser avec précaution

La définition des attributs des fichiers peut les rendre imperméables à un désastre accidentel. Si vous ne pouvez pas supprimer ou écraser un fichier, il est plutôt sûr.

Vous pourriez penser que vous aimeriez les appliquer aux fichiers système et rendre votre installation Linux plus sûre. Mais les fichiers système doivent être remplacés périodiquement à mesure que des mises à jour sont publiées ou que des mises à niveau sont appliquées. Pour cette raison, il est plus sûr de n’utiliser ces attributs que sur des fichiers de votre propre création.