文件创建时间
传统 Unix 文件时间只有访问、修改与元数据变更三种,ext4 在 inode 空间足够时另外记录创建时间 crtime。它对取证很关键:mtime 可以伪造,而 crtime 与 ctime 很难在文件系统层面被改回去。读取它通常有两条路,stat 的 %w 与 debugfs。
基本信息
| 四类时间 | atime 访问、mtime 内容修改、ctime 元数据变更、crtime 创建 |
|---|---|
| stat 读取 | %w 输出可读形式,%W 输出 Unix 秒 |
| 备选方式 | debugfs -R 'stat <路径或 inode>' /dev/sdaX |
| 前提条件 | 文件系统为 ext4 且 inode 大小足够,通常是 256 字节 |
| 缺失表现 | 文件系统不支持时 %w 显示为短横线 |
| 权限要求 | 读取裸设备需要 root |
典型使用场景
- 判断文件的创建时刻
- 对比 mtime 与 ctime 识别时间被改写的情况
- 分析已删除文件残留的元数据信息
- 与日志时间线互校确定事件顺序
- 核对备份与恢复操作的实际时间
最小示例
最小示例
stat -c '%n B=%w M=%y C=%z A=%x' /etc/passwd # 四类时间一览
stat -c '%n B=%W' /etc/passwd # 创建时间的 Unix 秒
debugfs -R 'stat /etc/passwd' /dev/sda1 2>/dev/null | grep -i crtime
ls -i /etc/passwd # 取得 inode 号
mount | grep -E 'ext4|sda1' # 确认文件系统类型
sha256sum /etc/passwd # 固定内容指纹便于比对时间类型与价值
| 时间 | 含义 | 取证价值 |
|---|---|---|
| atime | 最后访问时间 | 易被访问操作更新,除非挂载时禁用 |
| mtime | 内容最后修改时间 | 可被 touch 之类命令直接改写 |
| ctime | 元数据最后变更时间 | 无法直接设置,改动元数据即更新 |
| crtime | 创建时间(ext4) | 最能暴露时间伪造,重点核对 |
stat 的 %w 在文件系统不支持或 inode 空间不足时显示为短横线,此时改用 debugfs 读取;两种方式结果一致才能采信。
从压缩包或网络解压得到的文件,其 crtime 是落地时刻而不是原始创建时刻,解释时要把来源写清楚。
如果一批文件的 crtime 完全相同而 mtime 各不相同,通常说明它们在同一时刻被写入磁盘,这个整齐的时间点本身就是事件锚点。
对裸设备执行 debugfs 属于只读访问,但参数错误仍可能触碰文件系统结构;操作前务必确认设备路径与挂载状态。