0.不要使用特权容器
描述
使用--privileged
标志将所有Linux内核功能赋予容器,从而覆盖--cap-add
和--cap-drop
标志。 确保不使用它。
--privileged
标志为容器提供了所有功能,并且还解除了设备cgroup控制器强制执行的所有限制。 换句话说,容器可以完成主机可以做的几乎所有事情。 存在此标志是为了允许特殊用例,例如在Docker中运行Docker
加固建议
不要使用--privileged
标志运行容器
11.限制容器之间的网络流量 描述 默认情况下,同一主机上的容器之间允许所有网络通信。 如果不需要,请限制所有容器间的通信。 将需要相互通信的特定容器链接在一起。默认情况下,同一主机上所有容器之间都启用了不受限制的网络流量。 因此,每个容器都有可能读取同一主机上整个容器网络上的所有数据包。 这可能会导致意外和不必要的信息泄露给其他容器。 因此,限制容器间的通信。
加固建议
在守护程序模式下运行docker并传递--icc = false
作为参数。 例如,
/usr/bin/dockerd --icc=false
若使用systemctl管理docker服务则需要编辑
/usr/lib/systemd/system/docker.service
文件中的ExecStart参数添加--icc=false
选项 然后重启docker服务
systemctl daemon-reload
systemctl restart docker
12.确认docker相关的文件具有合适的权限 描述 确保可能包含敏感参数的文件和目录的安全对确保Docker守护程序的正确和安全运行至关重要
加固建议 执行以下命令为docker相关文件配置权限:
代码语言:javascript复制chown root:root /usr/lib/systemd/system/docker.service
chmod 644 /usr/lib/systemd/system/docker.service
chown root:root /usr/lib/systemd/system/docker.socket
chmod 644 /usr/lib/systemd/system/docker.socket
chown root:root /etc/docker
chmod 755 /etc/docker
若文件路径与实际系统中不同可以使用以下命令获取文件路径:
systemctl show -p FragmentPath docker.socket
systemctl show -p FragmentPath docker.service
13.审核Docker文件和目录 描述 除了审核常规的Linux文件系统和系统调用之外,还审核所有与Docker相关的文件和目录。 Docker守护程序以“ root”特权运行。 其行为取决于某些关键文件和目录。如 /var/lib/docker、/etc/docker、docker.service、 docker.socket、/usr/bin/docker-containerd、/usr/bin/docker-runc等文件和目录
加固建议 在/etc/audit/audit.rules与/etc/audit/rules.d/audit.rules文件中添加以下行:
代码语言:javascript复制-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
然后,重新启动audit程序。 例如
service auditd restart
14.Docker未授权访问 描述 docker swarm 是一个将docker集群变成单一虚拟的docker host工具,使用标准的Docker API,能够方便docker集群的管理和扩展。如果端口开放公网访问且未设置认证,会导致代码泄露、获取服务器root权限的等漏洞。
加固建议 可以使用以下方法修复 限制Docker Remote API端口的公网访问,将端口绑定地址改为127.0.0.1 开启TLS,参照官方文档配置 Remote API 的认证措施