应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固

对Docker安全的理解

Docker作为最重视安全的容器技术之一,在很多方面都提供了强安全性的默认配置,其中包括:容器root用户的Capability能力限制、Seccomp系统调用过滤、Apparmor的 MAC 访问控制、ulimit限制、pid-limits的支持,镜像签名机制等。

1Docker容器的安全性,很大程度上依赖于Linux系统自身,评
估Docker的安全性时,主要考虑以下几个方面:

Linux内核的命名空间机制提供的容器隔离安全
Linux控制组机制对容器资源的控制能力安全。
Linux内核的能力机制所带来的操作权限安全
Docker程序(特别是服务端)本身的抗攻击性。
其他安全增强机制对容器安全性的影响。

1.命名空间隔离的安全

当docker run启动一个容器时,Docker将在后台为容器创建一个独立的命 
名空间。命名空间提供了最基础也最直接的隔离。

与虚拟机方式相比,通过Linux namespace来实现的隔离不是那么彻底。

容器只是运行在宿主机上的一种特殊的进程,那么多个容器之间

使用的就还是同一个宿主机的操作系统内核。
在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的,比如:时 间

1)在这里插入图片描述2)
在这里插入图片描述
3)在这里插入图片描述4)
在这里插入图片描述
在这里插入图片描述
2.控制组资源控制的安全

当docker run启动一个容器时,Docker将在后台为容器创建一个独
 立的控制组策略集合。

Linux Cgroups提供了很多有用的特性,确保各容器可以公平地分
 享主机的内存、CPU、磁盘IO等资源。

确保当发生在容器内的资源压力不会影响到本地主机系统和其他 容器,
它在防止拒绝服务攻击(DDoS)方面必不可少。

3.内核能力机制

能力机制(Capability)是Linux内核一个强大的特性,可以提供细粒度的权限访问控制。

大部分情况下,容器并不需要“真正的”root权限,容器只需要 少数的能力
即可。

默认情况下,Docker采用“白名单”机制,禁用“必需功能”之外的其他权限。

4.Docker服务端防护

使用Docker容器的核心是Docker服务端,确保只有可信的用户才 能访问到Docker服务。
将容器的root用户映射到本地主机上的非root用户,减轻容器和 主机之间因权限提升而引起的安全问题。
允许Docker 服务端在非root权限下运行,利用安全可靠的子进程 来代理执行需要特权权限的操作。这些子进程只允许在特定范围内进行操作。

5.其他安全特性

在内核中启用GRSEC和PAX,这将增加更多的编译和运行时的安 全检查;并且通过地址随机化机制来避免恶意探测等。启用该特性不需要Docker进行任何配置。
使用一些有增强安全特性的容器模板。
用户可以自定义更加严格的访问控制机制来定制安全策略。
在文件系统挂载到容器内部时,可以通过配置只读模式来避免容 器内的应用通过文件系统破坏外部环境,特别是一些系统运行状 态相关的目录。

总结:
在这里插入图片描述

容器的资源限制

1.什么是cgroup?
在这里插入图片描述2.cgroup可以干什么?

  
   限制进程组可以使用的资源数量(Resource limiting )。
    比如:memory子系统可以为进程组设定一个memory使用上限,一旦进程组使用的内存达到限额再申请内存,
    就会出发OOM(out of memory)
进程组的优先级控制(Prioritization )。比如:可以使用cpu
子系统为某个进程组分配特定cpu share。
记录进程组使用的资源数量(Accounting )。比如:可以使用
cpuacct子系统记录某个进程组使用的cpu时间
进程组隔离(Isolation)。比如:使用ns子系统可以使不同的进程组
使用不同的namespace,以达到隔离的目的,
不同的进程组有各自的进程、网络、文件系统挂载空间。
进程组控制(Control)。比如:使用freezer子系统可以将进程组挂起
和恢复

对容器的cpu进行资源限制

1.在这里插入图片描述2.
在这里插入图片描述
可以看到容器内的超户并没有权力对容器的网络进行操作的权限
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
1.从这里开始演示用cgroup进行容器的资源控制
在这里插入图片描述
在这里插入图片描述在这里插入图片描述-t指定文件的类型

2.在这里插入图片描述在这里插入图片描述3.在这里插入图片描述运行一个容器,发现容器的内存只有在1G,其实这里查看到的是系统真正的 内存,因为没有做真机和容器的资源隔离。
在这里插入图片描述为主机添加内存之后,发现容器内立即生效
在这里插入图片描述在这里插入图片描述在这里插入图片描述4.在这里插入图片描述在这里插入图片描述在这里插入图片描述发现正在运行的容器的id的完整版
在这里插入图片描述在这里插入图片描述在这个目录下的资源的限制文件都是父级的,是其他所以子资源限制的模板
在这里插入图片描述在这里插入图片描述5.删除之前建立的没有做资源限制的 容器

在这里插入图片描述在这里插入图片描述在这里插入图片描述6.在运容器时为容器做资源限制
在这里插入图片描述7.再次查看
在这里插入图片描述
在这里插入图片描述8.在容器内进行测试
在这里插入图片描述在这里插入图片描述在这里插入图片描述

系统层面对cpu的资源限制

1.在这里插入图片描述2.在这里插入图片描述在这里插入图片描述3.tab键尝试命令补齐
在这里插入图片描述4.在这里插入图片描述5.
在这里插入图片描述在这里插入图片描述6.这里采用的方法是创建临时目录
在这里插入图片描述在这里插入图片描述在这里插入图片描述7.lscpu命令可以查看系统的cpu情况
在这里插入图片描述在这里插入图片描述8.在这里插入图片描述在这里插入图片描述在这里插入图片描述此时cpu变为单核的

在这里插入图片描述在这里插入图片描述在这里插入图片描述9.开启两个dd进程测试限制cpu的优先级
在这里插入图片描述不做限制时,此进程默认是100%的cpu占用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述发现不做限制时,两个进程默认是平均分
在这里插入图片描述在这里插入图片描述10.限制系统cpu的限制,创建一个限制资源目录l1,将之前两个进程中的某一个先暂停,为它创建资源限制
在这里插入图片描述在这里插入图片描述在这里插入图片描述让dd指令运行在l1的限制下
在这里插入图片描述发现没有资源限制的进程占了90%,而添加了资源限制的,占了10%,因为它刚好是100,是1024的十分之一
在这里插入图片描述在这里插入图片描述测试增大该进程的优先级
在这里插入图片描述变为20%
在这里插入图片描述测试系统层面的配额

1.在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述发现此进程的占用率是20%
在这里插入图片描述再开启一个进程
在这里插入图片描述两个进程共用平分20%
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

对系统的内存进行资源控制

1.在这里插入图片描述在这里插入图片描述在这里插入图片描述创建内存限制子控制器l2
在这里插入图片描述在这里插入图片描述在这里插入图片描述可以看到现在系统的 内存
在这里插入图片描述在这里插入图片描述这里的实验涉及到消耗物理内存
在这里插入图片描述在这里插入图片描述在这里插入图片描述可以看到在此目录的文件,直接占用物理内存
在这里插入图片描述在这里插入图片描述在这里插入图片描述做测试
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述限制交换分区的大小
在这里插入图片描述此时
在这里插入图片描述在这里插入图片描述

对容器的内存资源做限制

在这里插入图片描述
1.
在这里插入图片描述在这里插入图片描述2.在这里插入图片描述在这里插入图片描述通过容器id发现就是在之前的容器上生效
在这里插入图片描述测试完成,删除文件
在这里插入图片描述在这里插入图片描述

对容器io的限制

在这里插入图片描述
1.在这里插入图片描述2.在这里插入图片描述3.在这里插入图片描述在这里插入图片描述在这里插入图片描述发现自己的磁盘是sda
在这里插入图片描述做测试:

1.在这里插入图片描述在这里插入图片描述在这里插入图片描述在ser2上下载ser1传过来的镜像,因为作实验要用
在这里插入图片描述运行ubuntu镜像之后,测试磁盘写入
在这里插入图片描述可以看到,不做限制时,是2.1G/S做了限制变成10.5MB/S
在这里插入图片描述

Docker安全加固

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

实现系统和容器的资源隔离

1.考虑如何实现容器与系统的的资源隔离,先删除之前创建的容器
在这里插入图片描述2.安装lxcfs工具

在这里插入图片描述3.在这里插入图片描述4.在这里插入图片描述5.在这里插入图片描述在这里插入图片描述6.
在这里插入图片描述在这里插入图片描述可以看到,之前指定的256m.进入容器后看到的也是256m
在文件中查看
在这里插入图片描述
在这里插入图片描述删除容器
在这里插入图片描述

限制特权级别运行的容器

1.在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述具体指定某个资源的权限
在这里插入图片描述
在这里插入图片描述发现并不能对磁盘进行操作,可以对网络进行操作
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值