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

文章目录

  • 对Docker安全的理解
  • 容器的资源限制
  • 对容器的cpu进行资源限制
  • 系统层面对cpu的资源限制
  • 对系统的内存进行资源控制
  • 对容器的内存资源做限制
  • 对容器io的限制
  • Docker安全加固
    • 实现系统和容器的资源隔离
    • 限制特权级别运行的容器

对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)应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第1张图片2)
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第2张图片
3)应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第3张图片4)
在这里插入图片描述
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第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进行任何配置。
使用一些有增强安全特性的容器模板。
用户可以自定义更加严格的访问控制机制来定制安全策略。
在文件系统挂载到容器内部时,可以通过配置只读模式来避免容 器内的应用通过文件系统破坏外部环境,特别是一些系统运行状 态相关的目录。

总结:
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第5张图片

容器的资源限制

1.什么是cgroup?
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第6张图片2.cgroup可以干什么?

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

对容器的cpu进行资源限制

1.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第7张图片2.
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第8张图片
可以看到容器内的超户并没有权力对容器的网络进行操作的权限
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第9张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第10张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第11张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第12张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第13张图片
1.从这里开始演示用cgroup进行容器的资源控制
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第14张图片
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第15张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第16张图片-t指定文件的类型

2.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第17张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第18张图片3.在这里插入图片描述运行一个容器,发现容器的内存只有在1G,其实这里查看到的是系统真正的 内存,因为没有做真机和容器的资源隔离。
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第19张图片为主机添加内存之后,发现容器内立即生效
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第20张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第21张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第22张图片4.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第23张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第24张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第25张图片发现正在运行的容器的id的完整版
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第26张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第27张图片在这个目录下的资源的限制文件都是父级的,是其他所以子资源限制的模板
在这里插入图片描述应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第28张图片5.删除之前建立的没有做资源限制的 容器

应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第29张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第30张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第31张图片6.在运容器时为容器做资源限制
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第32张图片7.再次查看
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第33张图片
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第34张图片8.在容器内进行测试
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第35张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第36张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第37张图片

系统层面对cpu的资源限制

1.在这里插入图片描述2.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第38张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第39张图片3.tab键尝试命令补齐
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第40张图片4.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第41张图片5.
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第42张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第43张图片6.这里采用的方法是创建临时目录
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第44张图片在这里插入图片描述应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第45张图片7.lscpu命令可以查看系统的cpu情况
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第46张图片在这里插入图片描述8.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第47张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第48张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第49张图片此时cpu变为单核的

应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第50张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第51张图片在这里插入图片描述9.开启两个dd进程测试限制cpu的优先级
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第52张图片不做限制时,此进程默认是100%的cpu占用
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第53张图片
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第54张图片
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第55张图片发现不做限制时,两个进程默认是平均分
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第56张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第57张图片10.限制系统cpu的限制,创建一个限制资源目录l1,将之前两个进程中的某一个先暂停,为它创建资源限制
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第58张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第59张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第60张图片让dd指令运行在l1的限制下
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第61张图片发现没有资源限制的进程占了90%,而添加了资源限制的,占了10%,因为它刚好是100,是1024的十分之一
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第62张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第63张图片测试增大该进程的优先级
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第64张图片变为20%
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第65张图片测试系统层面的配额

1.在这里插入图片描述应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第66张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第67张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第68张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第69张图片发现此进程的占用率是20%
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第70张图片再开启一个进程
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第71张图片两个进程共用平分20%
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第72张图片在这里插入图片描述应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第73张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第74张图片

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

1.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第75张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第76张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第77张图片创建内存限制子控制器l2
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第78张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第79张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第80张图片可以看到现在系统的 内存
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第81张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第82张图片这里的实验涉及到消耗物理内存
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第83张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第84张图片在这里插入图片描述可以看到在此目录的文件,直接占用物理内存
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第85张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第86张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第87张图片做测试
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第88张图片在这里插入图片描述应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第89张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第90张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第91张图片限制交换分区的大小
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第92张图片此时
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第93张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第94张图片

对容器的内存资源做限制

应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第95张图片
1.
在这里插入图片描述应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第96张图片2.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第97张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第98张图片通过容器id发现就是在之前的容器上生效
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第99张图片测试完成,删除文件
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第100张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第101张图片

对容器io的限制

应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第102张图片
1.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第103张图片2.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第104张图片3.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第105张图片在这里插入图片描述应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第106张图片发现自己的磁盘是sda
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第107张图片做测试:

1.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第108张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第109张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第110张图片在ser2上下载ser1传过来的镜像,因为作实验要用
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第111张图片运行ubuntu镜像之后,测试磁盘写入
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第112张图片可以看到,不做限制时,是2.1G/S做了限制变成10.5MB/S
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第113张图片

Docker安全加固

应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第114张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第115张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第116张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第117张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第118张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第119张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第120张图片

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

1.考虑如何实现容器与系统的的资源隔离,先删除之前创建的容器
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第121张图片2.安装lxcfs工具

应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第122张图片3.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第123张图片4.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第124张图片5.应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第125张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第126张图片6.
在这里插入图片描述应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第127张图片可以看到,之前指定的256m.进入容器后看到的也是256m
在文件中查看
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第128张图片
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第129张图片删除容器
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第130张图片

限制特权级别运行的容器

1.在这里插入图片描述应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第131张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第132张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第133张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第134张图片应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第135张图片具体指定某个资源的权限
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第136张图片
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第137张图片发现并不能对磁盘进行操作,可以对网络进行操作
应用容器引擎之 docker 学习 (十一) Docker的安全机制+cgroup实现资源限制+安全加固_第138张图片
在这里插入图片描述

你可能感兴趣的:(容器技术)