【问题标题】:Docker - non-privileged user can write to / inside containerDocker - 非特权用户可以写入/容器内
【发布时间】:2016-10-25 09:54:22
【问题描述】:

我使用以下 Dockerfile 基于 centos:6.8 映像创建了一个容器:

FROM centos:6.8
RUN adduser -m test
USER test

然后使用 docker build 构建映像:

docker build -t dockerdemo .

然后我启动一个容器:

docker run -ti dockerdemo bash

当我在容器内时,我似乎能够以“测试”用户的身份写入容器的根目录:

[test@9af9c4aeb990 /]$ ls -ld /
drwxr-xr-x 29 root root 4096 Oct 25 09:49 /
[test@9af9c4aeb990 /]$ id -a
uid=500(test) gid=500(test) groups=500(test)
[test@9af9c4aeb990 /]$ touch /test-file
[test@9af9c4aeb990 /]$ ls -l /test-file
-rw-rw-r-- 1 test test 0 Oct 25 09:49 /test-file

我希望在运行touch 命令时看到Permission denied

如果我更改 Dockerfile 并删除 USER 语句并重建,那么我可以将 su 发送给容器内的“测试”用户,我会得到我期望的行为:

[root@d16277f693d8 /]# su - test
[test@d16277f693d8 ~]$ id      
uid=500(test) gid=500(test) groups=500(test)
[test@d16277f693d8 ~]$ ls -ld /    
drwxr-xr-x 29 root root 4096 Oct 25 09:50 /
[test@d16277f693d8 ~]$ touch /test-file
touch: cannot touch `/test-file': Permission denied

我是否误解了用户权限在容器内的工作方式?

有没有办法产生我的预期行为?

【问题讨论】:

  • 如果你通过侧门/后门进入“容器内部”,而不是正常进程(cmd/入口点)——你不是测试。做一个 whoami 来验证。
  • 我不太清楚您所说的“通过侧门/后门”是什么意思。我从“docker run -ti image-name bash”开始。
  • 我的意思是,如果您只是执行 docker run image-name,它会像宣传的那样工作。来自文档: USER 指令设置运行映像时使用的用户名或 UID,以及 Dockerfile 中跟随它的任何 RUN、CMD 和 ENTRYPOINT 指令。您正在运行没有上述任何内容的容器。
  • 我使用 docker run 来启动容器。我已经更新了原始描述,以便明确说明我使用的命令。

标签: permissions docker


【解决方案1】:

在 1.12.2 中宣布了一个与您的方案匹配的漏洞。 Release 1.12.3 昨天刚出来修复这个问题,CVE-2016-8867 被注册在这个漏洞上。这是一个内部容器权限提升,因此影响有限,但仍然值得升级。

【讨论】:

  • 我可以确认升级到 1.12.3 解决了我的问题!非常感谢。
猜你喜欢
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
相关资源
最近更新 更多