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的安全性,覆蓋從鏡像構建到運行時監控的全生命周期安全管控。