docker的no_new_privs标志位测试

前言

其本质是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

参考

kernel.org/doc/Documentation/prctl/no_new_privs.txt

Linux Capabilities 入门教程:基础实战篇 - 知乎 (zhihu.com)

dockerd | Docker Documentation 

你可能感兴趣的:(安全)