在CentOS系统中,Docker的安全配置需围绕镜像安全、运行时隔离、权限控制、通信加密、监控审计五大核心维度展开,以下是具体操作步骤及最佳实践:
ubuntu:latest等臃肿镜像,优先选择alpine(体积约5MB)、python:3.11-alpine等精简镜像,减少潜在漏洞。node:16-alpine)与运行环境(如node:16-alpine)隔离,仅将必要文件复制到最终镜像,避免包含编译工具等冗余组件。Trivy、docker scan(Docker Desktop内置)或Snyk定期扫描镜像,检测高危漏洞(如CVE-2021-44228)。可将扫描步骤集成到CI/CD流水线,设置“高危漏洞阻止部署”的安全门禁。--privileged模式:特权容器拥有宿主机级权限(如操作设备、加载内核模块),易被攻击者利用逃逸。若必须使用,需严格限制容器数量并通过--cap-drop ALL --cap-add NET_BIND_SERVICE仅授予必要能力。--cpus(如1核)、--memory(如512m)、--pids-limit(如100个进程)限制容器资源使用,防止恶意容器消耗宿主机全部资源。可通过docker run命令或docker-compose.yml(deploy.resources.limits)配置。--read-only参数将容器文件系统设为只读,避免容器修改系统文件或写入恶意代码。需为临时目录(如/tmp)挂载tmpfs(如tmpfs: /tmp:size=100M,mode=1777)以满足临时存储需求。RUN adduser -D -u 1001 appuser),并通过USER 1001切换至该用户运行进程。避免以root用户运行容器,减少宿主机权限泄露风险。docker组(sudo usermod -aG docker ${USER}),无需使用sudo即可运行Docker命令,但需注意docker组权限等同于root,建议仅授权必要用户。/etc/selinux/config确认SELINUX=enforcing,并通过--security-opt label:type:svirt_apache_t为容器指定SELinux类型,限制容器对宿主机资源的访问。/etc/docker/daemon.json添加TLS配置(如"tls": true, "tlscacert": "/usr/local/cacd/ca.pem"),重启Docker服务(systemctl restart docker)。强制客户端通过TLS连接,防止API通信被窃听或篡改。/etc/docker/daemon.json的"hosts"参数,仅允许可信IP访问(如"unix:///var/run/docker.sock", "tcp://192.168.1.100:2376"),并通过firewalld开放对应端口(sudo firewall-cmd --permanent --add-port=2376/tcp --zone=trusted)。docker network create --subnet=172.20.0.0/16 secure-network),将不同服务容器放入不同网络,限制容器间不必要的通信。通过--network参数指定容器所属网络。json-file),设置日志大小限制("max-size": "100m")和保留数量("max-file": "3"),便于后续分析容器异常行为。Falco监控容器内的异常行为(如未授权进程启动、网络连接至恶意IP),通过Kubernetes Audit Logs(若使用K8s)追踪容器生命周期事件。Docker Bench for Security(docker run --rm -it --net host --pid host --userns host --cap-add audit_control -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST docker/docker-bench-security)检查Docker环境是否符合CIS基准,及时修复不符合项。以上配置需根据实际业务场景调整(如生产环境需更严格的资源限制、网络隔离),并定期更新Docker引擎(sudo yum update docker-ce)及镜像,确保安全策略持续有效。