当前位置:   article > 正文

docker的no_new_privs标志位测试_no-new-privileges

no-new-privileges

前言

其本质是LINUX内核的no_new_privs标志位,Docker之后支持该标志位的设置,当该标志位设置的时候,SUID不再生效,既之前通过LINUX权限划分出的粗粒度产物SUID权限,当拥有SUID权限的程序,在执行时,会拥有ROOT权限,通过设置该标志位就可以杜绝掉这种情况,我们可以看下列实验

实验

未设置

在未设置该标志位的docker中,可以提权成功,find通过chmod u+s设置了suid位

  1. test@435d596c0b05:/$ find 1 -exec cat /etc/shadow \;
  2. root:*:19110:0:99999:7:::
  3. daemon:*:19110:0:99999:7:::
  4. bin:*:19110:0:99999:7:::
  5. sys:*:19110:0:99999:7:::
  6. sync:*:19110:0:99999:7:::
  7. games:*:19110:0:99999:7:::
  8. man:*:19110:0:99999:7:::
  9. lp:*:19110:0:99999:7:::
  10. mail:*:19110:0:99999:7:::
  11. news:*:19110:0:99999:7:::
  12. uucp:*:19110:0:99999:7:::
  13. proxy:*:19110:0:99999:7:::
  14. www-data:*:19110:0:99999:7:::
  15. backup:*:19110:0:99999:7:::
  16. list:*:19110:0:99999:7:::
  17. irc:*:19110:0:99999:7:::
  18. gnats:*:19110:0:99999:7:::
  19. nobody:*:19110:0:99999:7:::
  20. _apt:*:19110:0:99999:7:::
  21. test:!:19573:0:99999:7:::

设置后

之后我们设置docker配置文件`/etc/docker/daemon.json`,如下所示

  1. {
  2.   "registry-mirrors": [
  3.     "https://dockerhub.azk8s.cn"
  4.   ],
  5.   "exec-opts": [ "native.cgroupdriver=systemd" ],
  6.   "no-new-privileges": true
  7. }

之后在容器内使用SUID提权如下所示,会显示没有权限,SUID提权失败

  1. test@4ed71e9e0e47:/$ find 1 -exec cat /etc/shadow \;
  2. 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

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

dockerd | Docker Documentation

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/478218
推荐阅读
相关标签
  

闽ICP备14008679号