LINUX-BG Адрес : http://www.linux-bg.org |
OpenPGP интеграция в RPM |
От: Beco Публикувана на: 1-04-2006 Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=381307376 |
OpenPGP интеграция в RPMCopyright ©2006 Веселин Колев, Софийски Университет "Св. Климент Охридски"Лиценз: CC Attribution-ShareAlike
1. Въведение.RPM[1] е пакетна система, в която всеки пакет подлежи на интеграция в рамките на сертификатен модел за удостоверяване. За удостоверителен модел е избран OpenPGP. Когато един RPM пакетен файл бъде създаден, съдържанието му се подписва така, че електронния подпис се поставя вътре в създадения RPM файл (това отличава пакетната система RPM от пакетни системи, при които електронния подпис се съхранява във файл извън пакета). Така електронният подпис следва пакетния файл навсякъде и служи за идентификация на лицето или организацията, която е произвела пакета. Възможно е електронният подпис да бъде извършен и от този, който предоставя/дистрибутира пакета (благодарение на възможността за реподписване на пакета), а не от създателя му (при реподписването, електронния подпис на създателя на пакета може да бъде заменен с електронния подпис на дистрибутора). Когато един RPM пакет трябва да бъде инсталиран, е наложително да бъде проверен електронния подпис интегриран в него. Създаването на таква практика силно намалява възможността за подмяна ("пробутване" на опасен пакет, който примерно може да отвори дупка в сигурността на системата, да унищожи файлове, да използва несанкционирано ресурси и т.н). Разбира се, инсталиращият пакета трябва да притежава копие от OpenPGP сертификата на лицето и организацията, които са подписали пакета. От гледна точка на сертификатния модел OpenPGP, не е достатъчно проверяващия електронния подпис просто да притежава копие от сертификата. Той трябва да е убеден в неговата автентичност. Следователно трябва да съществува канал за проверка на автентичността - примерно представител на дистрибутура гарантира за сертификата или пък да се ползва схемата на онаследено доверие в рамките на Web Of Trust (тази схема няма да бъде коментирана тук). Сертификатното хранилище на базата на RPM няма нищо общо със сертификатното харанилище на други приложения, по-специално GNUPG. Проверката в рамките на Web Of Trust се прави в рамките на GNUPG и неговото сертификатно хранилище и чак след това удостоверения сертификат се прехвърля в RPM базата с OpenPGP сертификати. Настоящата статия има за цел да покаже възможностите за интеграцията на сертификатния модел OpenPGP в пакетната система RPM. По-задълбочени познания за пакетната система RPM могат да се получат от различните документации на тази тема, като повечето от тях са свободно достъпни в Интернет. Към настоящият момент най-пълното ръководствто за потребители по използване на пакетната система RPM е създадено в рамките на проекта по документация на дистрибуцията Fedora Core[2]. Статията е фокусирана върху работата с пакетната система RPM в рамките на дистрибуциите Fedora Core и Red Hat Enterprise Linux. Авторът не носи отговорност за причинени щети, вследствие на използване на описаните тук действия и техники. 2. Поставяне на OpenPGP сертификат в базата на RPM.За да се постави един OpenPGP сертификат в RPM базата, той трябва да е наличен в текстов файл (ASCII) във формат Base64. Спрямо значимостта си към RPM базата, OpenPGP сертификатите се разделят на два типа (чисто условно):такива, които удостоверяват автентичността на пакетите в хранилищата с пакети на дистрибуцията, поддържани от дистрибутора и такива, които удостоверяват автентичността на външни за дистрибуцията пакети (например от хранилища, които не са поддържани от дистрибутора на дистрибуцията). Всички OpenPGP сертификати, в рамките на RPM базата, се инсталират в една централен контейнер - сертификатно хранилище. В дистрибуциите Fedora Core и Red Hat Enterprise Linux (и дериватите), сертификатното хранилище на RPM базата физически се намира във файла /var/lib/rpm/Pubkeys. Това е бинарен файл във формат BerkeleyDB.
Това са сертификатите на производителя на дистрибуцията. От критично значение е тяхната автентичност да бъде установена еднозначно, доколкото тези сертификати се използват за проверка на най-важните пакети за системата (kernel, glibc, rpm и др). Обикновено те се инсталират със самата дистрибуция като ASCII файлове във файловото дърво на системата, без обаче да се инсталират в RPM базата. В зависимост от дистрибуцията (или дори версията на дистрибуцията), тяхното местоположение може да е различно:
До Fedora Core 4 сертификатите на производителя на дистрибуцията се съхраняваха само в директорията /usr/share/rhn/. Във версия четири на Fedora Core, мястото за разполагане на OpenPGP сертификатите на дистрибуцията е вече директорията /etc/pki/rpm-gpg/. Ето едно нейно примерно съдържание:
-rw-r--r-- 1 root root 1910 Jun 3 2005 RPM-GPG-KEY Сертификатите се поставят там при инсталацията на дистрибуцията от пакета fedora-release.
В рамките на тази дистрибуция, OpenPGP сертификатите на производителя й се намират в директория /usr/share/rhn/. Инсталират се в дистрибуцията при инсталирането на пакета up2date. Примерното съдържание на директорията /usr/share/rhn/ е от вида:
drwxr-xr-x 2 root root 4096 Mar 8 19:04 actions Най-важният OpenPGP сертификат в тази директория се намира във файла RPM-GPG-KEY. Чрез него се проверява автентичността на всички RPM пакети (базови и тези постъпили като актуализации). Въпреки, че всички тези OpenPGP сертификати са поставени в упоменатите директории от RPM пакет в състава на дистрибуцията, трябва да се реши въпроса относно тяхната автентичност и тя трябва да бъде установена еднозначно. Установяването на автентичността излиза извън пределите на RPM. За целта на удостоверяването се използват външни модели и инструменти. Един подходящ начин е да се използва модела на Web Of Trust. От друга страна, ако е била потвърдена автентичността на инсталационния носител, то с голяма вероятност може да се твърди, че пакета, от който са инсталирани OpenPGP сертификатите в дистрибуцията не е подменян злоумишлено и инсталираните от него сертификати са автентични.
Най-често копия на тези OpenPGP сертификати могат да бъдат намерени във файл, който се намира във файлово дърво на съответното хранилище. Това, че даден сертификат се намира във файловото дърво на хранилището, още не го прави автентичен. За да се провери автентничността му трябва да се използва модела Web Of Trust. В някои пакетни хранилища няма файл, който да съдържа OpenPGP сертификата на производителя/дистрибутора на пакетите. В този случай OpenPGP сертификата може да бъде намерен върху някой от сървърите за ключове в Интернет. След това отново се прилага модела Web Of Trust за установяване на автентичността. Един пример за извличането на OpenPGP сертификат от сървър за ключове (сертификати) и записването му в ASCII файл, може да се даде чрез следната поредица командни редове:
$ gpg --keyserver pgp.mit.edu --search dag@wieers.com По този начин във файла RPM-GPG-DAG ще се намира OpenPGP сертификата, с който са подписани пакетите в съответното хранилище. Преди обаче да се използва, този сертификат трябва да се провери като автентичност в рамките на Web Of Trust или друг механизъм за удостоверяване на автентичността.
Поставянето на сертификатите в базата на RPM може да стане по два начина. Единият начин включва използването на инструмента rpm в команден ред, а другия е свързан с използването на yum.
Това е най-удобният начин за поставяне на сертификатите в базата на RPM и може да се представи нагледно чрез следния пример (изпълнен от root): # rpm --import /usr/share/rhn/RPM-GPG-KEY След изпълнение на този команден ред, OpenPGP сертификатите от файла /usr/share/rhn/RPM-GPG-KEY ще бъдат поставени в базата на RPM. Вместо пълният път до файла с OpenPGP сертификата, може да се използва и протокол за файлов пренос, например FTP или HTTP с указване на пътя до файла върху отдалечен файлов сървър. Това обаче не се препоръчва, освен в случаите, в които преносната среда и източника на файла със сертификата са надеждно защитени и удостоверени. При указване на такъв пренос се използва указателн за проткола, например: # rpm --import ftp://storage.server.tld/RPM-GPG-KEY или # rpm --import http://storage.server.tld/RPM-GPG-KEY Нужно е да се има предвид, че при мрежови транспорт има и допълнителен риск, доколкото файлът се изтегля с права на root. За това този начин на поставяне на OpenPGP сертификат в базата на RPM трябва да се избягва и да се използва само в краен случай. Правилният начин е първо да се свали файла със сертификата върху локалната файлова система като процесът на изтегляне се иницира от непривилигерован потребител. След това се прави проверка на файла, дали наистина съдържа OpenPGP сертификат (може да се използва инструмента gpg) и чак тогава с правата на root и инструмента rpm, сертификата се импортира в базата на RPM.
В този случай се указва пътя до файла съдържащ OpenPGP сертификата (път до файла в локалната файлова система или върху отдалечен файлов сървър) на отделен ред при дефиниране на хранилище (добре е OpenPGP сертификатите в такъв случай да се отнасят към съответното хранилище). Ето примерен запис:
[extras] В този случай OpenPGP сертификата, с който се проверява автентичността на пакетите в хранилището с име extras, се съдържа във файла указан след указателя gpgkey (в конкретния случай това е файла /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-extras). При първото използване на това хранилище, ако OpenPGP сертификата, посочен във файла по-горе, не е наличен в RPM базата, ще бъде изведено диалогово меню, в което администратора трябва да избере да импортира или не в базата този сертификат. 3. Представяне и преглед на инсталираните OpenPGP сертификати в базата на RPM.Всеки сертификат се представя в RPM базата като пакет. Следователно може да бъде търсен като такъв с наличните за целта инструменти. Всички OpenPGP сертификати в RPM базата може да се разглеждат като много едновременно налични версии на един и същи пакет с име gpg-pubkey. Версиите на пакетите gpg-pubkey се опрделят на база шестнадесетичния идентификатор на публичния ключ в основата на OpenPGP сертификата. Форматът на версията съдържа два шестнадесетични числа, разделени с тире. Идентификаторът на OpenPGP сертификата е първото число. Например във версията на пакета gpg-pubkey-db42a60e-37ea5438 шестнадесетичното число db42a60e е идентификатора на публичния ключ в основата на OpenPGP сертификата, а 37ea5438 е хеш на датата на създаване на двойката "частен-публичен ключ". Идентификаторът на публичния ключ се използва за идентификация на даден сертификат, например в GNUPG:
$ gpg --list-keys db42a60e
За да бъде представен списък с инсталираните OpenPGP сертификати в базата на RPM, трябва да се извърши операция от вида: $ rpm -q gpg-pubkey Изходът от тази операция има вид подобен на следния:
gpg-pubkey-db42a60e-37ea5438
За целта може да се използва команден ред от вида: $ yum list gpg-pubkey изпълнението на който води до резултат от типа на
Setting up repositories 4. Преглед на съдържанието на инсталираните OpenPGP сертификати в базата на RPM.Прегледът на съдържанието на инсталираните OpenPGP пакети в базата на RPM може да стане чрез инструментите rpm и yum.
Прегледът на съдържанието на инсталиран в базата на RPM OpenPGP сертификат чрез инструмента rpm, следва следната схема. Първо се избира сертификата като име на пакет и версия, както бе описано по-горе. След като изборът е направен, се изпълнява команден ред подобен на следния: $ rpm -q --info gpg-pubkey-4f2a6fd2-3f9d9d3b който води до резултата
Name : gpg-pubkey Relocations: (not relocatable) В този резултат се вижда използването на същите полета, каквито се използват за всички пакети инсталирани в базата на RPM. Изключение прави само информативната част (info). В нея чрез библиотеката beecrypt се извежда в Base64 формат OpenPGP сертификата. Така блокът директно може да се копира във файла и да се използва за повторно импортиране в RPM база или в хранилището на GNUPG, PGP и др.
Прегледът на съдържанието на инсталиран в базата на RPM OpenPGP сертификат с инструмента yum става след като предварително се избере сертификат с определена версия. След това се изпълнява команден ред от типа: $ yum info gpg-pubkey-4f2a6fd2-3f9d9d3b Резултатът изглежда по следния начин:
Setting up repositories И тук, както и при изхода получен чрез инструмента rpm, резултатът за описателната частта на пакета съдържа Base64 представянето на OpenPGP сертификата в блок, който може да бъде използван за последващи поставяния в хранилище на RPM или използването му в хранилището на програми като GNUPG, PGP и др. 5. Изтриване на инсталиран OpenPGP сертификат от базата на RPM.Изтриването на един OpenPGP сертификат от базата на RPM може да се наложи в случайте, когато този сертификат няма да бъде използван повече или е компрометиран по някакъв начин. Пакетната система RPM чрез своя инструментариум не може да следи състоянието на даден OpenPGP сертификат. Подобно следене на състоянието на един OpenPGP сертификат може да стане например чрез периодична проверка за наличието на отменящи сертификати към дадения OpenPGP сертификат, които да укажат на неготово компрометиране. Като инструмент за реализация на този процес може да бъде използван gpg. Както процесът по поставяне, така и този по изтриване на OpenPGP сертификат, може да реализира чрез използване на инструментите rpm и yum.
Винаги трябва да се уточнява версията на пакета, чрез която е представен в RPM базата OpenPGP сертификата, който трябва да бъде изтрит. След като версията е уточнена, може да се пристъпи към изтриването му с помощта на команден ред със следната структура: # rpm -e gpg-pubkey-4f2a6fd2-3f9d9d3b
Винаги трябва да се уточнява версията на пакета, чрез която е представен в RPM базата OpenPGP сертификата, който трябва да бъде изтрит. След като версията е уточнена, може да се пристъпи към изтриването му с помощта на команден ред от вида: # yum remove gpg-pubkey-4f2a6fd2-3f9d9d3b Като междинен разултат ще бъде представена информация за пакета, който подлежи на изтриване и диалог за потвърждение на операцията:
Setting up Remove Process След потвърждаване на операцията (чрез "y") следва изтриване на пакета, т.е. на OpenPGP сертификата от базата на RPM. 6. Проверка на електронния подпис върху файл, съдържащ RPM пакет.Преди да бъде инсталиран в системата, всеки RPM пакет представлява файл с разширение rpm. Всеки такъв файл може да бъде проверен от гледна точка на автентичност, като бъде проверен електронния подпис, който е извършен върху съдържанието (което пък се намира под формата на CPIO архив вътре в самия RPM файл). За извършването на проверката е нужно да се разполага с OpenPGP сертификата на лицето или организацията, подписали пакета. Този сертификат трябва да е инсталиран в RPM базата. Преди всичко няма как в 100% от случаите от напред да се знае с какъв OpenPGP сертификат да се провери достоверността на съдържанието на RPM файла. Това може да се установи само опитно, след проверка. Ако в хода на проверката се установи, че OpenPGP сертификата, чрез който трябва да се провери електронния подпис върху съдържанието на RPM файла, не е наличен в RPM базата, то той трябва да бъде поставен там. След това проверката трябва да бъде извършена отново. Ето и как се извършва проверката в команден ред чрез инструмента rpm в различни нива на подробност в резултата от проверката:
Това ниво на подробност на резултата от проверката се реализира чрез използването само на опцията "--checksig". Ето пример: $ rpm --checksig stunnel-4.05-3.i386.rpm Резултатът от изпълнението на горния команден ред има вид подобен на stunnel-4.05-3.i386.rpm: (sha1) dsa sha1 md5 gpg OK Това ниво на подробност само съобщава общия резултат от проверката, без да информира заявителя на проверката по-подробно. Статус съобщението "OK" е индикатор за положителна проверка на електронния подпис върху съдържанието на RPM пакета. Ако статусът не е "OK", трябва да се премине на по-високо ниво на подробност и там да се види къде точно е проблема (примерно OpenPGP сертификата, с който трябва да се извърши проверката на електронния подпис не е наличен в базата на RPM и т.н).
Второто ниво на подробност се реализира чрез използването на комбинация от опции "-v" и "--checksig" на инструмента rpm. Примерен команден ред, който показва реализация на това ниво на подробност при проверката на електронния подпис върху съдържанието на RPM файла, е следния: $ rpm -v --checksig stunnel-4.05-3.i386.rpm Резултатът от проверката има вида:
stunnel-4.05-3.i386.rpm: V3 DSA signature: OK, key ID 7ad14380 В този резултат е включен флаг за всеки етап на проверката (имащ при успешна проверка стойност "OK"). Също така тук се показват стойностите на съответните суми и шестнадесетичния идентификатор на OpenPGP сертификата, с който се извършва проверката на електронния подпис.
За това ниво на подробност се използват опциите "-vv" и "--checksig". Това е най-високото ниво на подробност, което освен информацията, налична във второ ниво на подробност, дава и статуса на операциите по извеждането на информацията от самата база данни. За получаването на такова ниво на подоробност, може да се използва команден ред от вида: $ rpm -vv --checksig stunnel-4.05-3.i386.rpm След изпълнението му, се получава резултат подобен на следния:
D: Expected size: 119200 = lead(96)+sigs(344)+pad(0)+data(118760) 7. Проверка на електронния подпис върху инсталиран RPM пакет.Тази проверка засяга всички инсталирани файлове в рамките на даден пакет. Това значи, че в хода на проверката може да се установи дали даден файл от даден пакет е променян, липсва или е повреден. Цялата информация, необходима за проверката, се намира в RPM базата. Самата проверка се извършва с инструмента rpm в три нива на подробност. Изходът от операцията за проверка на целостта и автентичността на файловете в даден пакет се представя в три колони:
Възможните стойности на флаговете в първите две колони са както следва:
Ето и примери в команден ред за използването на инструмента rpm за проверка на автентичността и целостта на файловете в рамките на инсталираните пакети в различните нива на подробност:
Първо ниво на подробност може да се реализира чрез подаване на опцията "--verify" на инструмента rpm: # rpm --verify sendmail При това ниво на подробност се извеждат единствено резултати, ако има намерени файлове, чиято идентичност не е потвърдена:
S.5....T c /etc/mail/access
В рамките на второто ниво на подробност освен опцията "--verify", на инструмента rpm се подава и опцията "-v": # rpm -v --verify sendmail Във второ ниво на подробност се извеждат всички файлове, налични в пакета, със съответните флагове за състояние и флагове за тип на файла:
........ /etc/mail
В рамките на третото ниво на подробност се използват комбинирано опциите "--verify", и "-vv" на инструмента rpm: # rpm -vv --verify sendmail При трето ниво на подробност, в извежданата информация освен пълния списък файлове от пакета и флаговете за състоянието, и флаговете за тип на файла, се получава и списък с криптографските заглавни части (headers) на пакета и зависимостите:
D: opening db environment /var/lib/rpm/Packages joinenv << Модулна поддръжка на XFS за RHEL и дериватите му | Управление на зони в динамичен режим чрез nsupdate >> |
Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук,
но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора,
както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.
All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
|