docker 开启用户命名空间映射

此项功能可以极大提高 docker 自身安全性,减少攻击面。docker 中的 root 用户在外部系统中被映射为专门创建好的特殊 docker 用户,不再是以传统的 id 为 0 的 root 用户身份执行 docker 内程序。这样即使因为某些漏洞造成 docker 逃逸,逃逸到外部的程序也无权操控系统的任何其他组件。

1. 操作流程

  1. 执行 sudo nano /etc/docker/daemon.json 编辑 dockerd 配置文件,加入如下条目:
{ "userns-remap": "default" }
  1. sudo systemctl restart docker.service 重启 docker 服务

2. 验证是否成功开启

下面我们来验证几个关于用户隔离的几个点。

首先执行 sudo id dockremap,验证 docker 是否创建了一个名为 dockremap 的用户:

然后执行 sudo cat /etc/subuidsudo cat /etc/subgid,查看文件中是否添加了新用户 dockremap 相关的项:

通过上面的检查,我们可以确认 docker daemon 已经启用了用户隔离的功能。

3. 文件 / 目录权限问题

开启此功能后,当需要把宿主机中的文件 / 目录映射到 docker 容器中时,需要先修改其对应的 owner 用户和组,使其可以被容器中的程序正常读写。

首先确定 dockremap 用户和组的 id 是多少,比如以上面的截图为例,其 id 为 165536。不同系统中,此值可能并不一样

确定好 id 之后,执行如下命令即可:

sudo chown -R <id>:<id> <要映射的目录/文件>

举例:

sudo chown -R 165536:165536 etc

然后再启动 docker 容器,容器中的程序就可以正常工作了。


docker 开启用户命名空间映射
https://blog.openyq.top/posts/56369/
作者
yqs112358
许可协议