SATtva Персональная страница
темы архив все rss xml 2.0
 
 
блог
досье
связь
english
 

emerge-delta-webrsync с проверкой pgp-подписей

27.05.2009
pgp

Допилил тут гентушный скрипт emerge-delta-webrsync, чтобы он сверял pgp-подписи со снапшотов портежа: как с новых, так и с реконструированных по дельтам. То есть после синхронизации портежа, независимо от того, с каких зеркал качались снапшоты и дельты (при этом по открытым каналам), остаётся гарантия, что портеж находится в том виде, в каком был заверен на сервере Gentoo Foundation, и ничего лишнего в него не понапихали злобные враги.

Если оно кому нужно, то архив вот (правой кнопкой > сохранить как), подпись здесь.

Скрипт пригоден для автоматической работы по крону. Помимо прочего добавил в него дополнительный логгинг: все неудачные сверки подписей будут выводиться в authpriv с приоритетом warning. Разумеется, если подпись по той или иной причине не сверяется, скрипт немедленно прерывает исполнение ещё до синхронизации снапшота с рабочим деревом портежа в /usr/portage.

Для установки скопируйте сам emerge-delta-webrsync и небольшой скрипт-хэлпер gpg-check-file.py в /usr/bin или иной каталог, прописанный в PATH. Затем добавьте в /etc/make.conf следующие переменные:

SNAPSHOT_GPG_KEY="отпечаток ключа Gentoo Portage Snapshot Signing Key", которым заверяются снапшоты. (Если что, отпечаток текущего ключа, действующего до конца года, -- AE54 54F9 67B5 6AB0 9AE1 6064 0838 C26E 239C 75C4. Скопировать можно в таком виде, с пробелами или без, в любом регистре.) Эта переменная обязательна, без неё скрипт откажется работать.

PORTAGE_GPG_DIR="путь к домашнему каталогу GnuPG, где находится связка с указанным выше ключом". Отсутствие этой переменной (в отличие от предыдущей) некритично, по умолчанию принимается путь /root/.gnupg, но тогда убедитесь, что открытый ключ Portage Snapshot Signing Key действительно находится на связке ключей у рута.

DELTASYNC_MIRRORS="разделённый запятыми список зеркал для скачивания дельт и снапшотов". Поскольку я использую разные зеркала для получения дельт и исходников, посчитал такое расширение для себя удобным. Но если не хочется держать два списка, то при отсутствии этой переменной используются зеркала из основного списка GENTOO_MIRRORS.

Залогиньтесь рутом, скачайте ключ, заверяющий снапшоты, и заверьте его неэкспортируемой подписью (или что там предусматривает ваша политика сертификации):
gpg --keyserver subkeys.gpg.net --recv-key 0x239C75C4
gpg --lsign 0x239C75C4

В случае проблем сообщайте.

ДОБАВЛЕНО (30.05): Отредактировал постинг в соответствии с изменениями в скрипте. Спасибо Mellon'у за дельные советы.

ДОБАВЛЕНО (04.01): Бэкпорт багфикса #299443 из официальной версии emerge-delta-webrsync-3.5.1-r3 (случилась локальная Проблема-2010):
sed 's/portage-200\*/portage-2[[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]]/g'
Комментарии

Re: emerge-delta-webrsync с проверкой pgp-подписей от Mellon

28.05.2009 07:16

Благодарю.
Пощупаем-с...

ЬуддщтВ данный момент наблюдаются проблемы с subkeys.gpg.net, так что ключь можете попробовать найти на других серверах, у меня с лёту нашло на wwwkeys.eu.pgp.net

Но по-любому, SATtva, будьте добры выложить ссылку на офдокумент с объявлением этого ключа.

Re: emerge-delta-webrsync с проверкой pgp-подписей от SATtva

28.05.2009 10:13

С официальными в генте напряжёнка, это Вам не дебиан. ;-) Будете смеяться, но единственное релевантное упоминание о замене ключа я нашёл здесь: http://bugs.gentoo.org/200183

Вообще чтение комментариев к этому багрепорту оставляет стойкое впечатление, что мэйнтейнеры какбэ не совсем понимают, как использовать инфраструктуру OpenPGP.

Re: emerge-delta-webrsync с проверкой pgp-подписей от SATtva

28.05.2009 21:25

Скрипт допилил явно криво -- проверка подписи производилась уже после синхронизации дерева, что явно не есть правильно (собственно, нарушает изначальное условие). Исправленную версию можно взять по той же ссылке в постинге.

Также имеет место проблема, с которой я уже не знаю, куда рыть. Если запускать emerge-delta-webrsync в шелле вручную, то всё работает на ура. Однако, когда он запускается кроном, стабильно не может проверить подпись, жалуясь на отсутствие ключа. Диагностирование показало, что крон исполняет скрипт от рута, хотя и не передевая в окружение переменную HOME. Однако, хэлпер запускает gpg с параметром --homedir /root/.gnupg; кроме того, я уже пробовал принудительно устанавливать HOME=/root и GNUPGHOME=/root/.gnupg в переменных окружения внутри хэлпера, но gpg всё равно сообщает, что такого ключа нет. Какие у вас соображения?

Re: emerge-delta-webrsync с проверкой pgp-подписей от SATtva

28.05.2009 21:37

Игнорируйте мой последний вопрос, проблема решена, файлы ещё раз обновил. Теперь всё должно работать, как следует, но дополнительное тестирование всё же не повредит.

Всё же для меня остаётся неясным, почему параметр --homedir, явно передаваемый gpg изначально, не имел необходимого действия. GnuPG явно полагался на наличие переменной HOME.

Re: emerge-delta-webrsync с проверкой pgp-подписей от Mellon

29.05.2009 00:02

ну, сам знаешь, гадать по кофейной гуще как-то не то. да и ещё и не смотрел скрипт, не до того было, но всётаки приведу маленький тест:
% sh
sh-3.2$ echo $HOME
/home/user
sh-3.2$ gpg --list-keys &>/dev/null && echo succes
succes
sh-3.2$ unset HOME
sh-3.2$ gpg --list-keys &>/dev/null && echo succes || echo fail
fail
sh-3.2$ gpg --homedir=/home/user/.gnupg --list-keys &>/dev/null && echo succes || echo fail
succes

=app-shells/bash-3.2_p39
=app-crypt/gnupg-2.0.11


а теперь посмотрим, что ты там намутил :)

Re: emerge-delta-webrsync с проверкой pgp-подписей от Mellon

29.05.2009 00:54

в общем, понятно, ты думаешь --homedir == $HOME, а на самом деле это дира где конфиги лежат с ключами: --homedir $HOME/.gnupg.

в общем есть что исправить, например, homedir надо брать
PORTAGE_GPG_DIR из make.conf; поправить SNAPSHOT_GPG_KEY.

пока на этом вроде всё.

А, ещё убери оттуда update-eix, его вызов оттуда не юниксвей, лучше сделай алиас, или обертку над этими узкоспецифичными скриптами.

Удачи

Re: emerge-delta-webrsync с проверкой pgp-подписей от SATtva

29.05.2009 19:24

в общем, понятно, ты думаешь --homedir == $HOME, а на самом деле это дира где конфиги лежат с ключами: --homedir $HOME/.gnupg.

Ну здрасти, а что я с самого начала передавал gpg --homedir? Тот самый /root/.gnupg. Если параметр --homedir опущен, то да, gpg действительно выстраивает путь к конфигу как $HOME/.gnupg. Но здесь-то он был задан явно, как в твоём последнем тесте.

А, ещё убери оттуда update-eix, его вызов оттуда не юниксвей, лучше сделай алиас, или обертку над этими узкоспецифичными скриптами.

А, это моё хозяйство, затесалось из рабочего скрипта. Исправлю, остальные замечания тоже учту.

Re: emerge-delta-webrsync с проверкой pgp-подписей от SATtva

30.05.2009 19:21

Скрипт ещё раз обновил. Внесены изменения:

- Отпечаток ключа указывается в переменной SNAPSHOT_GPG_KEY в /etc/make.conf.
- Пусть к домашнему каталогу gpg задаётся в стандартной переменной PORTAGE_GPG_DIR в /etc/make.conf. Если переменная не задана или пуста, используется умолчальный путь /root/.gnupg.
- Введена проверка на наличие переменной SNAPSHOT_GPG_KEY. Если отпечаток не указан, исполнение прерывается с ошибкой.
- Вызов update-eix убран из скрипт.

Re: emerge-delta-webrsync с проверкой pgp-подписей от SATtva

31.05.2009 22:24

До кучи сделал ещё одно изменение:

- Переменная DELTASYNC_MIRRORS теперь опциональна. При её отсутствии используются зеркала, заданные в GENTOO_MIRRORS.

Гентушные PGP-ключи от SATtva

02.09.2009 13:37

Вот они, оказывается, где:
http://www.gentoo.org/proj/en/releng/#doc_chap5

Re: emerge-delta-webrsync с проверкой pgp-подписей от SATtva

10.11.2009 18:27

Только что заметил, что в ходе зачистки сайта от лишних страниц за одно снёс и каталог со скриптом. Уже восстановил.

Бэкпорт багфикса от SATtva

04.01.2010 18:26

Добавлен фикс для Проблемы-2010 (#299443) из официального обновления.
Оставить комментарий
Заголовок:

Текст:

Ваше имя:

Ваш e-mail:


Код подтверждения: