我创建了一个容器,基于centos:6.8图像使用以下Dockerfile:
FROM centos:6.8
RUN adduser -m test
USER test
然后使用docker build构建图像:
docker build -t dockerdemo .
然后我用:
启动一个容器docker run -ti dockerdemo bash
当我在容器内时,我似乎能够将“test”用户写入容器的根目录:
[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
我希望在运行Permission denied
命令时看到touch
。
如果我改变Dockerfile
并删除USER
语句并重建,那么我可以su
到容器内的“test”用户,我得到了我期望的行为:
[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
我是否误解了用户权限在容器内的工作方式?
有没有办法产生我预期的行为?
答案 0 :(得分:1)
在1.12.2中宣布了一个漏洞,您的场景匹配。 Release 1.12.3昨天刚刚出来修复此问题,并在此漏洞上注册了CVE-2016-8867。它是一个内部容器权限升级,影响有限,但仍值得升级。