《Clair二次开发指南1——Clair编译与使用》

来源:互联网 发布:java外部类访问内部类 编辑:程序博客网 时间:2024/06/16 14:56

Clair简介:

Clair是一个开源项目,用于对应用程序容器中的漏洞进行静态分析,目前支持的容器有appc和docker。

Clair目前共发布了21个release,这里我们使用其第20个release版本,即V2.0.0进行源码剖析。下载地址为:https://github.com/coreos/clair/archive/v2.0.0.zip


Clair会定期从一组配置的源中获取漏洞元数据,并将其存储在数据库中。

客户端使用Clair API来索引他们的容器图像; 这将解析已安装的源包列表并将它们存储在数据库中。

客户端使用Clair API来查询数据库; 关联数据是实时完成的,而不是需要重新扫描的缓存结果。

当发生漏洞元数据更新时,一个包含受影响的镜像的webhook可以配置为页面或阻止部署。


Clair架构:



Clair主要包括以下模块:

  • 获取器(Fetcher)- 从公共源收集漏洞数据

  • 检测器(Detector)- 指出容器镜像中包含的Feature

  • 容器格式器(Image Format)- Clair已知的容器镜像格式,包括Docker,ACI

  • 通知钩子(Notification Hook)- 当新的漏洞被发现时或者已经存在的漏洞发生改变时通知用户/机器

  • 数据库(Databases)- 存储容器中各个层以及漏洞

  • Worker - 每个Post Layer都会启动一个worker进行Layer Detect
编译与使用:

这里使用源码编译安装。建议使用ubuntu系统进行编译。在编译之前,确保git,bzr,rpm,xz等模块已经安装好。
下载好V2.0.0版本并解压后,执行go build github.com/coreos/clair/cmd/clair进行编译。


编译好后启动clair。clair启动时默认会从/etc/clair/config.yaml加载数据库相关配置文件。因此我事先已经安装好postgresql数据库,其版本为9.5.


接下来我们编译analyze-local-images。(这个是本地镜像分析的客户端,虽然clair现在已经不推荐使用此客户端,但它确实是最适合拿来分析的版本。)
go get -u github.com/coreos/analyze-local-images
go build github.com/coreos/analyze-local-images
编译好后扫描本地已经安装好的nginx镜像,扫描结果如下:


至此,我们已经学会了clair的简单使用方法。下一篇文章我们会进一步对其源码进行剖析。