Docker

适用范围:Docker Engine、单机容器部署、通过 Docker 承载中间件/应用的场景。

不适用标识说明:

  • 使用 【不适用】 明确标记现场可判定为不适用的控制点。
  • 判定依据采用 GB/T 28448-2019“按测评对象实际功能、是否直接处理数据、是否具备该类安全机制判定”的原则;Docker 主要是容器运行平台,很多业务性控制点需转由容器内应用或上层平台测评。

基础信息

核查命令

docker version
docker info
docker ps -a
docker inspect <容器名>
  • 备注:先确认 Docker 版本、数据根目录、容器清单、镜像来源、宿主机路径映射、网络模式和日志驱动。
  • 预期证据:版本截图、容器清单截图、镜像截图、宿主机路径与端口截图。
示例输出(节选)
Client: Docker Engine - Community
 Version:           24.0.7
Server: Docker Engine - Community
 Engine Version:    24.0.7
 Containers: 6  Images: 14
CONTAINER ID   IMAGE                    STATUS         NAMES
a1b2c3d4e5f6   redis:7.2-alpine         Up 30 days     demo-redis
f6e5d4c3b2a1   nginx:1.24-alpine        Up 30 days     demo-web

身份鉴别

A. Docker API 与管理入口

核查命令

ps -ef | grep dockerd
ss -lntp | grep 2375\\|2376
  • 备注:重点核查远程 Docker API 是否开放、是否启用 TLS、是否仅限管理网访问。
  • 预期证据:监听端口截图、启动参数截图、TLS 配置截图。
示例输出(节选)
root  1122  dockerd
ss 输出:
LISTEN 0 128 127.0.0.1:2376  users:(("dockerd",pid=1122))
(未监听 0.0.0.0:2375,远程 API 走 TLS 2376)

B. 容器内管理账户

核查命令

docker exec <容器名> cat /etc/passwd
  • 备注:容器中的中间件管理账户仍需按其自身主脚本核查;本脚本重点关注 Docker 平台层。
  • 【不适用】若测评对象仅限定为 Docker Engine 平台层,则“容器内业务账号身份鉴别”不属于 Docker 平台本体控制范围,可判定为不适用并转由容器内组件测评。依据:GB/T 28448-2019 要求按测评对象边界实施判定。
  • 预期证据:容器用户截图、平台说明、访谈记录。
示例输出(节选)
docker exec demo-web cat /etc/passwd(节选)
root:x:0:0:root:/root:/bin/sh
appuser:x:1000:1000::/home/appuser:/sbin/nologin
(容器内以非 root 用户 appuser 运行主进程)

C. 身份源与访问认证

核查命令

docker info | grep -i -E "Username|Registry"
  • 备注:如接入私有仓库、统一认证平台或 CI/CD 发布平台,应同步核查账号、令牌和权限策略。
  • 【不适用】若现场未启用远程 Docker API、未接入私有仓库认证、也不存在独立 Docker 平台账号体系,则“平台账户口令复杂度/锁定”可判定为不适用。理由:平台本体不存在独立交互式账号体系。依据:GB/T 28448-2019 身份鉴别控制点按实际鉴别机制判定。
  • 预期证据:仓库登录材料、平台账户截图、制度。
示例输出(节选)
Username: demoregistry
Registry: https://registry.demo.local/v2/
docker info | grep Registry 生效

D. 运维鉴别链路

核查命令

grep -R "hosts" /etc/docker 2>/dev/null
  • 备注:平台运维应通过堡垒机、VPN、TLS 客户端证书等方式保护。
  • 预期证据:堡垒机材料、TLS 证书、远程运维制度。
示例输出(节选)
/etc/docker/daemon.json: "hosts": ["unix:///var/run/docker.sock", "tcp://192.168.10.5:2376"]
(TCP 监听仅绑定内网地址并启用 TLS)

访问控制

A. 容器权限与特权运行

核查命令

docker inspect <容器名> | grep -i -E "Privileged|CapAdd|User|ReadonlyRootfs"
  • 备注:避免无必要的 --privileged、宿主机目录过度挂载、root 运行。
  • 预期证据:容器配置截图、运行参数截图。
示例输出(节选)
docker inspect demo-web(节选)
"Privileged": false,
"CapAdd": null,
"User": "appuser",
"ReadonlyRootfs": true,

B. 网络与端口暴露

核查命令

docker port <容器名>
docker inspect <容器名> | grep -i HostPort
  • 备注:区分管理端口和业务端口,限制对外暴露范围。
  • 预期证据:端口映射截图、网络策略截图。
示例输出(节选)
demo-web -> 0.0.0.0:8443->8443/tcp
"HostPort": "8443"
(仅映射业务必需端口,未暴露管理端口)

C. 镜像与容器最小化

核查命令

docker images
docker exec <容器名> ls /
  • 备注:未使用镜像、测试容器、调试工具容器应清理;容器镜像尽量最小化。
  • 预期证据:镜像清单截图、处置说明。
示例输出(节选)
REPOSITORY          TAG          SIZE
redis               7.2-alpine   41MB
nginx               1.24-alpine  66MB
demo-app            v2.3.1       210MB
docker exec demo-web ls /(节选)
bin  etc  home  opt  usr  var

D. 宿主机文件权限

核查命令

ls -ld /var/lib/docker /etc/docker 2>/dev/null
  • 备注:数据目录、配置目录和 docker.sock 权限需重点关注。
  • 预期证据:权限截图、运行用户截图。
示例输出(节选)
ls -ld /var/lib/docker /etc/docker
drwx--x--- 12 root root /var/lib/docker
drwx------  2 root root /etc/docker
-rw-------  1 root root daemon.json

安全审计

A. 守护进程日志

核查命令

journalctl -u docker --no-pager | tail -n 50
  • 备注:核查 Docker 守护进程日志、启动异常、配置变更和 API 访问痕迹。
  • 预期证据:日志截图、服务状态截图。
示例输出(节选)
journalctl -u docker --no-pager | tail(节选)
Aug 24 09:12:01 host systemd[1]: Starting Docker Application Container Engine...
Aug 24 09:12:02 host dockerd[1122]: time="2026-08-24T09:12:02" level=info msg="API listen on /var/run/docker.sock"
Aug 24 10:03:11 host dockerd[1122]: time=... level=warning msg="Health check for container demo-redis error" 

B. 容器日志

核查命令

docker logs --tail 50 <容器名>
  • 备注:容器业务日志应结合容器内中间件主脚本继续核查。
  • 预期证据:日志样例、日志驱动配置截图。
示例输出(节选)
docker logs --tail 50 demo-redis(节选)
1:M 24 Aug 2026 10:01:02.001 * Ready to accept connections tcp
1:M 24 Aug 2026 10:04:33.118 # Background saving terminated with success
1:M 24 Aug 2026 10:06:01.554 * DB saved on disk

C. 日志留存与集中化

核查命令

docker info | grep -i "Logging Driver"
  • 备注:日志驱动为 json-filejournaldsyslog 等时,需确认保留周期和汇聚策略。
  • 预期证据:日志驱动截图、平台材料、制度。
示例输出(节选)
Logging Driver: json-file
(daemon.json 中配置 max-size=50m、max-file=5,防止磁盘占满)

D. 运维行为审计

核查命令

last
journalctl --no-pager | grep docker | tail -n 50
  • 备注:Docker 平台运维一般需依赖堡垒机、主机审计、CI/CD 平台综合判断。
  • 预期证据:堡垒机截图、主机审计截图、平台工单。
示例输出(节选)
last | head
deployer pts/1  192.168.20.31  Fri Aug 22 14:20 - 15:02
journalctl | grep docker(节选)
Aug 22 14:25:03 host sudo: deployer : TTY=pts/1 ; COMMAND=/usr/bin/docker restart demo-web

数据完整性

A. 镜像与配置完整性

核查命令

docker inspect <镜像名或容器名>
cat /etc/docker/daemon.json 2>/dev/null
  • 备注:镜像来源、仓库签名、配置变更和发布审批应可追溯。
  • 预期证据:镜像来源截图、仓库材料、变更记录。
示例输出(节选)
docker inspect demo-web(节选)
"Image": "sha256:9c7f...",
"RestartPolicy": {"Name": "unless-stopped"}
cat /etc/docker/daemon.json
{"log-driver":"json-file","log-opts":{"max-size":"50m","max-file":"5"},"registry-mirrors":["https://registry.demo.local"]}

B. 挂载与数据一致性

核查命令

docker inspect <容器名> | grep -i -E "Mounts|Source|Destination"
  • 备注:重点关注配置卷、数据卷、日志卷挂载是否清晰、是否可恢复。
  • 预期证据:挂载截图、架构说明。
示例输出(节选)
docker inspect demo-web | Mounts(节选)
"Source": "/data/app/config", "Destination": "/etc/app", "Mode": "ro"
"Source": "/data/logs/web", "Destination": "/var/log/nginx"
(挂载目录宿主侧权限已最小化,config 只读)

数据保密性

A. Docker API 与仓库加密

核查命令

grep -R "insecure-registries\\|tlscacert\\|tlscert\\|tlskey" /etc/docker 2>/dev/null
  • 备注:避免明文 API 和不安全仓库;私有仓库通信建议启用 TLS。
  • 预期证据:TLS 配置截图、仓库 HTTPS 截图。
示例输出(节选)
/etc/docker/daemon.json: "insecure-registries": [],
/etc/docker/daemon.json: "tlscacert": "/etc/docker/ca.pem",
/etc/docker/daemon.json: "tlscert": "/etc/docker/demo-host-cert.pem",
/etc/docker/daemon.json: "tlskey": "/etc/docker/demo-host-key.pem",

B. 敏感环境变量与密钥

核查命令

docker inspect <容器名> | grep -i -E "Env|Secret"
  • 备注:环境变量中明文口令、令牌、数据库连接串应重点关注。
  • 预期证据:脱敏截图、密钥管理说明。
示例输出(节选)
docker inspect demo-web | Env(节选)
"REDIS_PASSWORD=***",
"APP_TOKEN=***"
(敏感变量经 docker secret/env-file 注入且文件权限 600,未在镜像层固化)

备份恢复

A. 配置与编排文件备份

核查命令

find /etc/docker -type f 2>/dev/null
  • 备注:应覆盖 daemon.json、镜像拉取配置、编排文件、挂载目录配置。
  • 预期证据:配置备份截图、备份策略。
示例输出(节选)
/etc/docker/daemon.json
/etc/docker/ca.pem
/etc/docker/certs.d/registry.demo.local/ca.crt
/etc/docker/key.json

B. 镜像、卷和日志备份

核查命令

docker volume ls
docker inspect <容器名> | grep -i Mounts
  • 备注:应说明镜像获取方式、卷备份方式、日志归档方式。
  • 预期证据:卷清单截图、备份目录截图、平台材料。
示例输出(节选)
local      demo-data      bridge
docker inspect demo-web | Mounts(节选)
"Type": "volume", "Name": "demo-data", "Destination": "/var/lib/redis

C. 恢复与重建

核查命令

docker ps -a
  • 备注:容器场景可通过镜像重建、卷恢复、编排重启证明恢复能力。
  • 预期证据:恢复手册、演练记录、CI/CD 或编排材料。
示例输出(节选)
CONTAINER ID   IMAGE                 STATUS                      NAMES
a1b2c3d4e5f6   redis:7.2-alpine      Up 30 days                  demo-redis
d9c8b7a6f5e4   old-demo-app:v1       Exited (0) 32 days ago      demo-app-old
(存在长期 Exited 容器,应定期清理)

剩余信息保护

A. 停用容器与旧镜像

核查命令

docker ps -a
docker images
  • 备注:已停用容器、历史镜像、测试镜像和调试容器应及时清理。
  • 预期证据:清理前后截图、处置说明。
示例输出(节选)
docker ps -a:见上,1 个 Exited 旧容器
docker images:
old-demo-app   v1   210MB   8 months ago
(存在 8 个月前的旧镜像,应纳入清理计划)

B. 凭据残留

核查命令

docker inspect <容器名> | grep -i -E "password|token|secret"
  • 备注:镜像层、环境变量、挂载文件中的敏感信息残留应重点核查。
  • 预期证据:脱敏截图、整改说明。
示例输出(节选)
docker inspect demo-web | grep -i password/token(节选)
"REDIS_PASSWORD=***"
(未发现明文敏感值;环境变量经受控 env-file 注入)

个人信息保护

A. 容器日志与环境变量中的个人信息

核查命令

docker logs --tail 100 <容器名>
  • 备注:Docker 层面通常不直接处理个人信息,但容器日志和环境变量可能承载敏感数据。
  • 【不适用】若测评对象仅为 Docker 引擎平台,且不直接保存业务日志、业务数据或个人信息,相关个人信息处理完全发生在容器内应用,则该点对 Docker 平台层可判定为不适用。依据:GB/T 28448-2019 个人信息保护控制点针对实际处理个人信息的对象。
  • 预期证据:日志脱敏截图、访谈记录。
示例输出(节选)
docker logs --tail 100 demo-web(节选)
192.168.1.23 - - [24/Aug/2026:10:01:11 +0800] "GET /healthz HTTP/1.1" 200 2
192.168.1.45 - - [24/Aug/2026:10:01:15 +0800] "POST /api/login HTTP/1.1" 200 96
(容器日志经 json-file 驱动轮转并采集至日志平台)

B. 数据卷与导出控制

核查命令

docker inspect <容器名> | grep -i Mounts
  • 备注:挂载目录、导出脚本和镜像打包流程应关注个人信息扩散风险。
  • 【不适用】若 Docker 平台不提供面向运维人员的个人信息查询、导出、共享功能,且卷内数据由容器内应用独立管理,则该点对平台层可判定为不适用。依据:GB/T 28448-2019 按对象实际业务处理功能判定。
  • 预期证据:挂载目录截图、权限说明、制度。
示例输出(节选)
docker inspect demo-web | Mounts(节选)
"Source": "/data/logs/web", "Destination": "/var/log/nginx", "Mode": "rw"
(日志目录持久化到宿主机,便于留存与备份)

入侵防范

A. Docker API 与高危暴露

核查命令

ss -lntp | grep 2375\\|2376
ps -ef | grep dockerd
  • 备注:重点核查未加密远程 API、无认证开放、docker.sock 暴露和越权调用风险。
  • 预期证据:端口截图、启动参数截图、权限截图。
示例输出(节选)
ss -lntp | grep 2375|2376
LISTEN 0 128 127.0.0.1:2376 users:(("dockerd",pid=1122))
ps -ef | grep dockerd
root  1122  dockerd --tlsverify
(远程 API 未开放 2375 明文端口)

B. 特权容器与逃逸风险

核查命令

docker inspect <容器名> | grep -i -E "Privileged|CapAdd|PidMode|NetworkMode|ReadonlyRootfs"
  • 备注:应重点核查特权容器、宿主机目录敏感挂载、过高能力和逃逸面。
  • 预期证据:容器配置截图、挂载截图、处置说明。
示例输出(节选)
docker inspect demo-web(节选)
"Privileged": false,
"CapAdd": null,
"PidMode": "host" 未出现,
"NetworkMode": "bridge",
"ReadonlyRootfs": true,

C. 镜像与组件漏洞风险

核查命令

docker images
docker info
  • 备注:关注基础镜像长期未更新、来源不明、存在高危漏洞或未经基线加固的情况。
  • 预期证据:镜像清单截图、漏洞扫描/整改记录。
示例输出(节选)
docker images
redis  7.2-alpine  41MB
nginx  1.24-alpine 66MB
docker info(节选)
 Server Version: 24.0.7
 Storage Driver: overlay2
 Live Restore Enabled: true

D. 运行时防护与告警

核查命令

journalctl -u docker --no-pager | tail -n 50
  • 备注:容器入侵防范通常依赖主机防护、镜像扫描、运行时安全平台和日志告警联动。
  • 预期证据:运行时安全平台截图、告警记录、主机防护材料。
示例输出(节选)
journalctl -u docker --no-pager | tail(节选)
Aug 24 09:12:01 host systemd[1]: Started Docker Application Container Engine.
Aug 24 09:12:02 host dockerd[1122]: level=info msg="Loading containers: start."
(Docker 运行日志进入 journald 并由 rsyslog 上送日志平台,保留 180 天)