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>`_ для получения дополнительной информации.