mactime 时间线视图
mactime 把 bodyfile 形式的文件系统元数据转成按时间排序的时间线,是 Sleuth Kit 体系里查看 mac 时间最直接的工具。bodyfile 通常由 fls -m 递归生成,mactime 负责排序、限定窗口并按需导出 CSV,供后续统计与交叉分析使用。
基本信息
| 所属工具集 | The Sleuth Kit(TSK) |
|---|---|
| 输入格式 | bodyfile:MD5|路径|inode|模式|uid|gid|大小|atime|mtime|ctime|crtime |
| 常用参数 | -b 指定 bodyfile,可多次给出;-z 指定时区;-d 输出逗号分隔;-h 输出表头 |
| 窗口限定 | 位置参数 起..止,需与 -d 组合使用 |
| 输出形态 | 默认文本表格,加 -d 后为 CSV |
| 时间粒度 | 秒级;crtime 在部分文件系统上为 0 或缺失 |
典型使用场景
- 按时间顺序浏览文件的创建与改动
- 把多台主机或多个分区的 bodyfile 合并成统一时间线
- 定位事件窗口内被改动的文件
- 导出 CSV 交给表格工具或脚本做统计
- 与登录、命令执行类日志时间线互校
最小示例
最小示例
fls -r -m / /evidence/root.dd > bodyfile.txt # 先生成 bodyfile
mactime -b bodyfile.txt -z UTC -h | head -40 # 文本视图,含表头
mactime -b bodyfile.txt -z UTC -d 2026-01-01..2026-01-02 > day.csv # 限定窗口导出
head -5 day.csv # 检查表头与首行内容
mactime -b a.txt -b b.txt -z UTC -h > merged.txt # 多来源合并并排序
awk -F, 'NR>1{print $1}' day.csv | head -3 # 复核首列时间是否为预期时区输出逐列读法
| 列 | 含义 | 注意 |
|---|---|---|
| Date | 事件时间,受 -z 影响 | 未指定时区时按本机时区解释 |
| Size | 文件大小 | 0 字节可能是占位或截断 |
| Type | 时间类型字母组合 | a、m、c、b 分别对应访问、修改、变更、创建 |
| Mode | 权限与文件类型 | 异常权限位值得单独列出 |
| UID/GID | 属主与属组 | 系统账号出现在用户数据目录 |
| Name | 完整路径 | 带 (deleted) 表示已删除文件 |
bodyfile 中路径带 (deleted) 表示采集时文件已删除,但仍可从元数据推断其存在与时间,这类条目在时间线上往往最有价值。
crtime 是否可用取决于文件系统类型与 inode 大小,ext4 只有在 inode 足够大时才记录创建时间,缺失时不要按 0 解释。
统一为 UTC 后再合并多个来源的 bodyfile,混合时区产生的时间错序往往不易被察觉。
mactime 只负责排序与呈现,不校验 bodyfile 是否完整;截断或乱序的输入会直接转成时间线缺口,合并前应先确认 fls 的输出无报错。