Comment utiliser la commande chattr sous Linux

Publié: 2022-06-28
Terminal Linux sur fond d'ordinateur portable rouge.
fatmawati achmad zaenuri/Shutterstock

Outre les autorisations habituelles de lecture, d'écriture et d'exécution des fichiers, les fichiers Linux ont un autre ensemble d'attributs qui contrôlent d'autres caractéristiques du fichier. Voici comment les voir et les modifier.

Autorisations et attributs

Sous Linux, qui peut accéder à un fichier et ce qu'il peut en faire est contrôlé par un ensemble d' autorisations centré sur l'utilisateur . Que vous puissiez 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, tout est régi par cet ensemble d'autorisations. Les autorisations sont appliquées au fichier, mais elles définissent les restrictions et les capacités des différentes catégories d'utilisateurs.

Il existe des autorisations 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 (liste longue) pour voir les autorisations sur un fichier ou un répertoire.

Comment utiliser la commande chmod sous Linux
CONNEXION Comment utiliser la commande chmod sous Linux

Pour modifier les autorisations, vous utilisez la commande chmod . Au moins, vous pouvez si vous avez des autorisations d'écriture pour le fichier, ou si vous êtes l'utilisateur root.

Nous pouvons voir que les autorisations de fichiers sont centrées sur l'utilisateur car elles accordent ou suppriment des autorisations au niveau de l'utilisateur. En revanche, les attributs d'un fichier sont centrés sur le système de fichiers. Comme les autorisations, elles sont définies 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 sont 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, nous utilisons la commande lsattr . Pour définir les attributs, nous utilisons la commande chattr .

Tout ce que vous avez toujours voulu savoir sur les inodes sous Linux
CONNEXION Tout ce que vous avez toujours voulu savoir sur les inodes sous Linux

Les autorisations 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.

Étant donné que différents systèmes de fichiers ont des structures et des capacités sous-jacentes différentes, les attributs peuvent se comporter différemment (ou ê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 pour de nombreuses distributions Linux.

Regarder les attributs d'un fichier

Les chattr et lsattr seront 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 courant, utilisez lsattr :

 lsattr 

Liste des attributs de fichier pour 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 défini est l'attribut e (extents). Cela montre que les inodes du système de fichiers utilisent (ou utiliseront si nécessaire) des étendues pour pointer vers toutes les parties du fichier sur le disque dur.

Si le fichier est contenu dans une séquence contiguë de blocs de disque dur, son inode n'a qu'à enregistrer 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 élément du fichier. Ces paires de numéros de bloc de disque dur sont appelées extensions.

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

  • a : Ajouter uniquement. Un fichier avec cet attribut ne peut être ajouté qu'à. Il peut toujours y être écrit, mais seulement à 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é lors de sa lecture. Les données écrites dans les fichiers sont compressées avant d'être écrites sur le disque dur.
  • R : Pas de mises à jour à atime . Le atime est une valeur dans un inode qui enregistre la dernière fois qu'un fichier a été accédé.
  • 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 pour ce processus.
  • d : Pas de vidage. La commande Linux dump est utilisée pour écrire des copies de systèmes de fichiers entiers sur un support de sauvegarde. Cet attribut fait que dump ignore le fichier. Il est exclu de la sauvegarde.
  • D : Mises à jour synchrones 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 : Format d'étendue. L'attribut e indique que le système de fichiers utilise des étendues pour mapper l'emplacement du fichier sur le disque dur. Vous ne pouvez pas changer cela avec chattr . C'est une fonction du fonctionnement du système de fichiers.
  • i : immuable. Un fichier immuable ne peut pas être modifié, y compris renommer et supprimer. L'utilisateur racine est la seule personne qui peut activer ou désactiver cet attribut.
  • s : Suppression sécurisée. Lorsqu'un fichier avec cet ensemble d'attributs est supprimé, les blocs du disque dur contenant les données du fichier sont écrasés par des octets contenant des zéros. Notez que cela n'est pas respecté par le système de fichiers ext4 .
  • S : Mises à jour synchrones. Les modifications apportées à un fichier avec son attribut S 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 bénéfique pour la récupération de fichiers si le fichier 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, similaire à la commande chmod et aux autorisations.

La commande chattr a également un opérateur = (set uniquement). Cela définit les attributs d'un fichier ou d'un répertoire uniquement sur les attributs spécifiés dans la commande. Autrement dit, tous les attributs non répertoriés sur la ligne de commande sont non définis .

Définition de l'attribut Ajouter uniquement

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

 sudo chattr + un fichier-texte.txt 

Définition de l'attribut d'ajout uniquement sur un fichier texte

Nous pouvons vérifier que le bit d'ajout uniquement a été défini en utilisant lsattr :

 lsattr fichier-texte.txt 

Lister les attributs d'un fichier texte

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

Nous avons préchargé le fichier texte avec du texte d'espace réservé lorem ipsum .

 chat fichier-texte.txt 

Texte d'espace réservé 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 en ajout uniquement

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

Si nous utilisons deux crochets angulaires " >> " pour rediriger la sortie, elle est ajoutée aux données existantes dans le fichier. Cela devrait être acceptable pour notre fichier texte en ajout uniquement.

 sudo ls -l >> fichier-texte.txt 

Rediriger la sortie vers la fin d'un fichier texte

Nous revenons à l'invite de commande sans aucun message d'erreur. Jetons un coup d'œil à l'intérieur du fichier pour voir ce qui s'est passé.

 chat fichier-texte.txt 

Examiner le 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 ajout uniquement

Bien que nous puissions ajouter des données au fichier, c'est le seul changement que nous pouvons y apporter. Nous ne pouvons pas le supprimer et ni rooter.

 rm fichier-texte.txt
 sudo rm fichier-texte.txt 

Échec de la suppression d'un fichier texte ajouté uniquement

Définition de l'attribut immuable

Si vous souhaitez protéger un fichier auquel de nouvelles données ne seront jamais ajoutées, vous pouvez définir l'attribut immuable. Cela empêche toute modification du fichier, y compris l'ajout de données.

 sudo chattr +i deuxième-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 >> deuxième-fichier.txt 

Un fichier immuable résistant au changement

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 respecté par la famille de systèmes de fichiers ext , y compris ext4 . Ne comptez pas sur cela 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éfinition de 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 du texte d'espace réservé lorem ipsum .

Nous lirons ce bloc directement à partir du disque dur pour vérifier que nous lisons le bon emplacement du disque dur. Nous allons supprimer le fichier, puis relire ce même bloc de plongée dur une fois de plus. Si l'attribut de suppression sécurisée est honoré, nous devrions lire les octets mis à zéro.

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

 sudo hdparm --fibmap troisième-fichier.txt 

Trouver l'inode d'un fichier

Le premier bloc de disque dur est 18100656. Nous utiliserons la commande dd pour le lire.

Les options sont :

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

Lecture du premier bloc disque dur d'un fichier

Comme prévu, nous voyons le texte de l'espace réservé lorem ipsum . Nous lisons le bon bloc sur le disque dur.

Nous allons maintenant supprimer le fichier.

 rm troisième-fichier.txt 

Si nous lisons ce même bloc de 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 comptez pas sur cela pour une suppression sécurisée sur ext4 . Il existe de meilleures méthodes disponibles pour supprimer des fichiers afin qu'ils ne puissent pas être récupérés.

CONNEXION: Comment supprimer en toute sécurité des fichiers sous Linux

Utile, mais à utiliser avec prudence

La définition des attributs des fichiers peut les rendre insensibles aux catastrophes accidentelles. Si vous ne pouvez pas supprimer ou écraser un fichier, c'est assez sûr.

Vous pourriez penser que vous aimeriez les appliquer aux fichiers système et rendre votre installation Linux plus sécurisée. Mais les fichiers système doivent être remplacés périodiquement au fur et à 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.

CONNEXION : Comment sécuriser votre serveur Linux avec fail2ban