您的位置:用让网 > 生活 > >正文

​容器应用安全(容器安全拾遗-)

摘要容器应用安全(容器安全拾遗-) 摘要: Docker和Kubernetes已经成为企业IT架构的基础设施,安全容器运行时越来越被关注。近期Docker 19.03中发布了一个重要的特性 “rootless Container”,在提...

容器应用安全(容器安全拾遗-)

摘要: Docker和Kubernetes已经成为企业IT架构的基础设施,安全容器运行时越来越被关注。近期Docker 19.03中发布了一个重要的特性 “rootless Container”,在提升容器的安全隔离性和可管理性方面前进了一大步。

容器应用安全(容器安全拾遗-)(1)

近期docker 19.03中发布了一个重要的特性 “Rootless Container支持”。趁着五一假期,快速验证一下。本文参考了Experimenting with Rootless Docker 一文的内容,并且补充了更多的细节和上手内容。

Rootless容器背景与架构

Docker和Kubernetes已经成为企业IT架构的基础设施,其自身安全越来越被关注。Docker基于linux操作系统提供了应用虚拟化能力,通过namespace, cgroup实现了资源的隔离和配额约束。Docker Engine是一个典型的 Client-Server 结构:

Docker Client (TCP/unix Socket) -> Docker Daemon (Parent/Child Processes) -> Container

由于Linux需要特权用户来创建namespace,挂载分层文件系统等,所以 Docker Daemon 一直以来是以root用户来运行的。这也导致了有Docker访问权限的用户可以通过连接Docker Engine获取root权限,而且可以绕开系统的审计能力对系统进行攻击。这阻碍了容器在某些场景的应用:比如在高性能计算领域,由于传统的资源管理和调度系统需要非特权用户来运行容器,社区实现了另外的容器运行时Singularity 。

Moby社区的 Akihiro Suda,为Docker Engine和Buildkit贡献了rootless容器支持,让Docker Engine以非特权用户方式运行,更好地复用Linux的安全体系。

注意:

目前rootless容器还在实验阶段,cgroups 资源控制, apparmor安全配置, checkpoint/restore等能力还不支持。目前只有Ubuntu提供了在rootless模式下对overlay fs的支持,由于安全顾虑,这个方案尚未得到upstream的支持。其他操作系统需要利用VFS存储驱动,有一定性能影响,并不适合I/O密集型应用。

Rootless容器有几个核心技术

首先是利用 user namespaces 将容器中的root用户uid/gid映射到宿主机的非特权用户范围内。Docker Engine已经提供了 --userns-remap 标志支持了相关能力,提升了容器的安全隔离性。Rootless容器在此之上,让Docker daemon也运行在重映射的用户名空间中。

容器应用安全(容器安全拾遗-)(2)

其次,虽然Linux中的非特权用户可以在用户名空间中创建网络名空间,并且执行iptables规则管理和tcpdump等操作,然而非特权用户无法在宿主机和容器之间创建veth pairs, 这也意味着容器没有外网访问能力。为了解决这个问题,Akihiro 利用用户态的网络“SLiRP”,通过一个TAP设备连接到非特权用户名空间,为容器提供外网连接能力。其架构如下

容器应用安全(容器安全拾遗-)(3)

相关细节请参考,slirp4netns项目

环境准备

本文在一台 CentOS 7.6的虚拟机上进行的验证

创建用户

$ useradd moby $ passwd moby

将新建用户添加到 sudoers 组

usermod -aG wheel moby

切换到非特权用户

$ su - moby $ id uid=1000(moby) gid=1000(moby) groups=1000(moby),10(wheel)

进行uid/gid映射配置

echo "moby:100000:65536" | sudo tee /etc/subuid echo "moby:100000:65536" | sudo tee /etc/subgid

安装Rootless Docker

curl -sSL https://get.docker.com/rootless | sh

如果第一次安装,需要安装所需软件包

$ curl -sSL https://get.docker.com/rootless | sh # Missing system requirements. Please run following commands to # install the requirements and run this installer again. # Alternatively iptables checks can be disabled with SKIP_IPTABLES=1 cat <<EOF | sudo sh -x curl -o /etc/yum.repos.d/vbatts-shadow-utils-newxidmap-epel-7.repo https://copr.fedorainfracloud.org/coprs/vbatts/shadow-utils-newxidmap/repo/epel-7/vbatts-shadow-utils-newxidmap-epel-7.repo yum install -y shadow-utils46-newxidmap cat </etc/sysctl.d/51-rootless.conf user.max_user_namespaces = 28633 EOT sysctl --system EOF

(可选)安装用户态网络协议栈实现 slirp4netns :由于yum 安装的slirp4netns版本比较老无法执行,需要从源码构建。

$ sudo yum install glib2-devel $ sudo yum group install "Development Tools" $ git clone https://github.com/rootless-containers/slirp4netns $ cd slirp4netns $ ./autogen.sh $ ./configure --prefix=/usr $ make $ sudo make install

安装 Rootless Docker成功之后,会出现如下提示

$ curl -sSL https://get.docker.com/rootless | sh # systemd not detected, dockerd daemon needs to be started manually /home/moby/bin/dockerd-rootless.sh --experimental --storage-driver vfs # Docker binaries are installed in /home/moby/bin # Make sure the following environment variables are set (or add them to ~/.bashrc):\n export XDG_RUNTIME_DIR=/tmp/docker-1000 export DOCKER_HOST=unix:///tmp/docker-1000/docker.sock

验证Rootless容器

执行

$ export XDG_RUNTIME_DIR=/tmp/docker-1000 $ export DOCKER_HOST=unix:///tmp/docker-1000/docker.sock $ /home/moby/bin/dockerd-rootless.sh --experimental --storage-driver vfs

然后在另外一个窗口执行

$ export XDG_RUNTIME_DIR=/tmp/docker-1000 $ export DOCKER_HOST=unix:///tmp/docker-1000/docker.sock $ docker version Client: Version: master-dockerproject-2019-04-29 API version: 1.40 Go version: go1.12.4 Git commit: 3273c2e2 Built: Mon Apr 29 23:39:39 2019 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: master-dockerproject-2019-04-29 API version: 1.40 (minimum version 1.12) Go version: go1.12.4 Git commit: 9a2c263 Built: Mon Apr 29 23:46:23 2019 OS/Arch: linux/amd64 Experimental: true containerd: Version: v1.2.6 GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb runc: Version: 1.0.0-rc7 dev GitCommit: 029124da7af7360afa781a0234d1b083550f797c docker-init: Version: 0.18.0 GitCommit: fec3683 $ docker run -d -p 8080:80 nginx $ curl localhost:8080

利用 iperf3 进行网络性能测试,启动服务器端

$ docker run -it --rm --name=iperf3-server -p 5201:5201 networkstatic/iperf3 -s

测试容器之间的网络带宽

$ SERVER_IP=$(docker inspect --format "{{ .NetworkSettings.IPAddress }}" iperf3-server) $ echo $SERVER_IP 172.17.0.2 $ docker run -it --rm networkstatic/iperf3 -c $SERVER_IP ... - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.03 sec 29.8 GBytes 25.5 Gbits/sec 0 sender [ 4] 0.00-10.03 sec 29.8 GBytes 25.5 Gbits/sec receiver

测试容器到宿主机之间的网络带宽(外网访问)

$ HOST_IP=$(hostname --ip-address) $ echo $HOST_IP 192.168.1.162 $ docker run -it --rm networkstatic/iperf3 -c $HOST_IP ... - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 1011 MBytes 848 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 1008 MBytes 845 Mbits/sec receiver

可以看到容器之间的通信带宽还比较不错,然而容器和宿主机不同网络名空间之间的通信性能有较大的损耗。

总结

Rootless容器在提升Docker/Runc容器的安全隔离性和可管理性方面前进了一大步,可以很好地复用Linux的安全体系,配合seccomp和SELinux等安全配置,可以减少攻击面。社区还提供了无需特权用户的Kubernetes实验版本,可以从如下项目获得 https://github.com/rootless-containers/usernetes

然而Rootless容器无法防范Linux内核的安全风险,目前其网络、存储的性能也有待优化,需要在特定场景中进行使用。也期待社区持续提升容器安全能力与效率,让容器有更加广阔的应用场景。

作者:易立

,

标签:

推荐阅读

  • ​如何教会虎皮鹦鹉说话(虎皮鹦鹉会说情话)

    如何教会虎皮鹦鹉说话(虎皮鹦鹉会说情话) 鹦鹉舌头上的肌肉也非常发达,和人类舌头类似的点在于它们的舌体也肥厚柔软,形状与人了舌头相似且容易被口腔肌肉控制,这样能方便...

    2023-08-27 00:21:12
  • ​高铁无线网全覆盖(高铁有望实现WIFI全覆盖了)

    高铁无线网全覆盖(高铁有望实现WIFI全覆盖了) 经常坐高铁的朋友们, 想必非常能体会在车上无所事事的心情。 尤其是一个人的旅途时, 只能看看提前下好的视频, 毕竟, 用4G网刷...

    2023-08-27 00:19:07
  • ​真正的大秦有多厉害(大秦故都陕西省如今实力到底有多强)

    真正的大秦有多厉害(大秦故都陕西省如今实力到底有多强) 陕西,简称“陕”或“秦”,省会西安,位于中国内陆腹地,黄河中游,东邻山西、河南,西连宁夏、甘肃,南抵四川、重...

    2023-08-27 00:17:02
  • ​脸大又长的女生适合什么刘海(赶紧试试这5款刘海)

    脸大又长的女生适合什么刘海(赶紧试试这5款刘海) 我的小可爱们 晚上好鸭 囤囤相继出了 发色篇、卷发篇 听说还有很多宝宝想看刘海的? 木有问题~ 咱们今天就来聊一聊吧 说到刘海...

    2023-08-27 00:14:57
  • ​刘秀的郭皇后简介 刘秀结发妻阴丽华为何是第二任皇后

    刘秀的郭皇后简介 刘秀结发妻阴丽华为何是第二任皇后 题记 光武帝刘秀,自幼钟情于美女阴丽华,少年时期就立下一个心愿:娶妻当娶阴丽华。 可是,在刘秀定都洛阳后,在册立皇后...

    2023-08-27 00:12:52
  • ​最常见的九种健身补剂(5种健身后常见的运动营养补剂)

    最常见的九种健身补剂(5种健身后常见的运动营养补剂) 刚刚开始健身的你,或多或少都会在网上了解过一些运动补剂~但是假如没有接触过正式的健身教学,随便用那些运动补剂是危...

    2023-08-27 00:10:47
  • ​周生如故子贞是谁(周生如故简介)

    周生如故子贞是谁(周生如故简介) 《周生如故》里的刘子贞是先帝的孩子剧中的刘子贞虽然是太子的身份,但在当时他还是一个孩子周生辰是刘子贞的皇叔,他最后就是为了保护刘子...

    2023-08-26 15:35:20
  • ​如何连接网络打印机(连接网络打印机步骤)

    如何连接网络打印机(连接网络打印机步骤) 将电脑、打印机连接妥当电脑和网络打印机都生成自己的ip,首先确保电脑、打印机在一个网段,我来为大家讲解一下关于如何连接网络打...

    2023-08-26 15:33:16
  • ​斑是怎么形成的(斑形成的原因)

    斑是怎么形成的(斑形成的原因) 色斑是指和周围皮肤颜色不同的斑点一半是因为黑色素的郑家而形成的一种常见的损容性疾病,表现为面部呈现褐色或者黑色的斑点或斑片,影响外在...

    2023-08-26 15:31:11
  • ​九寨黄龙机场航班(九寨黄龙机场4月18日复航)

    九寨黄龙机场航班(九寨黄龙机场4月18日复航) 中国网4月11日讯 近日,记者从四川省交投集团获悉,九寨黄龙机场将于4月18日复航其中,复航运行的首条航线为成都-九寨航线,由四...

    2023-08-26 15:29:06
  • ​好听的日系ID(比较好听的日系网名)

    好听的日系ID(比较好听的日系网名) 猫吻 珠珠 ,现在小编就来说说关于好听的日系ID?下面内容希望能帮助到你,我们来一起看看吧! 好听的日系ID 猫吻 珠珠 自欺 珊珊 婉儿 烟蒂 離殇...

    2023-08-26 15:27:01
  • ​生麦芽的功效与作用(生麦芽有哪些功效与作用)

    生麦芽的功效与作用(生麦芽有哪些功效与作用) 生麦芽的功效与作用是可以行气消食、健脾开胃、退乳消胀主治致食积不消、脘腹胀痛、脾虚食少、乳汁瘀积、乳房胀痛、妇女断乳...

    2023-08-26 15:24:56
  • ​正确的眼部按摩手法(不妨学习一下)

    正确的眼部按摩手法(不妨学习一下) 眼部按摩的方法及步骤:用中指和无名指以眼角为起点,从中间开始向外侧画圆圈,注意眼睑处的皮肤是很薄嫩的,而且容易产生皱纹,因此按摩...

    2023-08-26 15:22:51
  • ​斑马是白条纹的黑马还是黑条纹的白马?(是白条纹的黑马)

    斑马是白条纹的黑马还是黑条纹的白马?(是白条纹的黑马) 斑马是白条纹的黑马斑马是现存的奇蹄目马科马属3种兽类的通称因身上有起保护作用的斑纹而得名没有任何动物比斑马的...

    2023-08-26 15:20:47
  • ​森海塞尔px100ii和px200(森海塞尔PX100和PX200比较)

    森海塞尔px100ii和px200(森海塞尔PX100和PX200比较) 森海塞尔PX100和PX200两者相对比较,PX200性价比更高。 优点:不错比较干净,看高质版电影很好,不会出现特别吓人的低音,尤其听录音...

    2023-08-26 15:18:41
  • ​好写又含义好的字(寓意好比较特别的字)

    好写又含义好的字(寓意好比较特别的字) 江:财如江水,有如大财到手,喜事如意,办事通顺大河的通称宝宝取名用,象征宽阔永存,我来为大家讲解一下关于好写又含义好的字?跟...

    2023-08-26 15:16:36
  • ​彩礼钱的由来,女人为什么要选择婚姻

    彩礼钱的由来,女人为什么要选择婚姻 本文目录 1.女人为什么要选择婚姻2.结婚需要彩礼钱吗3.彩礼的起源4.结婚为什么要压箱钱 女人为什么要选择婚姻 如今彩礼是横在很多人婚姻前的一...

    2023-08-26 09:26:32
  • ​船主要有哪三部分组成,船舶一般有哪些部分构造组成图片

    船主要有哪三部分组成,船舶一般有哪些部分构造组成图片 本文目录 1.船舶一般有哪些部分构造组成图片2.帆船的组成部分有哪些名称3.船图主要由什么图和什么图两部分组成4.船的基本...

    2023-08-26 09:24:27
  • ​我国有哪些有名的桥,我国著名的古桥有哪些?

    我国有哪些有名的桥,我国著名的古桥有哪些? 本文目录 1.我国著名的古桥有哪些?2.中国有哪些著名的桥梁3.我国还有哪些有名的桥至少写三个除了赵州桥4.中国十大名桥有哪些? 我国著名...

    2023-08-26 09:22:22
  • ​经典语句人生感悟,形容人生感悟的经典句子

    经典语句人生感悟,形容人生感悟的经典句子 本文目录 1.形容人生感悟的经典句子2.经典人生感悟句子精选app3.人生得意时要看淡,失意时要看开是什么意思4.感悟人生情感的经典句子短句...

    2023-08-26 09:20:17