Docker用户隔离

说明

Docker的使用默认需要sudo权限,或者将需要使用docker的用户拉入docker组当中。
使用Docker镜像时,一般默认以root用户进入镜像,由于Docker共享内核的特性,此时容器的root用户与主机的root用户相同,将带来主机安全问题。(如Docker 允许用户在主机和容器间共享文件夹,同时不需要限制容器的访问权限,这就容易让容器突破资源限制。例如,恶意用户启动容器的时候将主机的根目录/映射到容器的 /host 目录中,那么容器理论上就可以对主机的文件系统进行任意修改了。)
而借助Linux的User namespace可以将容器的 root 用户映射到本地主机上的非 root 用户,减轻容器和主机之间因权限提升而引起的安全问题。
此处仅记录解决该问题的方法,详细说明请见:
理解Docker容器中的uid和gid.
Linux Namespace.
隔离docker容器中的用户.

隔离方法

让 docker 创建默认的用户用于 user namespace。
创建/etc/docker/daemon.json

$ sudo touch /etc/docker/daemon.json

然后编辑其内容如下(如果该文件已经存在,仅添加下面的配置项即可),并重启 docker 服务:

{
  "userns-remap": "default"
}
$ sudo systemctl restart docker.service

可以通过id命令看到docker新建了一个名为dockremap的用户

$ id dockremap

接着尝试运行docker

$ docker run --rm ubuntu:18.04 top

显示为root用户
在这里插入图片描述

在另一终端下

ps -aux|grep top

在这里插入图片描述

可以看到运行top的已经非root而是2197152用户,隔离成功。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐