Подписване на RPM пакети

Версия 1.1.1, 19 юни 2008

Веселин Колев, Софийски Университет "Св. Климент Охридски"

Адрес за кореспонденция: vesso AT vesselin.org

Първоизточник: http://www.vesselin.org

Лиценз на документа: CC Attribution-ShareAlike

 

Съдържание:

  1. Изграждане на локална RPM база в домашната директория на потребителя

  2. Инсталиране на OpenPGP сертификат в RPM базата

  3. Извеждане на списъка с инсталираните OpenPGP сертификати в RPM базата

  4. Изтриване на инсталирани OpenPGP сертификати от RPM базата

  5. Забележка относно версията на пакета gnupg

  6. Поддържани хеш-функции в пакета gnupg

  7. Указване на хеш-функция за подписването на RPM пакетите

  8. Параметри на OpenPGP сертификата за подписване на RPM пакети

  9. Деклариране на възможността и параметрите за подписване в ${HOME}/.rpmmacros

  10. Подписване и преподписване на RPM пакети

  11. Проверка на електронния подпис върху RPM пакет

  12. Премахване на електронния подпис върху RPM пакет

  13. Предишни версии на публикацията

 

Забележка: Материалът касае системи използващи Red Hat Enterprise Linux 5 и дериватите му (напр. CentOS 5). Предназначен е за разработчици на RPM пакети и системни администратори.

 

1. Изграждане на локална RPM база в домашната директория на потребителя

Кое налага изграждането на локална RPM база в домашната директория на потребителя, който ще изгражда или подписва пакети? Често пъти един RPM пакет се подписва първо от конкретния разработчик-пакетач, след това постъпва в междинно хранилище, от където тестващите изтеглят пакета и го проверяват. След успешни тестове, отговорника по качеството на пакетите реподписва пакета и го пуска в официалното хранилище. Това е правилната схема на издаване на RPM пакети. В този случай OpenPGP сертификата на пакетача е само междинен и не е добре той да се поставя в глобалната RPM база на системата (която се намира в директория /var/lib/rpm). Непроверените като работоспособност пакети се инсталират само на тестови системи, на които OpenPGP сертификата на пакетача присъстава глобално, но тези системи са само тестови и не служат за изграждането на пакети, а само за проверка на работоспособността им.

За да изгради локална RPM база, в която да постави OpenPGP сертификатите за проверка на електронните подписи върху пакетите, потребителят трябва да извърши следните операции (идентифицирайки се като себе си пред локалната система):

$ mkdir -p ${HOME}/rpm/var/lib/rpm/
$ rpm --root=${HOME}/rpm/ --initdb

Същинското създаване на локалната RPM база се извършва от втория команден ред.

 

2. Инсталиране на OpenPGP сертификат в RPM базата

Инсталирането на OpenPGP сертификат става от ASCII форматиран файл. Съдържанието на този файл може да се получи с инструмента gpg:

$ gpg -a --export AABBCCDD > /path/to/AABBCCDD.asc

При успешно изпълнение в директория /path/to/ ще бъде създаден файл с име AABBCCDD.asc, който ще съдържа ASCII форматиран блок на OpenPGP сертификата със шестнадесетичен идентификатор AABBCCDD.

Начина на инсталиране на OpenPGP сертификата в RPM базата зависи от това дали тя е локална или глобална за системата:

Глобалната за системата RPM база се намира в директория /var/lib/rpm. Запис в нея може да се извършва само от супер потребител (root), но е читаема за всички системни потребители.

 

3. Извеждане на списъка с инсталираните OpenPGP сертификати в RPM базата

Списък със съдържащите се в базата OpenPGP сертификати може да бъде получен чрез директно запитване към RPM база (не се налага изпълнение на запитването като супер потребител). Запитването има следния вид:

Резултатът е списък с OpenPGP сертификати:

gpg-pubkey-aabbccdd-3442944c
gpg-pubkey-7ad14380-4155417b
gpg-pubkey-db42a60e-37ea5438
gpg-pubkey-6b8d79e6-3f49313d
gpg-pubkey-953fbf24-460fa616
gpg-pubkey-443e1821-421f218f
gpg-pubkey-e8562897-459f07a4
gpg-pubkey-217521f6-45e8a532

Ако се използва разделител "-", то в третата колонка на всеки ред от списъка, се намира шестнадесетичния идентификатор на OpenPGP сертификата.

Oт гледна точка на запитванията към RPM базата и формата на получения отговор, всички инсталирани OpenPGP сертификати се третират като инсталирани RPM пакети. Това е в сила както за глобалната за системата RPM база, така и за локалните RPM бази.

 

4. Изтриване на инсталирани OpenPGP сертификати от RPM базата

Начина на изтриване на инсталирани OpenPGP сертификати в RPM базата е подобен на този, чрез който става изтриване на пакети:

 

5. Забележка относно версията на пакета gnupg

Пакетът gnupg присъства по подразбиране в Red Hat Enterprise Linux 5 във версия 1.4.7. Ако той не присъства по някаква причина в системата (например бил е изтрит или е използвана kickstart инсталация, която не го включва в набора инсталируеми пакети), той трябва да бъде инсталиран само и единствено от оргиналното хранилище за дистрибуцията. Актуализирането му е задължително, а актуализираните пакети трябва да бъдат изтегляни само е единствено от дистрибутивните пакетни хранилища "updates".

 

6. Поддържани хеш-функции в пакета gnupg

Списъкът с поддържани хеш-функции от инсталирания пакет gnupg може да се получи след изпълнение на следния команден ред:

$ gpg --version | grep ^Hash:

Резултатът от изпълнението изглежда подобен на:

Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224

 

7. Указване на хеш-функция за подписването на RPM пакетите

При подписването на пакетите, инструмента за подписване вика инструмента gpg. Последния чете настройките си от файла ${HOME}/.gnupg/gpg.conf. Указването на хеш-функция се извършва в този файл. Това става на отделен ред чрез деклрацията "personal-digest-preferences". Ето пример за указването на използване на хеш-функцията SHA512 в ${HOME}/.gnupg/gpg.conf:

personal-digest-preferences SHA512

 

8. Параметри на OpenPGP сертификата за подписване на RPM пакети

За подписването на RPM пакети трябва да бъде създаден OpenPGP сертификат с дължина на криптиращия (частния) ключ 4096 бита по алгоритъм RSA. Използването на алгоритъма DSA е непрепоръчително поради факта, че максималната стандартизирана дължина на частния ключ е 1024 бита, което при днешните изчислителни мощности носи известен риск.

Създадения OpenPGP сертификат и частния ключ към него трябва да се използват само и единствено за подписване на RPM пакети. Използването за други цели (подписване и криптиране на електронна пощенска кореспонденция, подписване и криптиране на файлове) е в разрез с добрата практика.

След като двойката ключове и OpenPGP сертификата, изграден на нейна основа, бъдат създадени, трябва да се направят поне две техни копия, които да се съхраняват на защитени от неоторизиран достъп места така, че да се предотврати възможността за безвъзвратната загуба на частния ключ и OpenPGP сертификата. Нужно е да се създаде и отменящ сертификат, чрез който да може да бъде отменена валидността на OpenPGP сертификата, ако това се наложи. Отменящият сертификат трябва да се съхранява на защитени от неоторизиран достъп места, различни от тези, на които се съханяват копия от OpenPGP сертификата и прилежащия му частен ключ.

 

9. Деклариране на възможността и параметрите за подписване в ${HOME}/.rpmmacros

За да може да бъде извършено подписването на пакети, трябва да бъдат извършени съответните указания във файла ${HOME}/.rpmmacros:

%_signature             gpg
%_gpg_name              AABBCCDD

Първият ред декларира използването на подписване чрез gnupg, а втория указва като параметър за подписване, шестнадесетичния идентификатор на OpenPGP сертификата, с частния ключ към който, ще се извърши подписването. Това означава, че посоченият частнен ключ трябва задължително да присъства в локалната за потребителя база на gnupg (която се намира в директория ${HOME}/.gnupg).

 

10. Подписване и преподписване на RPM пакети

Подписването и преподписване на изграден RPM пакет става чрез инструмента rpm (препоръчително се използва опцията --resign):

$ rpm --resing file.rpm

 

11. Проверка на електронния подпис върху RPM пакет

За да се провери валидността на електронния подпис, извършен върху съдържанието на RPM пакет, се използва инструмента rpm:

$ rpm -Kv file.rpm

При успешна проверка се извежда изход от горния команден ред подобен на следния

file.rpm:
    Header V3 RSA/SHA512 signature: OK, key ID AABBCCDD
    Header SHA1 digest: OK (2275de9a53d1b781aa00f84cf6f65876234626ed)
    V3 RSA/SHA512 signature: OK, key ID AABBCCDD
    MD5 digest: OK (4e3fa2e07da05aa39b53dd9c06b52838)

Наличието на статус "OK" при четирите извършени проверки (резултата от всяка една се извежда на отделен ред), показва успешна проверка на електрония подпис върху съответния пакет.

Забележка: Пакетният мениджър yum има вградени вътрешни механизми за автоматична проверка на валидността на електрония подпис, които биват викани непосредствено преди процеса на инсталация на даден RPM пакет. Ако електронният подпис върху даден пакет е невалиден или непроверяем, то не се извършва инсталацията му в системата. Тази инсталационна политика се следва по подразбиране.

 

12. Премахване на електронния подпис върху RPM пакет

За да се премахне електронния подпис, извършен върху съдържанието на RPM пакета, се използва инструмента rpm с опция --delsign. Например, за премахване на елекронния подпис от RPM пакета, чието съдържание се намира във файла file.rpm, може да се използва следния команден ред:

$ rpm --delsign file.rpm

 

13. Предишни версии на публикацията

 

Този документ е с OpenPGP подписано съдържание
[информация] [електронен подпис][TimeStamp]

Creative Commons - Признание 2.5 Valid CSS! Valid XHTML 1.0 Strict