Comment utiliser la commande chattr sous Linux
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.
Sommaire
Autorisations et attributs
Sous Linux, qui peut accéder à un fichier et ce qu’il peut en faire est contrôlé par un ensemble de autorisations. 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 dossier, pour le grouper du dossier, et pour autres— c’est-à-dire les utilisateurs qui n’appartiennent pas aux deux premières catégories. Vous pouvez utiliser le ls
commande avec le -l
(liste longue) option pour voir les autorisations sur un fichier ou un répertoire.
Pour modifier les autorisations, vous utilisez le chmod
commande. 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, le 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 le lsattr
commande. Pour définir les attributs, nous utilisons le chattr
commande.
Les autorisations et les attributs sont stockés à l’intérieur 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
Le chattr
et lsattr
commandes 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 du répertoire courant, utilisez lsattr
:
lsattr
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 le e
(étendues) attribut. Cela montre que les inodes du système de fichiers utilisent (ou utiliseront si nécessaire)é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.
- un: 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.
- UN: Non
atime
mises à jour. Leatime
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.
- ré: Pas de vidage. Le Linux
dump
La commande est utilisée pour écrire des copies de systèmes de fichiers entiers sur un support de sauvegarde. Cet attribut faitdump
ignorer le fichier. Il est exclu de la sauvegarde. - ré: 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. Le
e
L’attribut 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 avecchattr
. C’est une fonction du fonctionnement du système de fichiers. - je: 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 honoré par le
ext4
système de fichiers. - S: Mises à jour synchrones. Modifications apportées à un fichier avec son
S
ensemble d’attributs sont écrits dans le fichier de manière synchrone. - tu: Suppression d’un fichier qui a son
u
L’ensemble d’attributs 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
Le chattr
La commande nous permet de modifier les attributs d’un fichier ou d’un répertoire. Nous pouvons utiliser le +
(ensemble) et -
(non défini) pour appliquer ou supprimer un attribut, similaire à chmod
commande et autorisations.
Le chattr
la commande a également un =
(régler uniquement) opérateur. Cela définit les attributs d’un fichier ou d’un répertoire uniquement sur les attributs spécifiés dans la commande. C’est-à-dire que tous les attributs ne pas répertoriés sur la ligne de commande sont non défini.
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 +a text-file.txt
Nous pouvons vérifier que le bit d’ajout uniquement a été défini en utilisant lsattr
:
lsattr text-file.txt
La lettre « a
” indique que l’attribut a été défini. Essayons d’écraser le fichier. Rediriger la sortie vers un fichier avec un seul crochet « >
” remplace tout le contenu du fichier par la sortie redirigée.
Nous avons préchargé le fichier texte avec quelques lorem ipsum texte d’espace réservé.
cat text-file.txt
Nous allons rediriger la sortie de ls
dans le fichier :
ls -l > text-file.txt
sudo ls -l > text-file.txt
L’opération n’est pas autorisée, même si nous utilisons le sudo
commande.
Si nous utilisons deux crochets « >>
” pour rediriger la sortie, il est ajouté aux données existantes dans le fichier. Cela devrait être acceptable pour notre fichier texte en ajout uniquement.
sudo ls -l >> text-file.txt
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é.
cat text-file.txt
La sortie redirigée de ls
a été ajouté à la fin du fichier.
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 text-file.txt
sudo rm text-file.txt
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 second-file.txt
lsattr second-file.txt
On peut 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
), supprime-le (rm
), ou ajoutez-y des données.
sudo mv second-file.txt new-name.txt
sudo rm second-file.txt
sudo ls -l >> second-file.txt
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 le ext
famille de systèmes de fichiers, 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 le s
(suppression sécurisée) sur un fichier texte.
sudo chattr +s third-file.txt
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 quelques lorem ipsum texte d’espace réservé.
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 le hdparm
commande avec le --fibmap
(carte de bloc de fichier).
sudo hdparm --fibmap third-file.txt
Le premier bloc de disque dur est 18100656. Nous utiliserons le dd
commande de le lire.
Les options sont :
- si=/dev/sda: Lire à partir du premier disque dur de cet ordinateur.
- bs=512: Utilisez une taille de bloc de disque dur de 512 octets.
- sauter=18100656: Sauter tous les blocs avant le bloc 18100656. En d’autres termes, commencer la lecture au bloc 18100656.
- compte=1: Lire un bloc de données.
sudo dd if=/dev/sda bs=512 skip=18100656 count=1
Comme prévu, nous voyons le lorem ipsum texte d’espace réservé. Nous lisons le bon bloc sur le disque dur.
Nous allons maintenant supprimer le fichier.
rm third-file.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
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.
EN RELATION: Comment supprimer des fichiers en toute sécurité 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.
EN RELATION: Comment sécuriser votre serveur Linux avec fail2ban