docker安全篇
理解docker安全
Docker容器的安全性,很大程度上依赖于Linux系统自身,评估Docker的安全性时,主要考虑以下几个方面:
- Linux内核的命名空间机制提供的容器隔离安全
- Linux控制组机制对容器资源的控制能力安全。
- Linux内核的能力机制所带来的操作权限安全
- Docker程序(特别是服务端)本身的抗攻击性。
- 其他安全增强机制对容器安全性的影响。
命名空间隔离的安全
- 当docker run启动一个容器时,Docker将在后台为容器创建一个独立的命名空间。命名空间提供了最基础也最直接的隔离。
- 与虚拟机方式相比,通过Linux namespace来实现的隔离不是那么彻底。
- 容器只是运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核。
- 在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的,比如:时间
当docker run启动一个容器时,Docker将在后台为容器创建一个独立的命名空间。命名空间提供了最基础也最直接的隔离。
[root@server2 30970]# docker run -d --name demo nginx
[root@server2 ~]# docker inspect demo | grep Pid
"Pid": 30970,
[root@server2 3]# cd /proc/30970/
[root@server2 30970]# cd ns/
[root@server2 ns]# ls
ipc mnt net pid user uts
控制组资源控制的安全
- 当docker run启动一个容器时,Docker将在后台为容器创建一个独立的控制组策略集合。
- Linux Cgroups提供了很多有用的特性,确保各容器可以公平地分享主机的内存、CPU、磁盘IO等资源。
- 确保当发生在容器内的资源压力不会影响到本地主机系统和其他容器,它在防止拒绝服务攻击(DDoS)方面必不可少。
当docker run启动一个容器时,Docker将在后台为容器创建一个独立的控制组策略集合。
[root@server2 ns]# cd /sys/fs/cgroup/
[root@server2 cgroup]# ls
[root@server2 cgroup]# cd cpu
[root@server2 cpu]# ls
[root@server2 cpu]# cd docker/
[root@server2 docker]# ls
b98f6dc220c0f70b520975a632810e4947e4a08e1fe744fda6043dd2faf89725 cpu.cfs_quota_us
[root@server2 docker]# docker ps
b98f6dc220c0