审计的思路
批量审计的做法是用一条格式化查询,把运行中容器的高危开关拉成清单:特权模式、宿主网络、宿主进程命名空间、附加能力与套接字挂载。先让现状可见,再按业务必要性逐项收敛。这类开关多数只能在创建时设定,收敛手段通常是停旧建新,而不是热改参数。
基本信息
| 审计点 | 特权模式、网络模式、进程命名空间、附加能力、挂载列表 |
|---|---|
| 时机 | 上线前抽查与定期巡检 |
| 处置方式 | 确认业务必要性后重建容器收敛 |
| 覆盖范围 | 运行中与已停止的容器都要纳入 |
| 输出形式 | 格式化查询生成清单便于分派 |
典型使用场景
- 上线前的配置抽查
- 定期巡检高风险开关
- 事故复盘时核对当时的容器配置
- 权限收敛项目的现状摸底
- 把构建与临时容器一并覆盖检查
批量拉清单
批量拉清单
docker ps -q | xargs -r docker inspect -f '{{.Name}} priv={{.HostConfig.Privileged}} net={{.HostConfig.NetworkMode}} pid={{.HostConfig.PidMode}} caps={{.HostConfig.CapAdd}}'
docker ps -q | xargs -r docker inspect -f '{{.Name}} {{range .Mounts}}{{.Source}}->{{.Destination}} {{end}}' | grep -i docker.sock || echo 'no socket mount'
docker ps -a --filter status=exited --format '{{.Names}}' | head # 已停止容器也要纳入清单审计点与收敛方向
| 审计点 | 风险 | 收敛方向 |
|---|---|---|
| 特权模式 | 权限面接近宿主高权限 | 改为按需放行能力 |
| 宿主网络模式 | 端口与网络隔离失效 | 改回自定义网络 |
| 宿主进程命名空间 | 可观察宿主进程 | 仅在调试场景保留 |
| 套接字挂载 | 可控制宿主运行时 | 用代理收敛可调用接口 |
高危开关大多只能在创建时设定,收敛手段一般是停旧建新,而不是热改参数。
除了运行中的容器,构建与已停止的临时容器同样要覆盖,它们在切换窗口里也持有这些权限。
巡检节奏建议
- 上线前对新增服务做一次配置抽查
- 每周或每月对存量容器做一轮全量清单
- 审计结果留档,便于对比历次变化与收敛进度
- 把收敛项纳入变更计划,按业务分组逐步推进
清单拉出来之后要先和业务方确认必要性,再决定是保留、收敛还是重建,避免直接按清单动手。