UNIX ctime:如何在备份(tar)中保存这些宝贵的信息?

UNIX ctime:如何在备份(tar)中保存这些宝贵的信息?

我有三个与文件的“ctime”信息相关的问题。它们分别大胆的(如果您没有时间,可以直接跳到它们)。


我的专用服务器上的一个网站被黑客入侵了。很多文件被编辑了。我注意到有些黑客很聪明,重置了修改时间(有些则不行)。

atime 和 mtime 可以用 PHP 函数更改。ctime 也可以用 chmod 函数更改。但是 ctime 由内核处理,因此只能将其设置为当前系统日期/时间。无法将其设置回过去。

我发现一些后门的 mtime 已被重置为 ctime(过去的日期,比如 1 或 2 年前),因此我无法使用基于该信息的递归搜索工具找到它。

能够快速找到所有受感染文件的关键当然是 ctime 信息。问题是我一开始没有想到这一点,所以我首先递归地“chmoded”所有文件,这样网站本身就不再具有写入权限。这样做,我丢失了宝贵的 ctime 信息。

我有很多备份,以 .tar.gz 文件的形式。我想知道是否有办法从 tar.gz 文件中提取文件的 ctime当他们被添加到焦油中时。

我阅读了整个 GNU tar 文档,发现 tar 的“GNU”格式(这是我的 Linux 服务器使用的默认格式)存储了其存档文件的 ctime。我尝试了以下方法来提取它:

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

./script 是一个 bash 脚本,如下所示:

#!/bin/bash
echo $TAR_CTIME

问题是,这给出了当前的日期和时间,可能是因为 tar 给出了如果我没有使用它会自己创建的文件的信息--to-command


如果 tar 无法处理这个问题,是否有可以保留原始 ctime 信息的备份工具?


如何列出每个 mtime 和 ctime 不同的文件?我阅读了 find 手册,但只发现了-newerXY,它(如果我理解得没错的话)只能比较 ctime 与 ctime、mtime 与 mtime 等等。有没有办法比较同一个文件的 ctime 和 mtime?

答案1

ctime 由内核控制,而不是任何用户空间工具、tar 或任何其他程序,因为要备份和恢复,它们必须创建一个新的 inode,该 inode 必须具有新的 ctime。一种已知的保存方法是将文件系统映像到环回文件,然后保存该映像。除非您的文件系统已满并且您确实想保存整个文件系统,否则这非常浪费。

有更高效的程序,例如 partimage,但我还没有检查它们是否保存了 inode 的 ctime。

答案2

您是否考虑过使用 tar 比较选项来查看哪些文件已更改?这应该会为您提供一个候选列表。

答案3

星星埃克斯塔格式(带有 POSIX.1-2001 扩展头的 tar)存储所有 3 个时间戳:

$ stat 3times
  File: '3times'
  Size: 7               Blocks: 8          IO Block: 4096   regular file
Device: 13h/19d Inode: 20209028    Links: 1
Access: (0400/-r--------)  Uid: ( 1000/   gotar)   Gid: ( 1000/   users)
Access: 2021-07-15 12:31:53.085946972 +0200
Modify: 2021-07-15 12:32:10.049040551 +0200
Change: 2021-07-15 12:32:16.435616907 +0200
 Birth: -

$ star artype=exustar 3times -c > 3times.star
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).

$ 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

在某些条件下可以恢复。或者或多或少粗略地提取(如上)。

相关内容