对于安全漏洞, 我们是在 Security Tracker 的基础上进行处理,处理的流程如下:
- 理解
bug评估漏洞是否存在若被
debian检测过,则会标记漏洞是否存在。但有些bug还未检测,这就需要测试是否能够重现。若漏洞不存在,则进行标记;否则继续下一步(部分无条件重现的
bug,也继续下一步)。 - 查看是否有
patch存在如果
bug在详细页面标明了patch地址,然后继续向下处理;否则就将其标记为无patch延后处理。 - 初始化项目
使用
apt-get source <package>下载项目源码,然后执行以下步骤初始化项目- 安装编译依赖
sudo apt-get build-dep <package> - 清理应用的
patchquilt pop -af - 清理编译残留的文件
./debian/rules clean - 初始化
git init && git add . && git commit -m "Init"
- 安装编译依赖
- 应用
bug的patch在应用
patch之前需要先将原有的patch都应用上,然后再应用bug的patch,具体步骤如下:- 创建新分支
以
bug id创建新分支(git checkout -b <bug id>)。 - 应用原有的
patch使用命令
dpkg-source -b ./应用原有的patch,但有些项目是在debian/rules里指定了patch的应用方法,如python2.7就该使用./debian/rules update-patches。 然后添加改动的文件git add .。 - 应用
patch执行
patch -p1 < <bug patch>应用
- 创建新分支
- 打包测试
执行
dpkg-buildpackage -us -uc -nc打包,然后安装测试,若验证通过则继续下一步。未通过则继续修改patch进行测试。 - 推送更改到上游
- 到 debian patch 上创建项目
- 添加新建的项目作为本地项目的
remote origin - 推送到上游
git push -u origin master
- 标记项目为已解决
- 仓库打包并测试
内网仓库打包并通知测试人员更新测试,若通过后则标记为测试通过,并推送到外网。未通过的则继续修改
patch进行测试。
以上为一个新项目的 bug 处理流程,若 debian patch 上已经存在,则执行 git clone <repository> 从上面的第 4 步开始。
安全漏洞的 bug 修复后推送到 backport 的 ppa 中, ppa 需要分内外网,在 bug 处于特定状态后触发打包。
为了方便记录漏洞的状态,编写了 deepin cve tracker 工具进行管理,使用方法见项目中的 README.org 。
后期计划提供 web 页面进行管理。
若 backport 中的 package 在主仓库中有了更新,则按以下流程处理:
- 检查新版本中对应的漏洞是否存在,若存在则进行下一步
- 在新版本上修改并应用
patch,若patch无法应用则标记为无patch延后处理 - 测试漏洞是否修复,修复则下一步,未修复则继续查找
patch - 更新 debian patch 上的项目
先按严重级别(高级,中级,低级等)依次处理,每种级别又按以下顺序处理:
- 已有
patch的漏洞 - 无
patch但可重现的漏洞 - 无
patch也不可重现的漏洞(主要是查找漏洞的重现方式)