对于安全漏洞, 我们是在 Security Tracker 的基础上进行处理,处理的流程如下:
- 理解
bug
评估漏洞是否存在若被
debian
检测过,则会标记漏洞是否存在。但有些bug
还未检测,这就需要测试是否能够重现。若漏洞不存在,则进行标记;否则继续下一步(部分无条件重现的
bug
,也继续下一步)。 - 查看是否有
patch
存在如果
bug
在详细页面标明了patch
地址,然后继续向下处理;否则就将其标记为无patch
延后处理。 - 初始化项目
使用
apt-get source <package>
下载项目源码,然后执行以下步骤初始化项目- 安装编译依赖
sudo apt-get build-dep <package>
- 清理应用的
patch
quilt 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
也不可重现的漏洞(主要是查找漏洞的重现方式)