容器没有hypervisor,怎样实现容器之间的安全呢,避免病毒的攻击?

容器没有hypervisor,怎样实现容器之间的安全呢,避免病毒的攻击。

参与3

1同行回答

michael1983michael1983  技术总监 , 某证券
在传统虚拟化技术架构中,Hypervisor虚拟机监视器是虚拟机资源的管理与调度模块。而在容器架构中,由于不含有Hypervisor层,因此需要依靠操作系统内核层面的相关机制对容器进行安全的资源管理。1 )容器资源隔离与限制   在资源隔离方面,与采用虚拟化技术实现操作系统内核级隔...显示全部

在传统虚拟化技术架构中,Hypervisor虚拟机监视器是虚拟机资源的管理与调度模块。而在容器架构中,由于不含有Hypervisor层,因此需要依靠操作系统内核层面的相关机制对容器进行安全的资源管理。

1 )容器资源隔离与限制
   在资源隔离方面,与采用虚拟化技术实现操作系统内核级隔离不同,Docker通过Linux内核的Namespace机制实现容器与宿主机之间、容器与容器之间资源的相对独立。通过为各运行容器创建自己的命名空间,保证了容器中进程的运行不会影响到其他容器或宿主机中的进程。
   在资源限制方面,Docker通过CGroups实现宿主机中不同容器的资源限制与审计,包括对CPU、内存、I/O等物理资源进行均衡化配置,防止单个容器耗尽所有资源造成其他容器或宿主机的拒绝服务,保证所有容器的正常运行。
   但是,CGroups未实现对磁盘存储资源的限制。若宿主机中的某个容器耗尽了宿主机的所有存储空间,那么宿主机中的其他容器无法再进行数据写入。Docker提供的–storage-opt=[]磁盘限额仅支持Device Mapper文件系统,而Linux系统本身采用的磁盘限额机制是基于用户和文件系统的quota技术,难以针对Docker容器实现基于进程或目录的磁盘限额。
   因此,可考虑采用以下方法实现容器的磁盘存储限制:

为每个容器创建单独用户,限制每个用户的磁盘使用量;
选择XFS等支持针对目录进行磁盘使用量限制的文件系统;
为每个容器创建单独的虚拟文件系统,具体步骤为创建固定大小的磁盘文件,并从该磁盘文件创建虚拟文件系统,然后将该虚拟文件系统挂载到指定的容器目录。

2 )容器能力限制
Linux内核能力表示进程所拥有的系统调用权限,决定了程序的系统调用能力。
容器的默认能力包括CHOWN、DAC_OVERRIDE、FSETID、SETGID、SETUID、SETFCAP、NET_RAW、MKNOD、SYS_REBOOT、SYS_CHROOT、KILL、NET_BIND_SERVICE、AUDIT_WRITE等。

3 )强制访问控制
强制访问控制(Mandatory Access Control, MAC)是指每一个主体(包括用户和程序)和客体都拥有固定的安全标记,主体能否对客体进行相关操作,取决于主体和客体所拥有安全标记的关系。在Docker容器应用环境下,可通过强制访问控制机制限制容器的访问资源。Linux内核的强制访问控制机制包括SELinux、AppArmor等。

4 ) Seccomp 机制
Seccomp(Secure Computing Mode)是Linux内核提供的安全特性,可实现应用程序的沙盒机制构建,以白名单或黑名单的方式限制进程能够进行的系统调用范围。
在Docker中,可通过为每个容器编写json格式的seccomp profile实现对容器中进程系统调用的限制。

收起
证券 · 2020-04-02
浏览1036

提问者

raopinglin
其它威达高科

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2020-04-01
  • 关注会员:2 人
  • 问题浏览:1574
  • 最近回答:2020-04-02
  • X社区推广