Security and Stable Release Updates

  1. 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

results matching ""

    No results matching ""