Ubuntu logo

Packaging Guide

5. Оновлення безпеки й оновлення стабільних релізів

5.1. Виправлення помилок безпеки в Ubuntu

5.1.1. Вступ

Виправлення дірок у безпеці в Ubuntu фактично не відрізняється від виправлення звичайного багу, і припускається, що Ви знайомі з виправленням звичайних багів. Для демонстрації відмінностей ми будемо додавати у пакунок dbus в Ubuntu 12.04 LTS (Precise Pangolin) оновлення для системи безпеки.

5.1.2. Отримання джерельного коду

У даному прикладі ми вже знаємо, що бажаємо виправити пакунок dbus в Ubuntu 12.04 LTS (Precise Pangolin). Тому спочатку потрібно визначити версію пакунку, який бажаєте стягнути. Ми можемо використовувати rmadison у якості допомоги у даній ситуації.

$ 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. Оскільки ми оновлюємо dbus Precise, Ви стягнете 1.4.18-1ubuntu1.4 з precise-updates:

$ bzr branch ubuntu:precise-updates/dbus

5.1.3. Створення латки

Тепер, коли ми маємо джерельний пакунок, ми повинні зробити латку для виправлення вразливості. Ви можете використовувати будь-який метод, що підходить для даного пакунку, у тому числі методи UDD, але у цьому прикладі будемо використовувати edit-patch (з пакунку ubuntu-dev-tools). edit-patch — це найпростіший спосіб для виправлення пакунків, що працює з будь-якою системою латання, яку Ви можете собі уявити.

Щоб створити латку за допомогою edit-patch:

$ cd dbus
$ edit-patch 99-fix-a-vulnerability

Це застосує усі існуючі латки й помістить пакунок у тимчасовий каталог. Тепер відредагуйте файли для виправлення вразливостей. Зазвичай в апстрімі лежить і латка, тому Ви одразу можете її застосувати:

$ patch -p1 < /home/user/dbus-vulnerability.diff

Після внесення необхідних змін просто натисніть Ctrl-D або наберіть exit, щоб залишити тимчасову командну оболонку.

5.1.4. Форматування файлу changelog і латок

Після застосування латок Вам знадобиться внести зміни в лог. Команда dch використовується для редагування файлу debian/changelog і edit-patch автоматично запустить dch після відкату усіх латок. Якщо Ви не користуєтеся edit-patch, то можете запустити dch -i вручну. На відміну від звичайних латок, Вам слід використовувати наступний формат (зверніть увагу, що в імені дитрибутиву використовується precise-security, оскільки це оновлення безпеки для Precise) для оновлень безпеки:

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

Оновіть свою латку для використання відповідних тегів. Ваша латка повинна містити як мінімум теги Origin, Description і Bug-Ubuntu. Наприклад, відредагуйте 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
...

Множинні вразливості можна виправити одним завантаженням безпеки, просто переконайтеся що використовуєте різні латки для різних вразливостей.

5.1.5. Перевірка й відправка Вашої праці

На цьому етапі процес такий самий, як при виправленні звичайних вад в Ubuntu. А саме, Вам потрібно:

  1. Виконати збірку пакунку й перевірити, що він компілюється без помилок і компілювальник не видає ніяких додаткових застережень

  2. Виконати оновлення з попередньої версії пакунку до нової версії

  3. Переконатися, що новий пакунок латає вразливість й не вносить ніяких погіршень

  4. Відправляйте свою працю через пропозицію про об’єднання Launchpad й відправляйте баг в Launchpad, переконавшись що позначили баг як помилку безпеки, й для підписки ubuntu-security-sponsors

Якщо це вразливість у безпеці, про яку ще не оголошено публічно, то не відправляйте пропозицію злиття й переконайтеся, що Ви позначили свою помилку, як приватну (private).

Відправлений баг повинен містити Тестовий Приклад, тобто коментар, який чітко показує як відтворити баг, запустивши стару версію, також показуючи як переконатися, що баг більше не існує у новій версії.

Звіт про баг також повинен підтверджувати, що вада виправлена у нових версіях Ubuntu за допомогою запропонованого фіксу (у вищевказаному прикладі вище ніж в Precise). Якщо проблема не виправлена у нових версіях Ubuntu, Ви повинні підготувати оновлення й для нових версій.

5.2. Оновлення стабільного релізу

Ми також дозволяємо вносити оновлення у випуски, у яких пакунок містить серйозну помилку, таку як значна реґресія у порівнянні з попереднім випуском або вада, яка може призвести до втрати даних. З-за того, що такі зміни самі потенційно можуть призвести до появи додаткових помилок, ми дозволяємо робити це лише там, де зміни легко можна зрозуміти та перевірити.

Процес оновлень стабільного випуску (Stable Release Updates або SRU) такий самий, як і для виправлень помилок безпеки, за виключенням того, що потрібно підписати на звіт про ваду команду ubuntu-sru.

Оновлення потрапить в архів proposed``(наприклад ``precise-proposed), де його перевіряють на здатність виправити проблему й підтверджують, що воно не є наслідком нових проблем. Після тижню роботи без заявлених проблем, оновлення потрапляє у розділ updates.

Дивіться ‘Вікі сторінку Оновлень Стабільного Релізу <SRUWiki>`_ для отримання додаткової інформації.