Sécurisation des fichiers avec les attributs étendus sous GNU/Linux
Sommaire
I. Présentation
Sur un système GNU/Linux, les fichiers et répertoires d’un serveur possèdent ce que l’on appelle des attributs étendus, permettant entre autre de renforcer la maîtrise de ces ressources et de sécuriser ces éléments contre de mauvaises manipulations.
Je vous propose dans ce billet de passer en revue les différentes commandes et options permettant la gestion de ces attributs étendus et d’en détailler l’utilisation. L’objectif de cette fonctionnalité est de protéger les fichiers/répertoires de la suppression ou des modifications, notamment durant les mises à jour du système, grâce à un ou plusieurs bits spécifiques.
II. Présentation des commandes
Afin de lister les différents paramètres d’attributs étendus pour les fichiers ou répertoires locaux, on doit utiliser la commande lsattr. Celle-ci va alors permettre de voir les attributs étendus utilisés pour un ou plusieurs fichiers ou pour toute une arborescence.
Commençons par lister ces fameux bits d’attributs étendus qui sont au nombre de douze:
• a: autorise ou interdit uniquement les ajouts.
• A: active ou désactive la mise à jour du champ atime.
• c: active ou désactive la compression.
• C: active ou désactive la fonction de copy-on-write.
• d: active ou ignore l’analyse par la commande dump.
• D: active ou désactive la mise à jour synchrone.
• e: active ou désactive le mapping des extensions sur disque.
• i: active ou désactive la définition d’immutabilité.
• j: active ou désactive la journalisation avant l’écriture disque.
• s: active ou désactive la suppression sécurisée.
• S: active/désactive la synchronisation de modifications sur disque.
• u: pour activer ou désactiver la possibilité de supprimer l’élément.
Afin d’activer une option, on préfixe le champ des attributs étendus par le symbole ‘+’ de la commande chattr. Dans le cas où l’on souhaite désactiver une option, il suffit de préfixer celle-ci avec le symbole ‘-‘.
REMARQUE : afin de pouvoir appliquer ces mêmes attributs étendus sur une arborescence ou un système de fichiers, il suffit d’utiliser l’option -R.
Exemple: pour ajouter le droit d’immutabilité récursivement sur le répertoire /etc :
# chattr -R +i /etc
Généralement, lorsque l’on liste les différents attributs étendus pour un fichier, cela se présente sous la forme suivante (dans l’exemple, on dispose uniquement du droit d’immutabilité pour le fichier /etc/resolv.conf :
III. Contexte des commandes
A l’origine, chattr était une commande permettant à un utilisateur de définir certains attributs sur un fichier présent dans les systèmes de fichiers propres à la seconde génération de l’Extended File System (soit les systèmes de fichiers ext2, ext3 et ext4), disponible dans le package e2fsprogs.
REMARQUE: depuis cette génération, de nombreux autres systèmes de fichiers ont été ajoutés au support. Notamment les systèmes XFS, ReiserFS et JFS.
Le profil de la commande chattr est le suivant :
# chattr [-RVfv] [+/- <bits> <Files>
• -R pour la récursivité
• -V pour basculer en mode verbeux
• -f pour supprimer les messages d’erreur
• -v pour afficher la version de la commande
• +<bits> pour ajouter et activer un ou plusieurs bit(s).
• -<bits> pour désactiver un ou plusieurs bit(s).
De la même façon, le profil de la commande lsattr est le suivant :
# lsattr [-RVadplv] [+/- <bits> <Files>
• -R pour la récursivité
• -V pour afficher la version de la commande
• -a pour afficher tous les fichiers (y compris ceux commençant par .)
• -d pour traiter tous les répertoires comme les autres fichiers
• -v pour afficher la version du fichier ou du répertoire
IV. Sécurisation de fichiers
Maintenant que l’on connait un peu mieux ces commandes, on peut imaginer sécuriser certains fichiers contre la modification et la suppression. Classiquement, il est possible de verrouiller les fichiers sensibles :
• /etc/passwd
• /etc/group
• /etc/shadow
• /etc/resolv.conf
• /etc/fstab
• /etc/nsswitch.conf
ATTENTION : toutefois, si l’on protège les fichiers /etc/passwd, /etc/shadow et /etc/group contre la modification, il faut penser à désactiver cela lors des créations de groupes et d’utilisateurs afin d’éviter de récupérer des messages d’erreur. On peut n’utiliser que le bit d’ajout uniquement :
# chattr +a /etc/passwd # chattr +a /etc/shadow # chattr +a /etc/group
Par ailleurs, on peut aussi en profiter pour protéger les fichiers de configuration réseau, et/ou de bases de données selon les cas de figure afin d’empêcher quiconque d’ajouter de nouveaux interfaces réseau et/ou de modifier les bases de données hébergées sur un serveur. On peut également s’assurer de protéger les répertoires de journaux afin de ne laisser le système qu’ajouter des entrées (sans pourvoir en supprimer, afin d’éviter les modifications en suppression des rootkits ou autres mécanismes de piratage) :
# chattr -R +a /var/log
V. Conclusion
En utilisant ce genre de fonctionnalité, on se prémunit d’un certain nombre d’actes malveillants tout en protégeant les fichiers ou répertoires concernés.
J’espère que cet article, vous donnera l’opportunité de sécuriser un peu plus vos systèmes et de protéger vos fichiers et répertoires critiques de modifications catastrophiques. Les commandes lsattr et chattr sont très utiles dans des environnements nécessitant des accès contrôlés.
Le plus souvent, on ne fait que protéger contre l’écriture les répertoires ou fichiers à sécuriser. Mais, on a également vu que l’on pouvait interdire la suppression tout en laissant l’accès en ajout uniquement ou encore intervenir sur le mécanisme de synchronisation entre la mémoire et les disques en écriture.
Généralement, ces commandes sont utilisées avec des liste de contrôle d’accès (aussi appelées acl), permettant de tracer les accès effectués sur les fichiers ou répertoires manipulés. Cette notion pourra faire l’objet d’un billet très prochainement.
Articles très intéressant, il manque juste des explications sur le rôle et l’utilité des différents attributs mais je me le garde sous le coude 🙂
Bonjour,
Je n’ai mis effectivement que l’explication sur le rôle de chaque option. Mais, je vous invite à lire le manuel en ligne en exécutant : man lsattr (ou man chattr). Les explications sont assez claires et les exemples mettent en valeur les différentes possibilités.
Bonne journée.