Docker之用户隔离

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用户,隔离成功。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker 是一种容器化技术,它通过使用操作系统级虚拟化来实现应用程序的隔离Docker 隔离原理主要依赖于以下几个关键技术: 1. Linux 命名空间(Namespaces):Docker 使用多种 Linux 命名空间来隔离不同的系统资源,如进程、网络、文件系统、用户等。每个容器都有自己独立的命名空间,使得容器中运行的进程只能看到自己所在的命名空间中的资源,从而实现了进程级别的隔离。 2. 控制组(Control Groups):Docker 使用控制组来限制和隔离容器对系统资源的使用,如 CPU、内存、磁盘、网络带宽等。通过控制组,可以为每个容器分配一定的资源配额,并且防止容器占用过多的资源影响其他容器或宿主机。 3. 文件系统隔离Docker 使用联合文件系统(UnionFS)来实现容器的文件系统隔离。每个容器都有自己的根文件系统,可以在其中安装和运行应用程序,而不会影响其他容器或宿主机的文件系统。 4. 容器间通信:Docker 提供了网络隔离功能,使得容器可以在自己的网络命名空间中运行,并且可以通过网络与其他容器或宿主机进行通信。每个容器都有自己的网络栈,独立于其他容器和宿主机,从而实现了网络级别的隔离。 综上所述,Docker 利用 Linux 命名空间、控制组、文件系统隔离和网络隔离等技术,实现了容器级别的隔离,使得不同的容器可以在同一台宿主机上独立运行,互相不受影响。这种隔离机制使得 Docker 在应用部署、开发测试和环境一致性等方面具有很大的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值