在Ubuntu中使用Docker时,确保安全是非常重要的。以下是一些关键的安全设置和最佳实践:
默认情况下,Docker守护进程以root用户身份运行。为了提高安全性,建议创建一个专门的用户来运行Docker命令。
sudo usermod -aG docker $USER
然后重新登录以使更改生效。
编辑Docker守护进程的配置文件 /etc/docker/daemon.json
,添加以下内容以增强安全性:
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"insecure-registries": [],
"registry-mirrors": [],
"debug": false,
"experimental": false,
"features": {
"buildkit": true
}
}
为了保护Docker守护进程和客户端之间的通信,可以配置TLS加密。
mkdir -p /etc/docker/certs.d
cd /etc/docker/certs.d
# 生成CA证书
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca-cert.pem
# 生成服务器证书
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=localhost" -sha256 -new -key server-key.pem -out server-csr.pem
openssl x509 -req -days 365 -sha256 -in server-csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
# 生成客户端证书
openssl genrsa -out key.pem 4096
openssl req -subj "/CN=client" -new -key key.pem -out client-csr.pem
openssl x509 -req -days 365 -sha256 -in client-csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem
编辑 /etc/docker/daemon.json
,添加以下内容:
{
"tls": true,
"tlscacert": "/etc/docker/certs.d/ca-cert.pem",
"tlscert": "/etc/docker/certs.d/server-cert.pem",
"tlskey": "/etc/docker/certs.d/server-key.pem",
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"]
}
重启Docker守护进程:
sudo systemctl restart docker
在客户端机器上,创建或编辑 ~/.docker/config.json
文件,添加以下内容:
{
"tls": true,
"tlscacert": "/etc/docker/certs.d/ca-cert.pem",
"tlscert": "/etc/docker/certs.d/cert.pem",
"tlskey": "/etc/docker/certs.d/key.pem"
}
使用 ufw
或其他防火墙工具限制对Docker守护进程的访问。
sudo ufw allow 2375/tcp
sudo ufw enable
定期更新Docker和容器镜像以修复已知的安全漏洞。
sudo apt-get update
sudo apt-get upgrade docker-ce docker-ce-cli containerd.io
使用工具如 Trivy
或 Clair
对容器镜像进行安全扫描。
sudo apt-get install trivy
trivy filesystem /var/lib/docker/aufs/mounts/<container-id>/overlay2/layers/<layer-id>
在运行容器时,尽量使用非特权用户,并限制容器的权限。
docker run --rm -u 1000:1000 -v /path/to/host:/path/to/container myimage
通过遵循这些安全设置和最佳实践,可以显著提高在Ubuntu中使用Docker的安全性。