docker容器非root用户提权的问题解决
目录
- 一、使用非root用户启动docker容器
- 二、验证非root用户启动容器的安全性
本系列之前的文章中使用root用户安装docker,并在root用户下启动docker守护进程,容器也是在root用户下启动运行的。那么问题就出现了:我们的容器服务进程都是root用户权限,使用数据卷的方式想挂载哪个目录就挂载那个目录;想修改挂载目录下的哪个文件,就修改哪个文件。 那么我们本文带大家使用非root用户来启动docker容器,是否就安全了呢? 我们先不说答案,让我们一起来通过实验,来解答我们的疑问。
一、使用非root用户启动docker容器
为了提升安全性,我们考虑一种方案:使用非root用户启动docker容器。为此我们做一个实验,首先我们创建一个普通用户zimug,执行命令 useradd zimug;。并且将这个用户加入docker用户组,因为docker用户组的用户才能启动docker容器。
#zimug加入docker用户组 usermod -G docker zimug; #在zimug用户下启动容器 docker run -d --name nginx-zimug -p 80:80 nginx;
以上的操作证明使用非root用户启动docker容器是可行的,但是安全性有没有得到提升,我们还需要验证。
二、验证非root用户启动容器的安全性
回到docker服务所在的宿主机服务器上,使用 root 账号将"zimug test"这样一个字符串写入测试文件 test.txt
mkdir -p /root/test; echo "zimug test" > /root/test/test.txt;
然后使用su命令切换到zimug这个用户,使用cat命令查看文件提示权限不够无法查看文件,到此一切正常。
[root]# su - zimug; [zimug]$ cat /root/test/test.txt; cat: /root/test/test.txt: 权限不够
然后我们在zimug用户下启动一个容器nginx-zimug1,需要记住非常重要的一点是:这个容器我们是在非root用户zimug下启动的。
[zimug]$ docker run -d --name nginx-zimug1 \ -p 81:80 \ -v /root/test/test.txt:/root/test/test.txt nginx;
然后我们进入容器内部修改/root/test/test.txt这个文件,向文件内echo写入一个字符串:“zimug test update file in container”,表示这个文件我们在容器内部进行修改。
# 进入容器内部 [zimug]$ docker exec -it nginx-zimug1 /bin/bash # 进入容器后使用下面的命令修改文件,然后exit退出 echo "zimug test update file in container" > /root/test/test.txt;
回到宿主机上使用 root 账号确认 /root/test/test.txt 文件内容。发生了我们不愿见到的结果:普通用户zimug启动一个容器,可以随意映射root用户文件,并且在容器内修改这个文件,root用户的文件内容也随之更改。
# cat /root/test/test.txt zimug test update file in container
之所以出现这个问题,有两个原因:一是docker容器本质是宿主机服务器上的一个进程,不做特殊处理的情况下,容器里的root用户和宿主机上的root用户实际上是同一个用户;二是docker存在一个守护进程,即使用systemctl start docker启动的那个服务进程。因为我们安装docker是root用户安装的,该守护进程也是用root用户启动的,即使容器是非root用户运行的也存在较大的安全问题,是docker安全性问题的重要风险点。
解决这个问题有两个通用方法:就是容器用户与宿主机用户的id段映射;二是使用非root用户搭建docker并启动守护进程。
上一篇:Rancher部署配置开源Rainbond云原生应用管理平台
栏 目:其它服务器
下一篇:Rainbond的ServiceMesh架构组件端口冲突处理解决
本文地址:https://zz.feitang.co/server/32463.html
您可能感兴趣的文章
- 12-20Kubernetes中使用临时容器进行故障排查的方法
- 12-20Nginx设置HTTPS的方法步骤
- 12-20二进制方式安装 Kubernetes1.18.3版本实现脚本
- 12-20Nginx工作模式及代理配置的使用细节
- 12-20ZooKeeper分布式协调服务设计核心概念及安装配置
- 12-20Kubernetes部署可视化地图的十个步骤
- 12-20关于docker清理Overlay2占用磁盘空间的问题(亲测有效)
- 12-20Docker compose配置文件写法及命令使用示例
- 12-20openwrt安装docker并启动的操作方法
- 12-20云原生Kubernetes初始化容器Init使用教程


阅读排行
推荐教程
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07新版Eclipse集成Tomcat时找不到server选项的解决方法
- 12-06IIS7 应用程序池自动回收关闭的解决方案
- 12-05Windows Server 2019安装VMware
- 12-05Windows服务器默认IE浏览器无法下载文件的解决方法
- 12-05Docker安装Jenkins全过程
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法





