Harbor,clair 和 docker image 的漏洞修复

Harbor,clair 和 docker image 的漏洞修复

纯干货分享
http://jiangjiang.space 回忆书签,转载请注明出处,谢谢

1.1 功能全面的registry:Harbor

vmware harbor 集成了registry,clair , notary 和 非常不错的UI
提供包括AD/ldap,RBAC在内的众多企业环境需要的功能。

关于Harbor的安装和配置请见我另一篇文章:【TODO:抱歉还没写呢。。】

1.2 Harbor 和 Clair , Notray

1.2.1 Clair

clair 是 coreos 开源的容器漏洞扫描工具,在容器逐渐普及的今天,容器镜像安全问题日益严重。clair 是目前少数的开源安全扫描工具,主要提供OS(centos,debian,ubuntu等)的软件包脆弱性扫描。

clair的可以单机部署也可以部署到k8s上,可以与现有的registry集成。架构如下:

harbor 很好的整合了 clair ,通过简单的UI就可以对上传的镜像扫描,还可以通过每天的定时扫描对所有镜像进行统一扫描。

关于 Clair 请浏览: https://github.com/coreos/clair

1.2.2 Notray

Notary
是一套docker镜像的签名工具, 用来保证镜像在pull,push和传输工程中的一致性和完整性。
避免中间人攻击,避免非法的镜像更新和运行。

ps: Notray 可能是 no Troy 的变体,我自己YY的

其工作流程如下:
Notray工作流程

Harbor也集成了Notray, 但是目前集成的并不全面, 在删除已经签名的镜像时仍然需要收工执行notray命令行,期待更进一步的简化流程。
本文并没有用到Notray,还是在不久的将来再介绍吧。

关于Notray请浏览 https://github.com/docker/notary

1.3 镜像的脆弱性补完过程

1.3.1 镜像的拉取和漏扫

本问以常见的centos镜像为例,现在大家常用的centos6.8 在dockerhub上的tag是:

centos:6.8

a.拉取和推送镜像到harbor

之前已经搭好了一套harbor, 开启了clair 和notray 。

docker pull centos:6.8

推送到 harbor

docker login myharbor.com   # 输入用户名密码
docker  tag centos:6.8  myharbor.com/pub/centos:6.8
docker push myharbor.com/pub/centos:6.8

执行脆弱性检查:

登陆:

在Harbor界面的项目->pub(我之前自己创建的项目)


->找到 centos 点击旁边的图标,选择scan

扫描结果如下:

centos 6.8 一共有 9个高位漏洞, 11个中等漏洞。

漏洞详细列表:

b. 手动打补丁

登陆容器:

docker run -it centos:6.8 /bin/bash

更新openssl

yum update openssl
Updated:
  openssl.x86_64 0:1.0.1e-57.e

查看image的变动

docker diff b09    #b09是刚刚启动的容器的前几位

提交变动

docker commit -a "J.J." -m "Fix openssl Vulnerabilities"  b09841d73def myregistry.com/pub/centos:6.8-Fix1
docker push myregistry.com/pub/centos:6.8-Fix1

再次扫描漏洞
可以看到,漏洞数变成了8.

纯干货分享
http://jiangjiang.space 回忆书签,转载请注明出处,谢谢

c.通过dockerfile打补丁

创建build目录

 mkdir  -p ~/build/centos-fix
 touch build/centos-fix/Dockerfile

编辑Dockerfile内容如下:

FROM myregistry.com/pub/centos:6.8
MAINTAINER "J.J."
LABEL description="build for FIX centos6.8 image vulnerabilities"
LABEL cvs="RHSA-2016:1292 RHSA-2016:1944 RHSA-2016:1944 RHSA-2016:2093 RHSA-2016:2093 RHSA-2016:2141 RHSA-2016:2141 RHSA-2017:0063 RHSA-2017:0063 RHSA-2017:1105 RHSA-2017:1105 RHSA-2017:1202 RHSA-2017:1202 RHSA-2017:1364 RHSA-2017:1364 RHSA-2017:1364 RHSA-2017:1480 RHSA-2017:1480 RHSA-2017:1679 RHSA-2017:1679 RHSA-2017:2832 RHSA-2017:2832 RHSA-2017:2832 "

# 163 repo
RUN /bin/mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \
  && curl http://mirrors.163.com/.help/CentOS6-Base-163.repo -o /etc/yum.repos.d/CentOS6-Base.repo \
  && yum clean all --disableplugin=fastestmirror \
  && yum makecache --disableplugin=fastestmirror

# yum update
RUN echo 'yum update' \
&& yum update -y  --disableplugin=fastestmirror  \
     openssl \
     openssl-devel \
     python \
     bind \
     bind-devel \
     bind-libs \
     bind-utils \
     nss \
     nss-sysinit \
     nss-tools \
     nss-pkcs11-devel \
     glibc \
     glibc-common \
     libxml2  \
     libxml2-devel \
     libxml2-debuginfo \
     libxml2-python \
     libxml2-static

开始build

cd  ~/build
docker build -t myregistry.com/pub/centos:6.8-fix2 centos-fix
docker history myregistry.com/pub/centos:6.8-fix2 # 查看变动
docker push myregistry.com/pub/centos:6.8-fix2 

再次扫描可以看到所有高位漏洞都消失了。

下一步要研究镜像的同步,瘦身和jenkins自动构建。

完了。

纯干货分享
http://jiangjiang.space 回忆书签,转载请注明出处,谢谢