首页/安全/取证与溯源速查/容器环境取证要点
Linux 取证135 条

容器环境取证要点

容器内看到的是命名空间视图,完整证据通常要从宿主机采集:cgroup 记录容器归属,日志文件位于网关目录下。

取证与溯源速查安全更新于 2026-10-13

容器痕迹识别

先判断当前环境是不是容器、以及容器归属哪台宿主,是容器取证的第一步:容器内看到的时间、进程与网络视图都被命名空间隔离,直接沿用物理机思路会得出错误结论。常见依据有 /.dockerenv、/proc/1/cgroup 中的容器 ID,以及宿主上的容器运行时目录。

基本信息

识别文件/.dockerenv(Docker)、/run/.containerenv(Podman)
cgroup/proc/1/cgroup:v1 路径含容器 ID,v2 常只显示 0::/
运行时目录/var/lib/docker/containers/<ID>/<ID>-json.log
常用命令docker ps --no-trunc、docker inspect、crictl ps
时区特征多数镜像默认 UTC
注意/etc/os-release 反映的是基础镜像,不是宿主系统

典型使用场景

  • 应急响应时确认采集范围应覆盖宿主还是容器
  • 还原容器内事件的真实时刻,做时区换算
  • 用容器 ID 把内部日志与宿主上的其它证据串联
  • 判断日志是否会随容器删除而一起丢失
  • 分析容器逃逸类事件时先厘清边界

最小示例

最小示例
cat /.dockerenv 2>/dev/null && echo in-docker          # 存在则高度可能为 Docker 容器
cat /proc/1/cgroup | head -5                           # cgroup v1 可看到容器 ID 片段
cat /etc/hostname                                      # 容器内常为短 ID
docker ps --no-trunc | head                            # 在宿主上列出完整容器 ID
ls /var/lib/docker/containers/ 2>/dev/null | head      # 逐容器的日志与配置目录
docker inspect <容器> | grep -i -E 'Pid|StartedAt'      # 容器主进程号与启动时间

证据项与解读

证据说明注意
/.dockerenv容器标记文件镜像内可被伪造,只作线索
/proc/1/cgroup控制组归属新版内核可能不含容器 ID
hostname常为短容器 ID被人工设置后即失真
StartedAt容器启动时刻结合内部日志确定时间窗
时区偏移容器内多为 UTC与宿主时间比较前先换算
容器删除后其日志目录随之消失;需要长期留证的场景要在容器生命周期内把日志导出到宿主或远端存储。
cgroup v2 环境下 /proc/1/cgroup 往往只显示 0::/,此时优先用 /.dockerenv、/run/.containerenv 与宿主侧 docker inspect 判断归属。
在业务容器内执行 kill、重启或挂载会改变运行时状态,还可能触发编排系统重建容器;取证期间避免直接在容器内做写操作。

易错点

  • 用宿主时间直接解释容器日志:多数镜像默认 UTC,不做换算会整体偏移数小时
  • 靠 hostname 判断容器身份:编排系统与镜像都可能覆盖主机名,必须用完整 ID 或运行时接口核对
  • 忽略日志随容器销毁:json 日志位于容器目录,删除容器即丢失,采集必须抢在生命周期结束前
  • 在容器内取证却不说明范围:命名空间内的进程与网络视图不完整,结论不能代表宿主

数据来源与参考

  • Docker 官方文档(容器日志与存储驱动)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌