CheckPackageSign

Материал из ALT Linux Wiki
Примечание: Короткая ссылка сюда - https://www.altlinux.org/Checkpackagesign

Проверка подписи пакета

Когда разработчик собирает пакет с программным обеспечением, он подписывает его собственным ключом, чтобы потом можно было проверить целостность и подлинность пакета.

Установка ключей

# apt-get install /usr/bin/alt-rpmkeys-checksig

Выполнение проверки пакета

Примечание: При выполнении следующей команды утилита проверит подпись пакета и соответствие ей открытого ключа разработчика, который хранится в системе

rpmsign

Выполним команду:

$ rpmsign -Kv /home/user/Загрузки/gpupdate-0.10.0-alt1.noarch.rpm 
  • ключ -K - показывает ключ GPG, используемый для подписания
  • ключ -v - показывать более детальные сообщения

Результат:

/home/user/Загрузки/gpupdate-0.10.0-alt1.noarch.rpm:
    Заголовок V4 RSA/SHA512 Signature, key ID c7eb80f9: NOKEY
    Header SHA1 digest: OK (1a0f5ebf806efab4c266a08b361ee1e494ac2d11)
    MD5 digest: OK (aa30e4dce5ba36afdb1fdb9d6a58bf14)
    V4 RSA/SHA512 Signature, key ID c7eb80f9: NOKEY
Примечание: Здесь смотрим строчку key ID c7eb80f9. Это открытая часть ключа разработчика, создавшего пакет.


Вывод списка ключей разработчиков

Вывод ключа конкретного разработчика

Примечание: Добавив определенный параметр с аргументом, мы отфильтруем ключи до конкретного разработчика.

Добавляем

| grep -i c7eb80f9 -A2

где в -i - открытый ключ разработчика.

$ gpg2 --show-keys --with-fingerprint --keyid-format=short /usr/lib/alt-gpgkeys/pubring.gpg 2>/dev/null | grep -i c7eb80f9 -A2

И получим информацию о ключе конкретного разработчика:

pub   rsa4096/C7EB80F9 2019-05-16 [SC] [   годен до: 2029-05-13]
      Отпечаток ключа = DF6C 02E5 F174 D7CD F792  A9CD FF97 9DED DA27 73BB
uid                    ALT Sisyphus <alt-sisyphus@altlinux.org>

Сопоставление пакета и ключа

Сопоставляем:

  • из первого раздела
    • имя пакета
    • открытую часть ключа
  • из второго раздела
    • открытую часть ключа
    • срок действия ключа
Примечание: Если срок действия еще действует, то все в порядке.


Проверка скриптом

1. Создайте и сохраните файл checksign.sh

Содержимое файла checksign.sh

#!/bin/bash

#Запрашиваем имя пакета
read -p "Введите имя rpm-пакета (с расширением): " rpm

#Проверяем наличие пакета
if [[ ! -f "$rpm" ]]; then
    echo "Файл '$rpm' не найден."
    exit 1
fi

#Вычисляем подпись пакета
packagesign=$(rpmsign -Kv "$rpm" | grep -oP 'key ID \K[0-9a-f]{8}' | head -n1)
#echo "packagesign=$packagesign"
#Выявляем в базе подписей подпись пакета
databasesign_work=$(gpg2 --show-keys --with-fingerprint --keyid-format=short /usr/lib/alt-gpgkeys/pubring.gpg 2>/dev/null | grep -i "$packagesign" -A2)
#echo "databasesign_work=$databasesign_work"
#Выделяем номер ключа
databasesign_ok=$(echo $databasesign_work | grep -oP 'rsa4096/\K[0-9A-F]{8}')
#echo "databasesign_ok=$databasesign_ok"
#делаем low
databasesign_low=$(echo "$databasesign_ok" | awk '{print tolower($0)}')
#echo "$databasesign_low"
#сравниваем
if [[ "$packagesign" == "$databasesign_low" ]]; then
    echo "Подпись совпадает."
else
    echo "Подпись не совпадает. Разрабортчика нет в базе."
fi

или

Установите пакет с готовой утилитой. Для этого установите пакет и выполните команду alt-rpm-check.

2. Запустите его в папке с пакетом

3. Скрипт работает так:

  • Он спрашивает имя пакета (с *.rpm)
  • Вычисляет подпись
  • Считывает подпись из БД
  • Сравнивает их
  • Выводит результат

Результат работы:

Введите имя rpm-пакета (с расширением): virtualbox-7.1.10-alt1.x86_64.rpm
Подпись совпадает.

Или:

Введите имя rpm-пакета (с расширением): naps2-8.2.0-linux-x64.rpm
Подпись не совпадает. Разработчика нет в базе.

Источники