在CentOS系統上部署Docker時,需通過操作系統配置、容器運行時加固、鏡像管理、網絡與權限控制等多維度措施,降低安全風險。以下是具體實施步驟:
/etc/selinux/config
中SELINUX=enforcing
(若為disabled
需重啟系統生效),并通過setsebool -P docker_isolation 1
啟用Docker專用SELinux布爾值。docker
組并生效:sudo usermod -aG docker ${USER}
su - ${USER} # 注銷重新登錄
sudo yum update docker-ce docker-ce-cli containerd.io
更新Docker至最新版本。daemon.json
文件:編輯/etc/docker/daemon.json
,優化守護進程行為:{
"exec-opts": ["native.cgroupdriver=systemd"], // 使用systemd管理cgroup
"log-driver": "json-file",
"log-opts": {"max-size": "100m", "max-file": "3"}, // 限制日志大小
"storage-driver": "overlay2", // 推薦存儲驅動
"insecure-registries": [], // 禁用不安全倉庫
"debug": false, // 關閉調試模式
"userns-remapping": "default" // 啟用用戶命名空間隔離
}
重啟Docker使配置生效:sudo systemctl restart docker
。--cpus
、--memory
、--pids-limit
參數限制容器資源占用,防止單個容器耗盡宿主機資源:docker run -it --cpus=1 --memory=512m --pids-limit=100 ubuntu
--privileged
參數(賦予容器root權限),并通過--cap-drop
刪除不必要的能力(如ALL
),僅添加必需的權限(如NET_BIND_SERVICE
):docker run -it --cap-drop ALL --cap-add NET_BIND_SERVICE ubuntu
nginx:alpine
),采用多階段構建減少鏡像體積(移除編譯工具等無用組件);運行前通過Trivy
、Clair
等工具掃描鏡像漏洞。firewalld
限制Docker守護進程端口(默認2375/tcp
)訪問,僅允許可信IP:sudo firewall-cmd --permanent --zone=trusted --add-service=docker
sudo firewall-cmd --reload
bridge
網絡,創建自定義網絡(如my-network
),將不同業務容器隔離到不同網絡,限制橫向滲透:docker network create --driver bridge my-network
docker run --network=my-network -d nginx
export DOCKER_CONTENT_TRUST=1
docker pull nginx:latest # 僅拉取帶簽名的鏡像
Docker Secrets
(適用于Swarm模式)或環境變量掛載(如-v ./secrets:/run/secrets
)管理。/proc
、/sys
、/dev
等宿主機關鍵目錄掛載到容器內,如需掛載需設置為只讀:docker run -v /host/data:/data:ro -it ubuntu
docker-compose.yml
或run
命令中添加healthcheck
指令,定期檢查容器狀態(如Nginx是否響應):services:
web:
image: nginx
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
cAdvisor
+Prometheus
+Grafana
監控容器資源使用情況;用Falco
監控容器內異常行為(如未授權進程啟動、網絡異常),及時告警。以上措施覆蓋了CentOS系統下Docker安全的核心環節,需根據實際業務場景調整(如生產環境需啟用TLS加密Docker API通信)。定期審查安全策略,應對新出現的安全威脅。