要监控docker容器敏感操作,需组合日志驱动(如journald)、docker events实时事件流、权限控制(如no-new-privileges)及osquery容器内进程监控,构建覆盖“谁、何时、对何容器、执行何高风险动作”的全链路可追溯、可告警审计体系。

要通过Docker守护进程的审计功能监控容器敏感操作,核心不是启用某个“内置审计开关”,而是组合日志驱动、事件流、权限控制与外部工具,构建可追溯、可告警的操作追踪链。关键在于捕获“谁在何时对哪个容器做了什么高风险动作”。
配置守护进程级日志驱动并标记敏感操作
Docker daemon本身不记录“用户执行了docker exec -it nginx sh”这类操作细节,但可通过日志驱动把所有API调用落地为结构化日志:
- 修改/etc/docker/daemon.json,强制使用
journald或syslog驱动,并添加审计标签:{ "log-driver": "journald", "log-opts": { "tag": "docker-audit" } } - 重启守护进程:
sudo systemctl restart docker - 之后所有
docker run、docker stop、docker exec、docker cp等命令都会以systemd journal条目形式记录,含调用者UID、时间戳、完整CLI参数 - 用
journalctl -t docker-audit -o json可导出供SIEM解析,重点过滤含exec、cp、commit、inspect --format的条目
实时捕获敏感生命周期事件
docker events是轻量级实时信号源,适合对接告警系统:
- 运行:
docker events --filter 'event=start' --filter 'event=exec_create' --filter 'event=kill' --format '{{.Time}} {{.Type}}/{{.Action}} {{.Actor.Attributes.name}}' - 该命令会输出类似:
2026-04-30T08:12:05.123Z container/exec_create nginx,明确标识交互式命令创建 - 配合
grep -E 'exec_create|kill|die'做管道过滤,再用curl推送到Webhook即可实现秒级告警 - 注意:需在宿主机以root运行,且
docker events默认不记录执行者用户名,需结合journal日志交叉验证
限制+记录特权操作行为
单纯记录不够,必须前置约束。敏感操作往往依赖特定权限:
- 禁止特权容器:
docker run --privileged应被策略拦截。可在daemon.json中设置"no-new-privileges": true,或用podman替代(默认更严格) - 禁用危险挂载:
docker run -v /host:/mnt类操作可通过AppArmor或SELinux策略拒绝,同时在audit log中留下avc: denied记录 - 监控
docker exec是否带-u root或--privileged参数:这些在journal日志中完整可见,是判断提权意图的关键指标
用osquery补全容器内行为证据
守护进程日志只管“API调用”,不管“容器内发生了什么”。osquery能填补这一断层:
- 部署osquery agent到宿主机,启用
docker_containers和docker_container_processes表 - 定时执行:
SELECT c.name, p.name, p.cmdline FROM docker_containers c JOIN docker_container_processes p ON c.id = p.container_id WHERE p.name IN ('sh','bash','python','nc','curl') AND c.state = 'running'; - 该查询直接暴露容器内是否启动了可疑shell或网络工具,与
exec_create事件联动,就能确认“某用户在某容器内启动了bash”这一完整链条











