一、镜像安全:从源头降低风险
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),防止未授权访问。