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.