Docker 安全深度剖析
容器的安全性究竟如何?
容器在很多场景下能替代虚拟机,但其隔离性并不像虚拟机那么强大。容器本质上只是在 Docker 服务器上运行的进程,尽管命名空间提供了一定的隔离,但由于容器共享 Docker 服务器的内核,而内核中并非所有内容都进行了命名空间隔离,所以存在不少安全隐患。
从安全角度看,容器比直接在主机上运行的应用更安全,因为 cgroups(若使用)和命名空间能对主机核心资源进行一定隔离。但不能将容器视为良好安全实践的替代品。如果应用在非容器环境中以非特权用户运行,那么在容器内也应如此。可以让 Docker 以非特权用户身份运行整个容器,在生产环境中,这是个不错的选择,尽管目前无法强制 Docker 以非特权用户启动所有容器,但手动这样做,或在运行的应用中尽快降低权限是很有必要的。
UID 0 带来的安全风险
容器中最主要的安全风险之一是,容器内的 root 用户实际上就是系统的 root 用户。虽然命名空间能将容器内的 root 用户与 /proc 和 /sys 文件系统中最危险的部分隔离开,但总体而言仍具有 root 访问权限。如果能访问命名空间外的资源,内核会将其视为 root。Docker 默认以 root 身份启动容器内的所有服务,因此需要像在 Linux 系统中一样管理应用的权限。
以下是一个示例,使用公共 Ubuntu 镜像启动容器并获取 bash shell,查看可访问的内容:
$ sudo docker run -t -i ubuntu /bin/bash
root@808a2b8426d1:/# lsmod
超级会员免费看
订阅专栏 解锁全文
40

被折叠的 条评论
为什么被折叠?



