Docker容器中用户权限管理

Docker容器的权限管理方式分为了三种情况:

1.默认使用的root权限
不管是以root用户还是以普通用户(有启动docker容器的权限)启动docker容器,容器进程和容器内的用户权限都是root!
新建了sleep用户,以sleep用户权限启动容器并在有root权限的磁盘进行权限测试

docker run -v /data/sleep:/sleep  -d --name sleep-1 ubuntu sleep infinity

  在宿主机中/data/sleep路径新建了leo_zhou文件并在文件写入“docker”,然后进入sleep-1容器

docker exec -it sleep-1 bash

  依然可以正常操作拥有root权限的文件。

2.限制Docker容器启动的用户
新增--user参数,使容器启动用户变成指定的sleep用户,发现并不能操作拥有root权限的文件了。会发现容器中的uid号和实际主机中的uid号一样,也验证了docker容器使用宿主机的内核。可以一定程度进行权限管理。

3.使用namespace隔离技术
namespace是一种隔离技术,docker就是使用隔离技术开启特定的namespace创建出一些特殊的进程,不过使用namespace是有条件的。系统会创建dockremap,通过/etc/subuid和/etc/subuid对应的id值,映射到容器中去;实际情况还是使用的是dockremap普通权限,达到自动隔离的效果。

①开启Centos内核中关闭的user namespace的功能。
grubby --args="namespace.unpriv_enable=1 user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
echo "user.max_user_namespaces=15076" >> /etc/sysctl.conf

  

②修改/etc/docker/daemon.json配置,新增"userns-remap": "default"选项,default默认就是docker自动创建的用户dockremap,然后重启docker

  

③Centos需要手动输入id值映射范围
最后systemctl restart docker后再次测试效果,发现文件权限已经变成nobody,但docker容器内部依然是以"root"的权限管理,但实际只有普通用户的权限,从而达到权限隔离的效果

  

posted on 2021-06-28 14:48  會飛的狼  阅读(3037)  评论(0编辑  收藏  举报

导航