Docker安全设置Debian上如何实现
导读:Debian 上 Docker 安全设置实操指南 一 主机与守护进程加固 保持 Docker 为最新稳定版,仅允许受信任用户加入 docker 组,避免将生产主机暴露给不可信账户。 配置 TLS 远程访问(禁用明文端口 2375):生成...
Debian 上 Docker 安全设置实操指南
一 主机与守护进程加固
- 保持 Docker 为最新稳定版,仅允许受信任用户加入 docker 组,避免将生产主机暴露给不可信账户。
- 配置 TLS 远程访问(禁用明文端口 2375):生成 CA/服务器/客户端证书,编辑 /etc/docker/daemon.json 启用 TLS,仅在内网或经跳板机开放端口 2376。
- 限制容器间通信与提升隔离:设置 “icc”: false,启用 “userns-remap”: “default” 实现用户命名空间隔离。
- 强化容器默认能力:启用 “no-new-privileges”: true,并通过 ulimits 限制资源(如文件句柄)。
- 日志与故障韧性:使用 json-file 日志驱动并配置 max-size/max-file,开启 “live-restore”: true 减少守护进程重启对业务的影响。
- 文件与目录权限:确保 /etc/docker、docker.service、docker.socket 等关键文件归 root:root 且权限为 644/755,降低被篡改风险。
- 审计关键文件与目录:对 /var/lib/docker、/etc/docker、docker.service/socket、/usr/bin/docker-containerd、/usr/bin/docker-runc 等配置审计规则,持续记录变更。
二 远程访问与网络控制
- 优先采用 Unix socket 本地管理;如确需远程,务必使用 TLS 并限制来源 IP(防火墙或跳板机)。
- 若临时使用 TCP 并需白名单,可通过 Nginx Stream 反向代理到本地 2375/2376,在 Nginx 层配置 allow/deny 实现 IP 白名单,避免直接暴露 Docker API。
- 默认禁用容器间通信(icc=false),按需通过自定义网络或显式链接控制通信域,降低横向移动风险。
- 避免使用默认 docker0 网桥,优先创建用户自定义网络并配合端口映射与防火墙策略进行最小暴露。
三 镜像与供应链安全
- 仅使用受信任/官方基础镜像,优先选择最小化发行版(如 Alpine),减少攻击面。
- 固定镜像版本标签(避免仅用 latest),并在 CI 中执行漏洞扫描(如 Trivy/Clair),未修复的高危漏洞镜像禁止上线。
- 启用 Docker Content Trust(DCT):执行 export DOCKER_CONTENT_TRUST=1,确保镜像标签的完整性与发布者可验证。
- 禁止在镜像或 Dockerfile 中硬编码密钥/凭证,使用 Secrets 或外部密钥管理服务;删除镜像中不必要的 setuid/setgid 与软件包。
四 容器运行时最小权限
- 以非 root 运行:在 Dockerfile 中创建普通用户并使用 USER,或在运行期通过 –user 指定 UID/GID。
- 移除不必要的 Linux Capabilities:默认 cap_drop: ALL,仅按需 cap_add(如 CHOWN/SETGID/SETUID)。
- 禁止特权容器:不使用 –privileged;必要时以更细粒度能力替代。
- 根文件系统与临时目录:设置 read_only: true,对 /tmp 使用 tmpfs 并配置 noexec,nosuid。
- 资源与进程限制:设置 memory/CPU 限额与 pids-limit,防止资源耗尽与 fork 炸弹。
- 系统调用与强制访问控制:使用 seccomp 白名单与 AppArmor 配置文件(如 docker-default),仅放行必需系统调用与访问路径。
- 安全运维规范:不在容器内运行 sshd;避免映射特权端口(< 1024);谨慎挂载主机敏感目录(尤其可写)。
五 一键可用的最小加固示例
- 守护进程配置(/etc/docker/daemon.json)
{
"icc": false,
"userns-remap": "default",
"no-new-privileges": true,
"default-ulimits": {
"nofile": {
"Name": "nofile", "Soft": 64000, "Hard": 64000 }
}
,
"log-driver": "json-file",
"log-opts": {
"max-size": "10m", "max-file": "3" }
,
"live-restore": true,
"tls": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem",
"tlsverify": true
}
- 用户命名空间映射(启用后重启 Docker)
sudo groupadd -g 500000 dockremap
sudo useradd -u 500000 -g dockremap -s /bin/false dockremap
echo "dockremap:500000:65536" | sudo tee /etc/subuid
echo "dockremap:500000:65536" | sudo tee /etc/subgid
sudo systemctl restart docker
- 运行容器的最小权限模板
docker run -d --name app \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=10M \
--ulimit nofile=100:200 --pids-limit=50 \
--security-opt no-new-privileges:true \
--security-opt apparmor=docker-default \
--cap-drop ALL --cap-add CHOWN --cap-add SETGID --cap-add SETUID \
-u 10000:10000 \
your-registry/your-app:1.2.3
- 镜像扫描与内容信任
# 安装 Trivy
sudo apt-get update &
&
sudo apt-get install -y trivy
# 扫描镜像
trivy image your-registry/your-app:1.2.3
# 启用内容信任
export DOCKER_CONTENT_TRUST=1
- 审计规则示例(/etc/audit/rules.d/docker.rules)
-w /var/lib/docker -k docker
-w /etc/docker -k docker
-w /usr/lib/systemd/system/docker.service -k docker
-w /usr/lib/systemd/system/docker.socket -k docker
-w /usr/bin/docker-containerd -k docker
-w /usr/bin/docker-runc -k docker
应用后执行:service auditd restart。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Docker安全设置Debian上如何实现
本文地址: https://pptw.com/jishu/762219.html
