一、镜像安全:从源头降低风险
nginx:latest
)或企业私有仓库的镜像,避免使用来源不明的第三方镜像;尽量采用精简版基础镜像(如带slim
标签的ubuntu:slim
或alpine
镜像),减少不必要的软件包和依赖,缩小攻击面。FROM golang:1.21 AS builder
编译代码,FROM alpine:latest
作为最终镜像复制编译产物),仅保留运行时必需的文件和依赖,进一步减小镜像体积和潜在漏洞。Clair
、Trivy
、Anchore
)定期扫描镜像,识别并修复操作系统、依赖库中的已知漏洞(如CVE),确保镜像安全。二、容器运行时安全:最小化权限与隔离
RUN useradd -m myuser
创建非root用户,使用USER myuser
指令切换用户运行应用,避免容器内进程以root身份执行(降低被提权攻击的风险)。--cap-drop ALL
关闭容器的所有内核能力(如CAP_SYS_ADMIN
、CAP_NET_ADMIN
),再按需添加必要能力(如--cap-add NET_BIND_SERVICE
允许绑定低端口),防止容器突破权限限制。--privileged
参数启动容器(该参数赋予容器几乎所有宿主机权限,如操作设备、加载内核模块),如需特殊权限,应通过--cap-add
按需分配。/proc
、/sys
、/dev
),如需挂载应使用--read-only
标志将容器文件系统设为只读,防止容器修改宿主机关键文件或逃逸。三、安全加固工具链:强化访问与行为控制
targeted
模式实施强制访问控制(MAC),限制容器对宿主机的资源访问;AppArmor通过配置文件(如docker-default
)限制容器能执行的系统调用,两者均能有效防止容器逃逸。--security-opt seccomp=/etc/docker/seccomp/profile.json
指定Seccomp配置文件,限制容器能调用的系统命令(如禁止mount
、chmod
等危险操作),减少系统调用带来的风险。四、访问与网络隔离:减少攻击面
/etc/docker/daemon.json
)绑定到127.0.0.1
,仅允许本地访问;若需远程访问,应启用TLS加密(生成证书并配置tlsverify
),并限制访问IP范围。docker network create mynet
)将不同业务容器划分到不同网络,避免不必要的横向通信;通过--network none
禁用容器网络,仅允许必要通信。DOCKER_CONTENT_TRUST=1
,确保拉取的镜像来自可信源(如Docker Hub官方仓库),防止篡改或恶意镜像。五、监控与审计:及时发现异常
docker logs -f <container_id>
定期查看容器日志,及时发现异常行为(如频繁重启、未授权访问)。Falco
等内核级审计工具,监控容器内的异常行为(如未授权的进程启动、网络连接、文件修改),并设置告警规则(如邮件、短信通知),快速响应安全事件。六、系统与Docker守护进程安全:基础环境加固
docker-ce
)和CentOS系统(如kernel
、glibc
)为最新版本,及时修复已知漏洞(如Docker的CVE-2024-21625
逃逸漏洞)。telnet
、ftp
),限制su
命令使用(仅允许wheel
组用户切换root),设置root账户自动注销时限(如TMOUT=300
),防止未授权访问。