1 votes

UNIX ctime : comment conserver cette précieuse information dans les sauvegardes (tar) ?

J'ai trois questions relatives à l'information "ctime" d'un fichier. Elles sont en gras (si vous n'avez pas de temps, vous pouvez sauter directement à elles).


Un site web sur mon serveur dédié a été piraté. Beaucoup de fichiers ont été modifiés. J'ai remarqué que certains hackers étaient assez malins pour réinitialiser le mtime (certains non).

atime et mtime peuvent être modifiés avec des fonctions PHP. ctime peut également être modifié en utilisant la fonction chmod. Mais ctime est géré par le noyau, il n'est donc possible de le définir qu'à la date/heure système actuelle. Il est impossible de remonter dans le passé.

J'ai trouvé des backdoors dont le mtime avait été réinitialisé au ctime (date passée, comme il y a 1 ou 2 ans), de sorte que je ne peux pas les trouver en utilisant un outil de recherche récursive basé sur cette information.

La clé pour pouvoir rapidement trouver tous les fichiers infestés est bien sûr l'information ctime. Le problème est que je n'y ai pas pensé au départ, j'ai donc d'abord "chmodé" récursivement tous les fichiers pour que le site web lui-même n'ait plus de permissions en écriture. En faisant cela, j'ai perdu la précieuse information ctime.

J'ai beaucoup de sauvegardes, sous forme de fichiers .tar.gz. Je veux savoir s'il y a un moyen d'extraire du fichier tar.gz le ctime des fichiers au moment où ils ont été ajoutés à l'archive tar.

J'ai lu toute la documentation de GNU tar, et j'ai découvert que le format "GNU" de tar (qui est celui utilisé par défaut sur mon serveur Linux) stocke le ctime de ses fichiers archivés. J'ai essayé la méthode suivante pour l'extraire :

tar -zxf Friday.tar.gz --to-command=./script

./script est un script bash et ressemble à ceci :

#!/bin/bash
echo $TAR_CTIME

Le problème est que cela donne la date et l'heure actuelles, peut-être parce que tar donne les informations du fichier qu'il créerait lui-même si je n'avais pas utilisé --to-command


Si tar ne peut pas gérer cela, existe-t-il des outils de sauvegarde qui peuvent conserver les informations de ctime originales ?


Comment lister chaque fichier dont l'mtime et le ctime diffèrent ? J'ai lu le manuel de find mais n'ai trouvé que le -newerXY, qui (si je comprends bien) ne peut comparer qu'un ctime avec un ctime, un mtime avec un mtime, etc. Existe-t-il un moyen de comparer un ctime et un mtime du même fichier ?

1voto

BillThor Points 27096

Avez-vous envisagé d'utiliser l'option de comparaison de tar pour voir quels fichiers ont été modifiés? Cela devrait vous donner rapidement une liste de candidats.

0voto

johnshen64 Points 5687

Ctime est contrôlé par le noyau, et non par un outil de l'espace utilisateur, tar ou tout autre programme, car pour sauvegarder et restaurer, ils doivent créer un nouveau inode qui doit avoir un nouveau ctime. Une façon connue de le préserver est d'imager votre système de fichiers dans un fichier loopback, et sauvegarder cette image. À moins que votre système de fichiers ne soit assez plein et que vous vouliez sauvegarder tout, c'est assez gaspilleur.

Il existe des programmes plus efficaces tels que partimage, mais je n'ai pas vérifié s'ils préservent le ctime des inodes.

0voto

Charles Williams Points 9147

star avec le format exustar (tar avec des en-têtes étendues POSIX.1-2001) stocke les 3 horodatages :

$ stat 3times
  Fichier : '3times'
  Taille : 7            Blocs : 8          Blocs d'E/S : 4096   fichier régulier
Périphérique : 13h/19d   Inœud : 20209028    Liens : 1
Accès : (0400/-r--------)  Uid : ( 1000/   gotar)   Gid : ( 1000/   users)
Accès : 2021-07-15 12:31:53.085946972 +0200
Modif. : 2021-07-15 12:32:10.049040551 +0200
Changement : 2021-07-15 12:32:16.435616907 +0200
 Créé : -

$ star artype=exustar 3times -c > 3times.star
star : 1 bloc + 0 octets (total de 10240 octets = 10,00 k).

$ grep -a time= 3times.star | strings
[...]
30 atime=1626345113.085946972
30 ctime=1626345136.435616907
30 mtime=1626345130.049040551
[...]

$ perl -E 'say scalar localtime 1626345113; say scalar localtime 1626345136; say scalar localtime 1626345130'
Thu Jul 15 12:31:53 2021
Thu Jul 15 12:32:16 2021
Thu Jul 15 12:32:10 2021

et dans certaines conditions, ils peuvent être restaurés. Ou plus ou moins grossièrement extraits (comme ci-dessus).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X