笔记:docker 设置name space

为什么要设置name space

首先,docker并不是虚拟机,其并没有完整的虚拟化系统内核,docker中的容器是公用宿主机的系统内核的。而docker默认情况下容器中的命令是在宿主机器上以root账号来进行运行的,如下图,圈出来的进程其实是在容器中运行的,但是在宿主机中该进程实际的执行者为root,这就有点点让人担心了

万一docker出了安全问题被渗透了,那就是宿主机上面的root权限,实在是有点令人担心,这时候我们就需要给docker设置name space来解决。或者是有的时候用普通用户权限运行docker容器,也有可能会出现容器内实际执行账户为”i have no name “这个情况也可以通过设置name space来进行修复

使用name space技术其实实际上是将容器中的root用户“映射”到宿主机中的一个普通用户上面,该进程在容器中有“root”权限,但是实际在宿主机器中只有一个普通用户权限。理解了以后就是如何操作了。

简单配置-让docker自动处理

有的时候我们可能不想手动去配置用户,所以干脆直接让docker自己一键配置好。我们只需要前往/etc/docker/daemon.json 这个文件加上以下的代码(没有这个文件则自己创建就行了),重启docker服务,

{
  "userns-remap": "default"
}

然后我们通过执行以下命令可以看看系统中有没有创建这个用户:dockermap

cat /etc/passwd

手动配置-自己配置用户

首先我们要自己决定一个用户(用来执行docker),我以用户MCSM为例子

首先先创建个用户

adduser mcsm

然后给这个用户配置subuid以及subgid(用于docker的name space)

vim /etc/subuid

在这个文件后面加上 用户名:起始用户命名空间:终止命名空间,我这边设置的为mcsm:231072:250000

接下来是配置subgid

vim /etc/subuid

跟上方一样,加上 用户名:起始用户命名空间:终止命名空间,(填的内容也跟刚刚一样)我这边设置的为mcsm:231072:250000

配置完了以后我们前往/etc/docker/daemon.json 这个文件加上以下的代码(没有这个文件则自己创建就行了),重启docker服务,

{
  "userns-remap": "mcsm"
}

将mcsm改为你配置的用户的名称

最终步骤:检查docker中的进程的运行用户

我们先启用个容器来看看docker中容器中的进程的运行权限

docker run -d ubuntu:20.04 sleep 100000

然后看看sleep的运行权限

已经不是root了,变为一个叫做231072的用户了,配置完成。

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议,记得载明出处,(期待)。内容有问题?点此反馈
上一篇
下一篇