Security and Stable Release Updates
- Security and Stable Release Updates
7.1. Fixing a Security Bug in Ubuntu
7.1.1. Introduction
其實在Ubuntu上面修改security bug並沒有跟修復一般的bug有什麼不一樣,假設你已經對修復一般的bug很熟悉的話。為了描述主要差異,底下嘗試著使用在Ubuntu 12.04 LTS(Precise Pangolin)的dbus package來做個security update。
7.1.2. Obtaining the source
在這個案例裡,因為我們已經知道我們要修復 在Ubuntu 12.04 LTS(Precise Pangolin)的dbus package,所以第一件事就是決定要下載哪個版本,我們可以使用底下指令:
$ rmadison dbus | grep precise
dbus | 1.4.18-1ubuntu1 | precise | source, amd64, armel, armhf, i386, powerpc
dbus | 1.4.18-1ubuntu1.4 | precise-security | source, amd64, armel, armhf, i386, powerpc
dbus | 1.4.18-1ubuntu1.4 | precise-updates | source, amd64, armel, armhf, i386, powerpc
一般來說要選擇最高的版本而且並不是在 「-proposed」 或是「 -backports」狀態的。因為我們要更新Precise的dbus,所以你要下載的是從precise-update的 1.4.18-1ubuntu1.4。
$ bzr branch ubuntu:precise-updates/dbus
7.1.3. Patching the source
現在我們有source package了,我們必須要修復這個漏洞。你可以採用任何的修補(Patch)方法來修補這個package,包含了UDD技術,但是這個案例我們只會用到 edit-patch (ubuntu-dev-tools package)。 「 edit-patch 」是patch package最簡單的方法,而且跟其他你所知道的patch系統都相容。
使用edit-patch來建立你的patch:
$ cd dbus
$ edit-patch 99-fix-a-vulnerability
這將會套用目前存在的patch並且將會將這個打包程序給放在暫存的資料夾裡。 先修復這個漏洞,通常upstream會提供patch,所以你就可以套用這個patch:
$ patch -p1 < /home/user/dbus-vulnerability.diff
改變完以後,按「 Ctrl-D 」或是輸入「exit」離開暫時的shell。
7.1.4. Formatting the changelog and patches
在套用了你的patch以後,下一步是上傳「changelog」,命令「dch」是用來編輯 debian/changelog檔案的,而「edit-patch」則是會在un-applying所有的patch以後自動的啟動dch。如果你沒有使用「edit-patch」,你可以手動啟動「dch -i」。但是不像是一般的patches格式,你必須對於security update使用以下格式:
dbus (1.4.18-2ubuntu1.5) precise-security; urgency=low
* SECURITY UPDATE: [DESCRIBE VULNERABILITY HERE]
- debian/patches/99-fix-a-vulnerability.patch: [DESCRIBE CHANGES HERE]
- [CVE IDENTIFIER]
- [LINK TO UPSTREAM BUG OR SECURITY NOTICE]
- LP: #[BUG NUMBER]
...
使用適當的patch tag來更新你的tag,你的patch應該要有原始版本的最小值, Description 和 Bug-Ubuntu tags,舉例來說, debian/patches/99-fix-a-vulnerability.patch的格式應該要如下:
## Description: [DESCRIBE VULNERABILITY HERE]
## Origin/Author: [COMMIT ID, URL OR EMAIL ADDRESS OF AUTHOR]
## Bug: [UPSTREAM BUG URL]
## Bug-Ubuntu: https://launchpad.net/bugs/[BUG NUMBER]
Index: dbus-1.4.18/dbus/dbus-marshal-validate.c
...
7.1.5. Test and Submit your work
這個步驟就像之前處理一般的bug一樣,具體來說,你應該要:
- 建置你的套件並且驗證它編譯時沒有任何error和新增的warning。
- 從之前的版本升級成新版的套件。
- 測試這個漏洞是否還存在,並且檢查是否有衍生其他的漏洞。
- 經由Launchpad發送你的merge request,並且發送一個Launchpad bug並且將其歸類為「security bug」,並且記得要訂閱「ubuntu-security-sponsors」。
如果目前這個漏洞並不是public的,那就先不要發起merge request,並且確保你的bug的標記是private。
上傳的bug必須要包含一個Test Case,舉例來說:必須要有一段說明,主旨是在說明之前舊版是如何重現這個bug,而確保新版的不會在出現這個問題。bug report必須確認在Ubuntu修復的版本必須要比出現bug的版本還要新(像是以上的例子就是要比Precise還要新)。如果在比較新的Ubuntu版本這個bug還沒有被修復的話,那你就要準備更新這個版本。
7.2. Stable Release Updates
這邊也允許可以將版本更新到package有嚴重問題的版本,像是上一版的嚴重的regression還沒修好或者是有bug會造成資料流失等等。只有在這個改變裡,bug現象可以很簡單的理解和驗證,才可以被允許升級。 Stable Release的更新流程也像是security的bug除了你必須要訂閱ubuntu-sru以外。
這個更新將會進入『proposed archive』(舉例來說precise-proposed),在這邊它將會需要被檢查是否已經修復這個問題了,並且沒有造成其他新的問題。一個禮拜之內如果沒有被發現有任何其他問題的話,就會被移到更新區了。更多了細節請參考Stable Release Updates wiki page。
Ref:
http://packaging.ubuntu.com/html/security-and-stable-release-updates.html