赞
踩
其本质是LINUX内核的no_new_privs标志位,Docker之后支持该标志位的设置,当该标志位设置的时候,SUID不再生效,既之前通过LINUX权限划分出的粗粒度产物SUID权限,当拥有SUID权限的程序,在执行时,会拥有ROOT权限,通过设置该标志位就可以杜绝掉这种情况,我们可以看下列实验
在未设置该标志位的docker中,可以提权成功,find通过chmod u+s设置了suid位
- test@435d596c0b05:/$ find 1 -exec cat /etc/shadow \;
- root:*:19110:0:99999:7:::
- daemon:*:19110:0:99999:7:::
- bin:*:19110:0:99999:7:::
- sys:*:19110:0:99999:7:::
- sync:*:19110:0:99999:7:::
- games:*:19110:0:99999:7:::
- man:*:19110:0:99999:7:::
- lp:*:19110:0:99999:7:::
- mail:*:19110:0:99999:7:::
- news:*:19110:0:99999:7:::
- uucp:*:19110:0:99999:7:::
- proxy:*:19110:0:99999:7:::
- www-data:*:19110:0:99999:7:::
- backup:*:19110:0:99999:7:::
- list:*:19110:0:99999:7:::
- irc:*:19110:0:99999:7:::
- gnats:*:19110:0:99999:7:::
- nobody:*:19110:0:99999:7:::
- _apt:*:19110:0:99999:7:::
- test:!:19573:0:99999:7:::
之后我们设置docker配置文件`/etc/docker/daemon.json`,如下所示
- {
- "registry-mirrors": [
- "https://dockerhub.azk8s.cn"
- ],
- "exec-opts": [ "native.cgroupdriver=systemd" ],
- "no-new-privileges": true
- }
之后在容器内使用SUID提权如下所示,会显示没有权限,SUID提权失败
- test@4ed71e9e0e47:/$ find 1 -exec cat /etc/shadow \;
- cat: /etc/shadow: Permission denied
这个方式也可以启动
docker run --rm -ti --security-opt=no-new-privileges alpine sh
kernel.org/doc/Documentation/prctl/no_new_privs.txt
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。