gpt4 book ai didi

Docker root 访问主机系统

转载 作者:IT老高 更新时间:2023-10-28 12:43:12 25 4
gpt4 key购买 nike

当我以普通用户身份运行容器时,我可以在我的主机文件系统上映射 和修改 root 拥有的目录。这似乎是一个很大的安全漏洞。例如,我可以执行以下操作:

$ docker run -it --rm -v /bin:/tmp/a debian
root@14da9657acc7:/# cd /tmp/a
root@f2547c755c14:/tmp/a# mv df df.orig
root@f2547c755c14:/tmp/a# cp ls df
root@f2547c755c14:/tmp/a# exit

现在我的 host 文件系统将在输入 df 时执行 ls 命令(大部分是无害的示例)。我不敢相信这是理想的行为,但它正在我的系统中发生(debian 拉伸(stretch))。 docker 命令有正常权限(755,不是setuid)。

我错过了什么?

也许再澄清一点是件好事。目前我对容器本身的功能或功能不感兴趣,也不关心容器内的根访问权限。

相反,我注意到我系统上任何可以运行 docker 容器的人都可以使用它来获得对我的 主机 系统的 root 访问权限,并以 root 身份读/写他们想要的任何内容:有效地为所有用户提供 root使用权。这显然不是我想要的。如何预防?

最佳答案

有许多 Docker 安全功能可用于帮助解决 Docker 安全问题。对您有帮助的具体方法是用户命名空间。

基本上,您需要在预先停止 Docker 守护程序的主机上启用用户命名空间:

dockerd --userns-remap=default &

请注意,这将禁止容器在特权模式下运行(从安全角度来看这是一件好事)并重新启动 Docker 守护程序(在执行此命令之前应该将其停止)。进入 Docker 容器时,可以将其限制为当前非特权用户:

docker run -it --rm -v /bin:/tmp/a --user UID:GID debian

不管怎样,之后尝试使用你的默认命令进入 Docker 容器

docker run -it --rm -v /bin:/tmp/a debian

如果您尝试操作映射到 Docker 卷(在本例中为 /bin)的主机文件系统,其中文件和目录由 root 拥有,那么您将收到 Permission拒绝错误。这证明用户命名空间提供了您正在寻找的安全功能。

我建议通过 https://github.com/docker/labs/tree/master/security/userns 上的 Docker 实验室了解此安全功能。 .我已经完成了所有的实验室,并在那里打开了问题和 PR,以确保那里的实验室的完整性并可以为他们担保。

关于Docker root 访问主机系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41991905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com