UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

251 lines (148 loc) 25.2 kB
Ссылки по теме * [DeveloperWiki:Package signing](/index.php/DeveloperWiki:Package_signing "DeveloperWiki:Package signing") **Состояние перевода:** На этой странице представлен перевод статьи [pacman/Package signing](/index.php/Pacman/Package_signing "Pacman/Package signing"). Дата последней синхронизации: 21 октября 2015‎. Вы можете [помочь](/index.php/ArchWiki_Translation_Team_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ArchWiki Translation Team (Русский)") синхронизировать перевод, если в английской версии произошли [изменения](https://wiki.archlinux.org/index.php?title=Pacman/Package_signing&diff=0&oldid=405795). Основная статья: [pacman (Русский)](/index.php/Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Pacman (Русский)"). Чтобы определить, является ли пакет подлинным, *pacman* использует [ключи GnuPG](http://www.gnupg.org/) в модели [сеть доверия](http://www.gnupg.org/gph/en/manual.html#AEN385) ("web of trust"). В настоящее время существует пять [ключей мастер-подписи](https://www.archlinux.org/master-keys/). По меньшей мере три из этих ключей мастер-подписи используются для подписи собственных ключей разработчика и доверенного пользователя, которые потом, в свою очередь, используются для подписи их пакетов. Пользователь также имеет уникальный ключ PGP, который генерируется, когда вы устанавливаете *pacman-key*. Так сеть доверия связывает пользовательский ключ с пятью мастер-ключами. Примеры сетей доверия: * **Клиентские пакеты**: вы создали свой пакет сами и подписали его своим собственным ключом * **Неофициальные пакеты**: разработчик создал пакет и подписал его. Вы используете свой ключ для подписи этого ключа разработчика * **Официальные пакеты**: разработчик создал пакет и подписал его. Ключ разработчика был подписан мастер-ключами Arch Linux'a. Вы использовали свой ключ для подписи мастер-ключей и доверяете им поручиться за разработчика **Примечание:** Протокол HKP использует порт 11371/tcp для связи. Чтобы получить подписанные ключи от серверов (при помощи *pacman-key*), требуется этот порт ## Contents * [1 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0) * [1.1 Настройка pacman'a](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_pacman.27a) * [1.2 Инициализация связки ключей](#.D0.98.D0.BD.D0.B8.D1.86.D0.B8.D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F_.D1.81.D0.B2.D1.8F.D0.B7.D0.BA.D0.B8_.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.B9) * [2 Управление связкой ключей](#.D0.A3.D0.BF.D1.80.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D1.81.D0.B2.D1.8F.D0.B7.D0.BA.D0.BE.D0.B9_.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.B9) * [2.1 Проверка пяти мастер-ключей](#.D0.9F.D1.80.D0.BE.D0.B2.D0.B5.D1.80.D0.BA.D0.B0_.D0.BF.D1.8F.D1.82.D0.B8_.D0.BC.D0.B0.D1.81.D1.82.D0.B5.D1.80-.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.B9) * [2.2 Добавление ключей разработчика](#.D0.94.D0.BE.D0.B1.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.B9_.D1.80.D0.B0.D0.B7.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D1.87.D0.B8.D0.BA.D0.B0) * [2.3 Добавление неофициальных ключей](#.D0.94.D0.BE.D0.B1.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BD.D0.B5.D0.BE.D1.84.D0.B8.D1.86.D0.B8.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D1.85_.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.B9) * [2.4 Отладка при помощи gpg](#.D0.9E.D1.82.D0.BB.D0.B0.D0.B4.D0.BA.D0.B0_.D0.BF.D1.80.D0.B8_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D0.B8_gpg) * [3 Решение проблем](#.D0.A0.D0.B5.D1.88.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC) * [3.1 Не удается импортировать ключи](#.D0.9D.D0.B5_.D1.83.D0.B4.D0.B0.D0.B5.D1.82.D1.81.D1.8F_.D0.B8.D0.BC.D0.BF.D0.BE.D1.80.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D1.82.D1.8C_.D0.BA.D0.BB.D1.8E.D1.87.D0.B8) * [3.2 Отключение проверки подписи](#.D0.9E.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D0.B2.D0.B5.D1.80.D0.BA.D0.B8_.D0.BF.D0.BE.D0.B4.D0.BF.D0.B8.D1.81.D0.B8) * [3.3 Сброс всех ключей](#.D0.A1.D0.B1.D1.80.D0.BE.D1.81_.D0.B2.D1.81.D0.B5.D1.85_.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.B9) * [3.4 Удаление залежавшихся пакетов](#.D0.A3.D0.B4.D0.B0.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B7.D0.B0.D0.BB.D0.B5.D0.B6.D0.B0.D0.B2.D1.88.D0.B8.D1.85.D1.81.D1.8F_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2) * [3.5 Обновление ключей через прокси](#.D0.9E.D0.B1.D0.BD.D0.BE.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.B9_.D1.87.D0.B5.D1.80.D0.B5.D0.B7_.D0.BF.D1.80.D0.BE.D0.BA.D1.81.D0.B8) * [3.6 gpg: keyserver receive failed: No dirmngr](#gpg:_keyserver_receive_failed:_No_dirmngr) * [4 Смотрите также](#.D0.A1.D0.BC.D0.BE.D1.82.D1.80.D0.B8.D1.82.D0.B5_.D1.82.D0.B0.D0.BA.D0.B6.D0.B5) ## Установка ### Настройка pacman'a Опция `SigLevel` в файле `/etc/pacman.conf` определяет, сколько доверия требуется для установки пакета. Чтобы получить подробное объяснение того, что такое `SigLevel`, смотрите [страницу справочного руководства pacman.conf](https://www.archlinux.org/pacman/pacman.conf.5.html#_package_and_database_signature_checking) и комментарии в самом файле. Проверка подписи может быть установлена глобально или для каждого репозитория в отдельности. Если `SigLevel` установлен глобально в разделе `[options]`, требуя подписи всех пакетов, то пакеты, созданные вами, также будет нужно подписывать при помощи *makepkg*. **Примечание:** Хотя все официальные пакеты теперь подписаны, на июнь 2012 подписывание баз данных - все еще в процессе. Если установлено значение `Required`, тогда также требуется установить `DatabaseOptional` Конфигурация по умолчанию может использоваться для того, чтобы устанавливать только те пакеты, которые подписаны доверенными ключами: `/etc/pacman.conf` `SigLevel = Required DatabaseOptional` Это следствие того, что параметр `TrustedOnly` используется в *pacman* по умолчанию, т.е. результат получится таким же, как и в этом примере: ``` SigLevel = Required DatabaseOptional TrustedOnly ``` Вышеупомянутое может быть достигнуто также на уровне репозитария, далее в файле конфигурации: ``` [core] SigLevel = PackageRequired Include = /etc/pacman.d/mirrorlist ``` явно добавляет проверку подписи для пакетов репозитария, но не требует подписи от базы данных. Значение `Optional` выключит для данного репозитория используемое глобально значение `Required`. **Важно:** Значение SigLevel `TrustAll` существует только для целей отладки и делает слишком легким доверие ключам, которые не были проверены. Вы должны использовать `TrustedOnly` для всех официальных репозитариев ### Инициализация связки ключей Для установки связки ключей *pacman'*a используйте: ``` # pacman-key --init ``` Для этой инициализации требуется [энтропия](https://en.wikipedia.org/wiki/ru:%D0%98%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA_%D1%8D%D0%BD%D1%82%D1%80%D0%BE%D0%BF%D0%B8%D0%B8 "wikipedia:ru:Источник энтропии"). Двигая мышью по кругу, нажимая случайные символы на клавиатуре или производя действия, связанные с диском (например, запустив в другой консоли `ls -R /`, `find / -name foo` или `dd if=/dev/sda8 of=/dev/tty7`), вы генерируете энтропию. Если ваша система не имеет достаточно энтропии, эта ступень может занять часы, а если вы активно генерируете энтропию, это будет выполнено намного быстрее. Создаваемая случайная последовательность чисел используется для создания связки ключей (`/etc/pacman.d/gnupg`) и подписывающего ключа GPG вашей системы. **Примечание:** Если вы запускаете `pacman-key --init` на компьютере, который не генерирует много энтропии (например, удаленный сервер), генерация ключа может занять очень много времени. Для выработки псевдоэнтропии установите на целевую машину [haveged](https://www.archlinux.org/packages/?name=haveged) или [rng-tools](https://www.archlinux.org/packages/?name=rng-tools). Перед запуском `pacman-key --init` от имени суперпользователя [запустите](/index.php/%D0%97%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Запустите") службу `haveged.service` ## Управление связкой ключей ### Проверка пяти мастер-ключей Начальная установка ключей выполняется при помощи команды `pacman-key --populate archlinux` (от имени суперпользователя). Потратьте время на проверку [подписывающих мастер-ключей](https://www.archlinux.org/master-keys/) при запросе, поскольку они используются для совместной подписи (и, следовательно, доверия) со всеми остальными ключами разработчика. Ключи PGP слишком велики (2048 бит или больше) для людей, чтобы работать с ними, поэтому они обычно хешируются, чтобы сделать из них шестнадцатиричный 40-значный отпечаток, который можно использовать для проверки вручную, что два ключа одинаковы. Последние восемь цифр отпечатка служат как имя для ключа, известных как "(краткое) имя или ID ключа" (последние *шестнадцать* цифр отпечатка могут быть "длинное ID имя ключа"). ### Добавление ключей разработчика Ключи официальных разработчиков и доверенных пользователей подписываются мастер-ключами, так что вам не нужно использовать *pacman-key*, чтобы подписывать их самостоятельно. Когда *pacman* встречает ключ, который он не может распознать, он предложит скачать его с сервера ключей (`keyserver`), указанного в файле `/etc/pacman.d/gnupg/gpg.conf` или в опции `--keyserver` командной строки. [Список серверов ключей](https://en.wikipedia.org/wiki/ru:%D0%A1%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B9 "wikipedia:ru:Сервер криптографических ключей") сопровождается Википедией. Когда вы скачали ключ разработчика, вам не нужно будет скачивать его снова, и он может быть использован для проверки любого пакета, подписанного этим разработчиком. **Примечание:** Пакет [archlinux-keyring](https://www.archlinux.org/packages/?name=archlinux-keyring), являющийся зависимостью для [pacman](https://www.archlinux.org/packages/?name=pacman), содержит последние ключи. Однако, ключи также могут быть обновлены вручную командой `pacman-key --refresh-keys` (от имени суперпользователя). При выполнении этой команды ваш локальный ключ будет также просмотрен удаленным сервером ключей и вы получите сообщение, что он не найден. Об этом вам не стоит переживать ### Добавление неофициальных ключей Вы можете использовать этот способ, например, чтобы добавить свой ключ в связку ключей *pacman'*а или включить подписанный [неофициальный репозиторий](/index.php/Unofficial_user_repositories "Unofficial user repositories"). **Примечание:** Возможно, сначала вам потребуется выполнить команду `dirmngr` от имени суперпользователя, смотрите раздел [#gpg: keyserver receive failed: No dirmngr](#gpg:_keyserver_receive_failed:_No_dirmngr) Сначала получите ID ключа (`keyid`) от собственника. Потом вам нужно добавить ключ в связку: * Если ключ найден на сервере ключей, импортируйте его командой: `# pacman-key -r *keyid*` * Если у вас есть ссылка на файл ключа, загрузите его и выполните: `# pacman-key --add */путь/к/скачанному/файлу/ключа*` Всегда старайтесь проверить отпечаток, как бы вы делали с мастер-ключом или любым другим ключом, который собираетесь подписать: ``` # pacman-key -f *keyid* ``` Наконец, вам нужно подписать импортированный ключ на локальном уровне: ``` # pacman-key --lsign-key *keyid* ``` Теперь вы доверяете этому ключу подписывать пакеты. ### Отладка при помощи gpg Для отладки вы можете получить доступ к связке ключей *pacman'*а напрямую при помощи *gpg*, например, так: ``` # gpg -- homedir /etc/pacman.d/gnupg --list-keys ``` ## Решение проблем **Важно:** Работа *pacman-key* зависит от [времени](/index.php/Time_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Time (Русский)"). Если системные часы неверны, вы увидите такие ошибки: ``` error: ИмяПакета: подпись от "User <email@archlinux.org>" неверна error: не удалось совершить транзакцию (неверный или испорченный пакет (подпись PGP)) Случилась ошибка, пакет не обновлен. ``` ### Не удается импортировать ключи У этой проблемы могут быть разные причины: * Устаревший пакет [archlinux-keyring](https://www.archlinux.org/packages/?name=archlinux-keyring) * Неправильная дата * Ваш интернет-провайдер блокировал порт, используемый для импорта ключей PGP * Кэш *pacman'*a содержит копии неподписанных с предыдущей попытки пакетов Во время синхронизации обновления вы можете застрять из-за устаревшего пакета [archlinux-keyring](https://www.archlinux.org/packages/?name=archlinux-keyring). Сначала попробуйте [обновить систему](/index.php/Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.9E.D0.B1.D0.BD.D0.BE.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2 "Pacman (Русский)"), это может помочь. Если это не помогает, и если ваше системное время в порядке, можете попробовать переключиться на сервер ключей MIT, который предоставляет другой порт. Чтобы это сделать, отредактируйте файл `/etc/pacman.d/gnupg/gpg.conf`, заменив значение `keyserver` на следующее: ``` keyserver hkp://pgp.mit.edu:11371 ``` Если не помогает и это, измените `keyserver` на kjsl, который предоставляет этот сервис через порт 80 (порт HTTP), который всегда должен оставаться разблокированным: ``` keyserver hkp://keyserver.kjsl.com:80 ``` Если у вас отключен IPv6, *gpg* не сможет работать, если найдет какой-то адрес IPv6\. В этом случае используйте сервер ключей для исключительно IPv4, такой как: ``` keyserver hkp://ipv4.pool.sks-keyservers.net:11371 ``` Если вы вдруг забыли выполнить `pacman-key --populate archlinux`, вы можете получить некоторые ошибки при импортировании ключей. Если ничего из этого не помогает, возможно, ваш кеш *pacman'*a, располагающийся в каталоге `/var/cache/pacman/pkg/`, содержит неподписанные с предыдущих попыток пакеты. Очистите кеш вручную или выполните: ``` # pacman -Sc ``` что удалит все кешированные пакеты, которые не были установлены. ### Отключение проверки подписи **Важно:** Используйте с осторожностью. Отключение подписи пакета позволит *pacman'*у устанавливать недоверенные пакеты автоматически Если вас не заботит подпись пакетов, вы можете полностью отключить проверку подписи PGP. Отредактируйте файл `/etc/pacman.conf`, раскомментировав следующую строку в разделе `[options]`: ``` SigLevel = Never ``` Вам нужно также раскомментировать любые установки SigLevel, зависимые от репозитариев, потому что они перевешивают глобальные установки. Это приведет к отсутствию проверки подписи, как было свойственно пакману до четвертой версии. Если вы решите сделать так, вам не нужно устанавливать связку ключей при помощи *pacman-key*. Вы сможете изменить этот выбор позднее, если решите включить проверку пакетов. ### Сброс всех ключей Если вы захотите удалить или сбросить все ключи, установленные в вашей системе, можете удалить каталог `/etc/pacman.d/gnupg` и перезапустить `pacman-key --init` и следуя процедуре, добавляющей ключи предпочтительным образом. ### Удаление залежавшихся пакетов Если те же пакеты продолжают не работать и вы уверены, что сделали правильно все дела *pacman-key*, попробуйте удалить пакеты при помощи команды `rm /var/cache/pacman/pkg/*имя_плохого_пакета**`, чтобы они были скачаны заново. Это может в самом деле оказаться решением, если вы получаете сообщение вида `error: linux: signature from "<Some.Person@example.com>" is invalid` или подобное при обновлении (например, вы можете не быть, наконец, жертвой атаки MITM, ваш скачанный файл просто поврежден). ### Обновление ключей через прокси В *gnupg* есть [ошибка](https://bugs.g10code.com/gnupg/issue1786), не дающая обновлять ключи через http-прокси. Для разрешения этой проблемы вы можете сделать следующее: 1. Измените /etc/hosts: `127.0.0.1 pool.sks-keyservers.net` 2. Установите туннель при помощи [socat](https://www.archlinux.org/packages/?name=socat). Запускать его необходимо от имени суперпользователя, потому что вам нужно прослушивание порта 80 TCP: `# socat TCP-LISTEN:80,reuseaddr,fork PROXY:localhost:pool.sks-keyservers.net:80,proxyport=3128` 3. Обновите ключи: `# pacman-key --refresh-keys` Верните назад прежнюю конфигурацию, когда прокси больше не будет нужно. ### gpg: keyserver receive failed: No dirmngr Для получения дополнительной информации смотрите сообщение об ошибке [FS#42798](https://bugs.archlinux.org/task/42798). Запустите: ``` # dirmngr < /dev/null ``` Или по другому: создайте файл `/root/.gnupg/dirmngr_ldapservers.conf` [[1]](https://bbs.archlinux.org/viewtopic.php?pid=1480388#p1480388). ## Смотрите также * [DeveloperWiki:Package Signing Proposal for Pacman](/index.php/DeveloperWiki:Package_Signing_Proposal_for_Pacman "DeveloperWiki:Package Signing Proposal for Pacman") * [Pacman Package Signing – 1: Makepkg and Repo-add](http://allanmcrae.com/2011/08/pacman-package-signing-1-makepkg-and-repo-add/) * [Pacman Package Signing – 2: Pacman-key](http://allanmcrae.com/2011/08/pacman-package-signing-2-pacman-key/) * [Pacman Package Signing – 3: Pacman](http://allanmcrae.com/2011/08/pacman-package-signing-3-pacman/) * [Pacman Package Signing – 4: Arch Linux](http://allanmcrae.com/2011/12/pacman-package-signing-4-arch-linux/)