Docker的安全机制

Docker的安全很大程度依赖于Linux系统自身的安全,在使用中主要考虑的是一下几个方面的内容:

        1、Linux内核的命名空间(namespace)机制提供的容器隔离安全;
        2、Linux控制组(cgroup)对容器资源的控制能力安全;
        3、Linux内核的能力机制所带来的操作系统安全;
        4、Docker程序(主要是服务器端)本身的抗攻击能力;
        5、其他安全增强机制的影响。

1.1 命名空间隔离安全

        命名空间隔离,是最基础的隔离机制。Docker在启动容器时,会为容器创建独立的命名空间,让每个容器作为单独的个体存在。

###命名空间
[root@server1 ~]# docker run -it --name vm1 rhel7 bash
            ##为每一个运行的进程创建单独的命名空间,Pid进行隔离<相当于运行的进程>

为没一个 

图 1 单独的命名空间

【说明】 这种隔离方式并不完整,因为本身容器依赖于宿舍主机运行,相当于运行在宿主机上的进程,例如时间等信息,依然和宿主机共享。

 1.2 控制组(cgroup)资源隔离安全

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

####控制资源组

###查看挂载到/sys/fs/cgroup中的资源分配策略
[root@server1 ~]# mount -t cgroup
[root@server1 ~]# cd /sys/fs/cgroup/cpu/docker
图 2 使用cgroup控制

 【说明】Linux cgroup本身提供了很多有用的特性,确保容器可以公平分享主机的内存、cpu等资源,确保当前容器的资源压力不会影响到宿主机上其他容器的使用,在DDos方面必不可少。

        cgrop作为Linux内核特有的机制,对于每一个进程我们都可以设置相应的cgrop资源管理组,对每一个进程进行管理。

1.3  内核能力机制

        内核能力也是依赖于Linux内核机制所实现的,这里可以提供细粒度的权限访问控制,采用白名单机制,禁用必须功能外的其他权限。

##设置特权级容器运行
[root@server1 ~]# docker run -it --privileged=true --name vm1 rhel7 bash
                        ###--privileged=true 设置超级用户权限

###添加白名单  https://man7.org/linux/man-pages/man7/capabilities.7.html

[root@server1 ~]# docker run -it --rm --cap-add NET_ADMIN --name vm1 rhel7 bash
                                    ##添加某一项的特权
[root@server1 ~]# docker inspect vm1 | grep Capadd
图 2 内容权限
图 3 所有的特权

 

图 4 添加某一项特权

 

 1.4 Docker服务端防护

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

###安全加固   https://github.com/lxc/lxcfs

#######使用LXCFS#######
yum install -y lxcfs-2.0.5-3.el7.centos.x86_64.rpm

##通过挂载来实现
docker run -it -m 256m --memory-swap 256m \
      -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \
      -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
      -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
      -v /var/lib/lxcfs/proc/stat:/proc/stat:rw \
      -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
      -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
      -v /var/lib/lxcfs/proc/slabinfo:/proc/slabinfo:rw \
      ubuntu:18.04 /bin/bash

1.5 其他安全特性

        使用有增强安全特性的容器模板;用户可以定义更加严格的访问控制机制等 (比如文件系统挂载到容器内部时,设置只读)

容器安全加固思路:

        保证镜像安全 --> 保证容器安全

镜像安全:安全的基础镜像;删除镜像中的setuid和setgid;启用Docker的内容信任;最小安装原则;对镜像进行安全扫描(Clair);使用非ROOT用户运行。

容器安全:对宿主机安全机制进行加固;限制容器之间的流量交流;配置Docker守护进程的TLS身份认证;启用命名空间;限制内存使用;设置优先级。

 顶尖的Docker安全开源工具:Clair ;Dagda;Notary

遗留的安全问题:内核子系统没有命名空间;设备没有命名空间

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值