Docker安全性(一)——Docker容器真的安全吗?

Docker安全性(一)——Docker容器真的安全吗?

本文翻译自Daniel J Walsh的一篇开源文章:http://opensource.com/business/14/7/docker-security-selinux

这篇文章是基于一个演讲中"今年在我DockerCon上的分享":http://v.youku.com/v_show/id_XODQwNjUwNTIw.html

这将讨论Docker容器的安全性,我们目前正在做什么,和我们将朝哪里走。

这是一个系列Docker安全的一部分,阅读第二部分

 

容器不包含一切,包括安全

我听到和读到了很多人假定Docker的容器实际上是沙箱应用程序,这意味着他们可以在他们的系统以root身份运行的Docker随机的应用程序。他们相信Docker容器实际上保护他们的主机系统。
•我听到有人说,Docker容器同样是安全的,因为在不同的虚拟机/ KVM正在运行的进程。
•我知道人们正在下载随机Docker镜像,然后启动他们自己的主机上。
•我甚至看到的PaaS服务器(还不是OpenShift)可以让用户上传自己的照片,以在多租户系统上运行。
•我有一个同事谁说:“Docker即将运行从Internet下载的随机代码,并作为root运行它”

“你能走进我的客厅里?”蜘蛛对苍蝇说。

停止假设Docker和Linux内核保护你免受恶意软件侵害。

 

你关心吗?

 

如果你是不是在多租户系统运行Docker,你正在使用一个容器中运行的服务,良好的安全实践,你也许并不需要担心。姑且认为在容器内运行的特权进程是相同的运行在容器外部特权进程。

有些人做容器的认为比正在运行的虚拟机的更好,更快的方法的错误。从安全的角度来看,容器要弱得多,我将在本文后面掩盖。

如果你相信,我这样做, - 意思视为运行Apache你把Apache服务的系统上运行的方式相同容器中Docker的容器应被视为“容器服务”,这意味着你会做以下几点:
•尽快删除权限
•尽可能以非root运行您服务
•容器内款待root,就好像它是root容器的以外

目前,我们正在告诉人们在一般条件到一个容器内处理权限的进程具有相同条件的容器外运行的特权进程。

不要在系统上运行随机的Docker图像。在很多方面我看Docker容器革命类似于1999年左右的Linux的革命。在那个时候,当管理员听到一个新酷Linux的服务,他们会:
•在像rpmfind.net的地方或者只是随机的的网站在Internet上搜索包
•下载程序到他们的系统
•如果通过RPM安装或使安装
•与特权运行它

 

怎么会错呢?

 

两个星期后,管理员听到关于zlib的脆弱性和具有搞清楚,如果,同时希望并祈祷这不是,他们的软件是脆弱的!

这是Red Hat分发等少数可信方已加强在扭转败局。红帽企业Linux管理员提供:
•一个值得信赖的存储库,他们可以从下载软件
•安全更新修复漏洞
•一个安全响应小组发现和管理漏洞
•一个工程师团队来管理/维护包和安全增强工作
•通用标准认证检查操作系统的安全性

仅运行可信方容器。我相信你应该继续从谁你已经从过去得到它一样的人得到您的代码/包。如果代码不是来自内部或受信任的第三方,不靠容器技术来保护你的主机。

 

那么,问题是什么?为什么容器中不包含那些内容?

 

最大的问题就是一切在Linux中没有命名空间。目前,Docker使用五个命名空间来改变系统的流程视图:过程,网络,安装,主机名,共享内存。

虽然这些给用户的安全性的某种程度它绝不是全面,像KVM。在KVM环境中虚拟机进程不跟主机内核直接。他们没有任何访问内核的文件系统,如/ sys和/sys/fs, /proc/*。

设备节点用来交流内核的虚拟机不是主机。因此,为了有一个特权提升了虚拟机,该过程必须subvirt(一个基于虚拟机的后门)虚拟机的内核,发现在管理程序中的漏洞,通过SELinux的控制突破(sVirt),这是非常紧的在虚拟机上,最后攻击主机内核。

当你在一个容器中运行你已经读懂了你在哪里聊到主机内核。

主要的内核子系统都没有命名空间,如:
•SELinux的
•cgroup中
•在/ sys下的文件系统
•/proc/sys, /proc/sysrq-trigger, /proc/irq, /proc/bus

设备没有命名空间:
•/ dev/ MEM
•/ dev/ SD*文件系统设备
•内核模块

如果你能沟通或攻击的其中之一作为特权的过程中,你可以拥有自己的系统。

本文翻译自Daniel J Walsh的一篇开源文章:http://opensource.com/business/14/7/docker-security-selinux

 

PPT的大概内容页面:

Are Docker containers really secure?

Bringing new security features to Docker

How to grant rights to users to use Docker in Fedora

PPT的大概内容:

dockercon14 San Francisco June 9-10, 2014
 Docker and SELinux
Daniel J Walsh
Serior Principal Software Engineer
@rhatdan,danwalsh.livejournal.com,dwalsh@redhat.com

Containers do not contain

Do you care?

Everything in Linux is not namespaced
Not comprehensive like kvm
Kernel file systems:/sys,/sys/fs,/proc/sys
Cgroups,SELinux,/dev/mem,kernel modules

Treat container services just like regular services
Drop Privileges as quickly as possible
Run your services as non Root whenever possible
Treat root within a container as if it is root outside of the container
Don't run random containers on your system
Only run containers from trusted parties

Overview of security within docker containers
Read only mount points
/sys
/proc/sys
/proc/sysrq-tigger
/proc/irq
/proc/bus

Capabilityies
man capabilities

Description
For the purpose of performing permission checks, traditional UNIX implementations distinguish two categories of processes: privileged process (whose

effective user ID is 0, referred to as superuser or root), and unprivileged processes (whose effective UID is nonzero).
Privileged processes bypass all kernel permission checks, while unprivileged processes are subject to full permission checking based on the process's

credentials (usually: effective UID, effective GID, and supplementary group list).

Stating with kenel 2.2, Linux divedes the privileges traditionally associated with superuser into distinct units, know as capabilities, which can be

independently enabled and disabled. Capabilities are a per-thread attribute.

Capabliities removed
CAP_SETPCAP Modify process capablities
CAP_SYS_MODULE Insert/Remove kernel modules
CAP_SYS_RAWIO Modify Kernel Memory
CAP_SYS_PACCT Configure process accounting

...

SELinux gotchas
SELinux does not work with BTFS
Volume Mounts /var/lib/myapp
chcon -Rt svirt_sandbox_file_t/var/lib/myapp
Pull request for automatic labeling:
docker run -v /var/lib/myapp:/var/lib/myapp:Z ...
docker run -v /var/lib/myapp:/var/lib/myapp:z ...

Future
Ueser Name Space
libseccomp
--opt to all you to tighten security
--opt - Drop Capabilities
--opt - Alternate SELinux Types

 

时间: 2024-08-29 19:03:49

Docker安全性(一)——Docker容器真的安全吗?的相关文章

Docker安全性——官方文档[译]

Docker安全性--官方文档[译] 本文译自Docker官方文档:https://docs.docker.com/articles/security/ 在审查Docker的安全时,需要考虑三个主要方面:◦容器内在的安全性,由内核命名空间和cgroup中实现;◦docker守护程序本身的攻击面;◦加固内核安全特性,以及它们如何与容器中互动. 内核 命名空间 Kernel Namespace Docker容器中非常相似LXC容器,并且它们都具有类似的安全功能.当您以"docker run"

Docker安全性(二)——带来了新的安全功能给Docker

Docker安全性(二)--带来了新的安全功能给Docker 本篇翻译自Daniel J Walsh的一篇开源文章:http://opensource.com/business/14/9/security-for-docker 作者的演讲视频:http://v.youku.com/v_show/id_XODQwNjUwNTIw.html 在这系列的第一篇Docker的安全性,我写了"容器中不包含".在第二篇文章中,我将讨论为什么我们这样做并且我们正在对它做什么. Docker,红帽和开

Gartner表示Docker安全性“尚不成熟”

Gartner公司的分析师发表一份声明,指出尽管这款容器化工具已经闯出了响亮的名号.但Docker的安全性仍然不够成熟. 于上周发表的这篇<Docker管理下的容器安全性评估>指出,"Linux容器在成熟程度方面已经足以应对私有以及公有PaaS的实际需求",但"--在安全性管理与控制方面的表现却令人失望,而且也无法为常见控制任务在机密性.完整性与可用性等方面提供必要支持."   这份文件同时表示,将Docker运行在虚拟机管理程序当中--一般指VMwar

你真的了解Docker吗?——Docker插件机制详解

云栖TechDay活动第十八期中,阿里云容器服务团队的核心成员陈萌辉带来了题为<Docker插件机制详解>的分享,分享中,他结合阿里云容器服务实践介绍了Docker插件的基本原理.实现方法以及插件机制未来的演进. 幻灯片下载地址:https://yq.aliyun.com/attachment/download/?filename=bdefe06ba7a14d7604af5a63a4bcc4f3.pdf 以下为现场分享观点整理. 为什么需要Docker插件?   Docker之所以这么火并且有

Docker使用Link在容器之间建立连接_docker

在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器作为客户端来连接使用mysql数据库服务.下面我们就来看看Docker是怎样通过Link来实现这种功能的. 1. 这里我们首先创建两个容器image,一个用来模拟mysql数据库,另外一个使用mysql的client来模拟一些使用mysql服务的应用,这种应用可以是任何php,python,java

初识docker—创建WEB应用容器1python+flask

初识docker-创建WEB应用容器1python+flask Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项. runoob@runoob:~# docker 可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法. 例如我们要查看 docker stats 指令的具体使用方法: runoob@runoob:~# docker stats --help 运行

Docker数据持久化与容器迁移(三)

上节讲到当容器运行期间产生的数据是不会在写镜像里面的,重新用此镜像启动新的容器就会初始化镜像,会加一个全新的读写入层来保存数据.如果想做到数据持久化,Docker提供数据卷(Data volume)或者数据容器卷来解决问题,另外还可以通过commit提交一个新的镜像来保存产生的数据.那么,来一一看下各自的使用方法. 一.数据卷 数据卷特性: 可以绕过UFS文件系统,为一个或多个容器提供访问. 完全独立于容器的生存周期,因此不会在删除容器时删除其挂在的数据卷. 数据卷特点: 数据卷在容器启动初始化

Docker基础:连接容器

本文讲的是Docker基础:连接容器[编者的话]本文是作者学习Docker的笔记,介绍了Docker上的网络,并提供了例子. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为主题,包括:Docker Plugin.Docker storage driver.Docker Volume Pulgin.Kubernetes Storage机制.容器网络实现原理和模型.Docker网络实现.网络插件.Calico.Contiv Netplugin.开源企业级镜像仓库Harbor

两种方式创建docker镜像的启动容器时区别介绍(总结篇)_docker

Docker是建立在Linux内核基础上的,在目前的主流Linux系统中,都已经原生支持了Docker且使用体验也最好,当然,在Windows平台和MacOS系统中也支持Docker,只是需要使用类似Boot2Docker等虚拟化工具来提供Linux支持. 下面重点给大家介绍基于两种创建docker镜像的启动容器时区别,感兴趣的朋友可以跟着小编一起学习! 1.凡是用docker commit生成的镜像启动的时候可以加载一个启动自己应用的脚本,例如: docker run -d -P tomcat