Docker在CentOS上的安全配置需覆盖系统层、镜像层、运行时层、网络层及监控层,以下是具体实现步骤:
更新Docker至最新版本
旧版本可能存在未修复的安全漏洞,需定期通过yum更新:
sudo yum update docker-ce docker-ce-cli containerd.io
配置SELinux(若启用)
SELinux可限制容器对主机资源的访问,确保其处于enforcing模式并配置Docker兼容参数:
# 检查SELinux状态(应为enforcing)
getenforce
# 若未启用,修改配置文件
sed -i "s/^SELINUX=.*/SELINUX=enforcing/g" /etc/selinux/config
# 允许Docker访问网络
setsebool -P docker_isolation 1
使用非root用户运行Docker
避免直接以root身份操作Docker,创建专用用户并加入docker组:
sudo adduser dockeruser # 创建用户
sudo usermod -aG docker dockeruser # 加入docker组
su - dockeruser # 切换用户(需注销重新登录生效)
使用可信镜像
优先选择Docker官方镜像(如nginx:alpine)或企业私有仓库镜像,避免使用latest标签(不稳定):
docker pull nginx:1.25-alpine # 指定版本+精简标签
最小化镜像攻击面
alpine或slim版本镜像(如python:3.9-alpine);curl、git)。定期扫描镜像漏洞
使用Trivy或Clair扫描镜像中的已知漏洞:
# 安装Trivy
wget https://github.com/aquasecurity/trivy/releases/download/v0.50.0/trivy_0.50.0_Linux-64bit.deb
sudo dpkg -i trivy_0.50.0_Linux-64bit.deb
# 扫描镜像
trivy image nginx:1.25-alpine
限制容器资源使用
通过cgroups限制容器的CPU、内存及进程数,防止单个容器耗尽主机资源:
docker run -d --name my_nginx \
--cpus="1" \ # 限制1核CPU
--memory="512m" \ # 限制512MB内存
--pids-limit="100" \ # 限制100个进程
nginx:1.25-alpine
权限最小化
root用户运行,在Dockerfile中创建非root用户:FROM nginx:1.25-alpine
RUN adduser -D myuser # 创建非root用户
USER myuser # 切换至非root用户
CMD ["nginx", "-g", "daemon off;"]
mount、sys_admin):docker run -d --name my_nginx --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx:1.25-alpine
启用Docker Content Trust(DCT)
确保仅拉取和运行经过签名的镜像,防止篡改:
export DOCKER_CONTENT_TRUST=1 # 临时生效
# 或写入~/.bashrc永久生效
echo 'export DOCKER_CONTENT_TRUST=1' >> ~/.bashrc
source ~/.bashrc
配置防火墙规则
使用firewalld限制对Docker API(默认端口2375/tcp)的访问,仅允许可信IP:
sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.1.100 # 允许特定IP
sudo firewall-cmd --permanent --add-service=docker # 允许Docker服务
sudo firewall-cmd --reload
使用自定义网络隔离
避免容器直接使用bridge网络,创建自定义网络实现逻辑隔离:
docker network create my_app_net # 创建自定义网络
docker run -d --name app1 --network my_app_net nginx:1.25-alpine
docker run -d --name app2 --network my_app_net nginx:1.25-alpine
保护Docker API
若需远程访问Docker API,启用TLS加密(生成证书并配置daemon.json):
mkdir -p /etc/docker/certs
# 生成CA、服务器证书(略,参考OpenSSL文档)
# 编辑daemon.json
cat > /etc/docker/daemon.json <<EOF
{
"tls": true,
"tlscacert": "/etc/docker/certs/ca.pem",
"tlscert": "/etc/docker/certs/server-cert.pem",
"tlskey": "/etc/docker/certs/server-key.pem",
"hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"]
}
EOF
systemctl restart docker
启用详细日志
配置Docker日志驱动及大小限制,便于排查问题:
cat > /etc/docker/daemon.json <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m", # 单个日志文件最大100MB
"max-file": "3" # 保留3个日志文件
}
}
EOF
systemctl restart docker
使用安全监控工具
curl -LO https://raw.githubusercontent.com/docker/docker-ce/master/contrib/security/docker-bench-security.sh
chmod +x docker-bench-security.sh
sudo ./docker-bench-security.sh
# 安装Falco(参考官方文档)
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm install falco falcosecurity/falco
/etc、/root等目录挂载到容器中;docker commit或docker export备份重要容器数据;通过以上措施,可显著提升CentOS环境下Docker的安全性,覆盖从镜像构建到运行时监控的全生命周期安全管控。