Docker安全机制详解(容器资源限制)
1.Docker安全
Docker容器的安全性,很⼤程度上依赖于Linux系统⾃⾝,评估Docker的安全性时,主要考虑以下⼏个⽅⾯:
Linux内核的命名空间机制提供的容器隔离安全
当docker run启动⼀个容器时,Docker将在后台为容器创建⼀个独⽴的命名空间。命名空间提供了最基础也最直接的隔离。
与虚拟机⽅式相⽐,通过Linux namespace来实现的隔离不是那么彻底。
容器只是运⾏在宿主机上的⼀种特殊的进程,那么多个容器之间使⽤的就还是同⼀个宿主机的操作系统内核。
在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的,⽐如:时间。
Linux控制组机制对容器资源的控制能⼒安全
当docker run启动⼀个容器时,Docker将在后台为容器创建⼀个独⽴的控制组策略集合。
Linux Cgroups提供了很多有⽤的特性,确保各容器可以公平地分享主机的内存、CPU、磁盘IO等资源。
确保当发⽣在容器内的资源压⼒不会影响到本地主机系统和其他容器,它在防⽌拒绝服务攻击(DDoS)⽅⾯必不可少。
Linux内核的能⼒机制所带来的操作权限安全得了荨麻疹怎么办
能⼒机制(Capability)是Linux内核⼀个强⼤的特性,可以提供细粒度的权限访问控制。
⼤部分情况下,容器并不需要“真正的”root权限,容器只需要少数的能⼒即可。
默认情况下,Docker采⽤“⽩名单”机制,禁⽤“必需功能”之外的其他权限。
Docker程序(特别是服务端)本⾝的抗攻击性
使⽤Docker容器的核⼼是Docker服务端,确保只有可信的⽤户才能访问到Docker服务。
将容器的root⽤户映射到本地主机上的⾮root⽤户,减轻容器和主机之间因权限提升⽽引起的安全问题。
允许Docker 服务端在⾮root权限下运⾏,利⽤安全可靠的⼦进程来代理执⾏需要特权权限的操作。这些⼦进程只允许在特定范围内进⾏操作。
其他安全增强机制对容器安全性的影响
在内核中启⽤GRSEC和PAX,这将增加更多的编译和运⾏时的安全检查;并且通过地址随机化机制来避免恶意探测等。启⽤该特性不需要Docker进⾏任何配置。
使⽤⼀些有增强安全特性的容器模板。
⽤户可以⾃定义更加严格的访问控制机制来定制安全策略。
在⽂件系统挂载到容器内部时,可以通过配置只读模式来避免容器内的应⽤通过⽂件系统破坏外部环境,特别是⼀些系统运⾏状态相关的⽬录。
2.容器资源控制
(1)利⽤cgroup对docker做权限限制
Linux Cgroups 的全称是 Linux Control Group,是限制⼀个进程组能够使⽤的资源上限,包括 CPU
、内存、磁盘、⽹络带宽等等。 对进程进⾏优先级设置、审计,以及将进程挂起和恢复等操作。
Linux Cgroups 给⽤户暴露出来的操作接⼝是⽂件系统,它以⽂件和⽬录的⽅式组织在操作系统的 /sys/fs/cgroup 路径下。
执⾏此命令查看:mount -t cgroup
在 /sys/fs/cgroup 下⾯有很多诸如 cput、cpu、 memory 这样的⼦⽬录,也叫⼦系统。
在每个⼦系统下⾯,为每个容器创建⼀个控制组(即创建⼀个新⽬录)。
控制组下⾯的资源⽂件⾥填上什么值,就靠⽤户执⾏ docker run 时的参数指定。
关于鼠的成语
(2)利⽤cgroup对docker做权限限制
贻害无穷<1> CPU限额:在资源⽬录中修改
[root@rver1 cpu]# pwd
/sys/fs/cgroup/cpu
[root@rver1 cpu]# dd if=/dev/zero of=/dev/null & ##此时,对CPU的利⽤率⾼达99.9%
[1] 1333
[root@rver1 cpu]# cat cpu.shares ##在cpu.shares⽂件中,可以对进程调度程序所处理的进程组设置CPU时间分配的⽐重。通过修改这个值,就可以在分组间调整CPU时间的⽐例。默认值为1024
下班英文1024
[root@rver1 cpu]# cat cpu.cfs_quota_us ##cpu使⽤率的配额
-1
[root@rver1 cpu]# mkdir x1 ##在系统cpu资源⽬录下建⽴⽬录x1,在该⽬录下进⾏资源限制
[root@rver1 cpu]# cd x1
[root@rver1 x1]# echo 20000 > cpu.cfs_quota_us ##限制最⼤cpu使⽤率为20%
[root@rver1 x1]# echo 1333 > tasks
[root@rver1 x1]# top ##查看1333进程的具体使⽤情况
婴儿体温
运⾏容器时制定资源限制参数
[root@rver1 x1]# docker run -it --name vm1 --cpu-quota 20000 ubuntu会议摄影
root@e41f67c8b795:/# dd if=/dev/zero of=/dev/null & ##此时,通过限额,cpu使⽤率最⼤只能是20
% [1] 15
root@e41f67c8b795:/# [root@rver1 x1]# top
<2> 对内存限制:在资源⽬录中修改
桑田实乃梨[root@rver1 x2]# echo 314572800 > memory.limit_in_bytes ##限制使⽤的最⼤内存数
[root@rver1 x2]# cat memory.limit_in_bytes ##限制300MB 使⽤量,此时⼤于300MB 仍然可以使⽤,因为没有限制交换内存的使⽤314572800电影2012
利⽤cgroup对docker做权限限制 :安装cgroup管理⼯具
[root@rver1 x2]# yum arch cgroup
Loaded plugins: product-id, arch-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can u subscription-manager to register. ================================= N/S matched: cgroup ================================= libcgroup-tools.x86_64 : Command-line utility programs, rvices and daemons for
: libcgroup
libcgroup.i686 : Library to control and monitor control groups
libcgroup.x86_64 : Library to control and monitor control groups
Name and summary matches only, u "arch all" for everything.
[root@rver1 x2]# yum install libcgroup-tools.x86_64 -y
Loaded plugins: product-id, arch-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can u subscription-manager to register. docker | 2.9 kB 00:00:00
westos | 4.1 kB 00:00:00
Package libcgroup-tools-0.41-11.el7.x86_64 already installed and latest version
Nothing to do