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 回忆书签,转载请注明出处,谢谢