Версия 1.1.1, 19 юни 2008
Веселин Колев, Софийски Университет "Св. Климент Охридски"
Адрес за кореспонденция: vesso AT vesselin.org
Първоизточник: http://www.vesselin.org
Лиценз на документа: CC Attribution-ShareAlike
Съдържание:
Изграждане на локална RPM база в домашната директория на потребителя
Извеждане на списъка с инсталираните OpenPGP сертификати в RPM базата
Параметри на OpenPGP сертификата за подписване на RPM пакети
Деклариране на възможността и параметрите за подписване в ${HOME}/.rpmmacros
Забележка: Материалът касае системи използващи Red Hat Enterprise Linux 5 и дериватите му (напр. CentOS 5). Предназначен е за разработчици на 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 база се извършва от втория команден ред.
Инсталирането на OpenPGP сертификат става от ASCII форматиран файл. Съдържанието на този файл може да се получи с инструмента gpg
:
$ gpg -a --export AABBCCDD > /path/to/AABBCCDD.asc
При успешно изпълнение в директория /path/to/
ще бъде създаден файл с име AABBCCDD.asc
, който ще съдържа ASCII форматиран блок на OpenPGP сертификата със шестнадесетичен идентификатор AABBCCDD.
Начина на инсталиране на OpenPGP сертификата в RPM базата зависи от това дали тя е локална или глобална за системата:
- инсталиране на OpenPGP сертификат в локална RPM база:
$ rpm --root=${HOME}/rpm/ --import /path/to/AABBCCDD.asc
- инсталиране на OpenPGP сертификат в глобалната за системата RPM база:
# rpm --import /path/to/AABBCCDD.asc
Глобалната за системата RPM база се намира в директория /var/lib/rpm
. Запис в нея може да се извършва само от супер потребител (root), но е читаема за всички системни потребители.
Списък със съдържащите се в базата OpenPGP сертификати може да бъде получен чрез директно запитване към RPM база (не се налага изпълнение на запитването като супер потребител). Запитването има следния вид:
- за инсталирани в локална RPM база:
$ rpm --root=${HOME}/rpm/ -q gpg-pubkey
- за инсталирани в глобалната за системата RPM база:
$ rpm -q gpg-pubkey
Резултатът е списък с 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 бази.
Начина на изтриване на инсталирани OpenPGP сертификати в RPM базата е подобен на този, чрез който става изтриване на пакети:
- изтриване на OpenPGP сертификат от локална RPM база:
$ rpm --root=${HOME}/rpm/ -e gpg-pubkey-aabbccdd-3442944c
- изтриване на OpenPGP сертификат от глобалната за системата RPM база:
# rpm --import -e gpg-pubkey-aabbccdd-3442944c
Пакетът gnupg присъства по подразбиране в Red Hat Enterprise Linux 5 във версия 1.4.7. Ако той не присъства по някаква причина в системата (например бил е изтрит или е използвана kickstart инсталация, която не го включва в набора инсталируеми пакети), той трябва да бъде инсталиран само и единствено от оргиналното хранилище за дистрибуцията. Актуализирането му е задължително, а актуализираните пакети трябва да бъдат изтегляни само е единствено от дистрибутивните пакетни хранилища "updates".
Списъкът с поддържани хеш-функции от инсталирания пакет gnupg може да се получи след изпълнение на следния команден ред:
$ gpg --version | grep ^Hash:
Резултатът от изпълнението изглежда подобен на:
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
При подписването на пакетите, инструмента за подписване вика инструмента gpg
. Последния чете настройките си от файла ${HOME}/.gnupg/gpg.conf
. Указването на хеш-функция се извършва в този файл. Това става на отделен ред чрез деклрацията "personal-digest-preferences"
. Ето пример за указването на използване на хеш-функцията SHA512 в ${HOME}/.gnupg/gpg.conf
:
personal-digest-preferences SHA512
За подписването на RPM пакети трябва да бъде създаден OpenPGP сертификат с дължина на криптиращия (частния) ключ 4096 бита по алгоритъм RSA. Използването на алгоритъма DSA е непрепоръчително поради факта, че максималната стандартизирана дължина на частния ключ е 1024 бита, което при днешните изчислителни мощности носи известен риск.
Създадения OpenPGP сертификат и частния ключ към него трябва да се използват само и единствено за подписване на RPM пакети. Използването за други цели (подписване и криптиране на електронна пощенска кореспонденция, подписване и криптиране на файлове) е в разрез с добрата практика.
След като двойката ключове и OpenPGP сертификата, изграден на нейна основа, бъдат създадени, трябва да се направят поне две техни копия, които да се съхраняват на защитени от неоторизиран достъп места така, че да се предотврати възможността за безвъзвратната загуба на частния ключ и OpenPGP сертификата. Нужно е да се създаде и отменящ сертификат, чрез който да може да бъде отменена валидността на OpenPGP сертификата, ако това се наложи. Отменящият сертификат трябва да се съхранява на защитени от неоторизиран достъп места, различни от тези, на които се съханяват копия от OpenPGP сертификата и прилежащия му частен ключ.
${HOME}/.rpmmacros
За да може да бъде извършено подписването на пакети, трябва да бъдат извършени съответните указания във файла ${HOME}/.rpmmacros
:
%_signature gpg %_gpg_name AABBCCDD
Първият ред декларира използването на подписване чрез gnupg, а втория указва като параметър за подписване, шестнадесетичния идентификатор на OpenPGP сертификата, с частния ключ към който, ще се извърши подписването. Това означава, че посоченият частнен ключ трябва задължително да присъства в локалната за потребителя база на gnupg (която се намира в директория ${HOME}/.gnupg).
Подписването и преподписване на изграден RPM пакет става чрез инструмента rpm
(препоръчително се използва опцията --resign
):
$ rpm --resing file.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 пакет. Ако електронният подпис върху даден пакет е невалиден или непроверяем, то не се извършва инсталацията му в системата. Тази инсталационна политика се следва по подразбиране.
За да се премахне електронния подпис, извършен върху съдържанието на RPM пакета, се използва инструмента rpm
с опция --delsign
. Например, за премахване на елекронния подпис от RPM пакета, чието съдържание се намира във файла file.rpm
, може да се използва следния команден ред:
$ rpm --delsign file.rpm
Версия 1.1: [tar.gz] [електронен подпис върху архива]
Публикувана на: 19 октомври 2007г.
Този документ е с OpenPGP подписано съдържание
[информация] [електронен подпис][TimeStamp]