# pacman-key (Русский)

pacman-key — это новая утилита, входящая в pacman 4. Она позволяет пользователю управлять списком доверенных ключей для менеджера пакетов pacman, используя новую реализацию подписи пакетов. Для дополнительных сведений смотрите блогозаписи [1][2][3][4] и вики-страницу package signing proposal.

## Общий обзор ключей и отпечатков

PGP-ключ позволяет разработчику однозначно подписать свой пакет, гарантируя, что пакет сделал именно он, а не кто-то, кто выдает себя за разработчика.

### Отпечаток или идентификатор ключа

- Отпечаток — это короткое представление ключа, которое может использоваться для его идентификации, не показывая при этом весь ключ (иногда очень длинный). Это что-то вроде "имени" ключа. В документации pacman его называют идентификатором ключа (keyid).
- Форматы отпечатков
  - Отпечатки формата "6645 B0A8 C700 5E78 DB1D 7864 F99F FE0F EAE9 99BD" требуют сжатия путем удаления пробелов: "6645B0A8C7005E78DB1D7864F99FFE0FEAE999BD"
  - Приставка "0x" необязательна. Её присутствие не влияет на корректную работу.

### Серверы ключей

- Серверы PGP-ключей хранят файлы ключей и позволяют искать ключи по их отпечаткам. Указать сервер ключей можно опцией `--keyserver`.
- hkp://pgp.mit.edu:11371 является одним из серверов PGP-ключей, который используют разработчики Archlinux.
- Стандартный сервер ключей может быть изменен в файле `/etc/pacman.d/gnupg/gpg.conf`.

## Настройка

Чтобы полностью отключить проверку PGP-ключей, добавьте следующую строку в раздел [Options] файла `/etc/pacman.conf`:

    SigLevel     = Never

Для начальной настройки хранилища ключей выполните:

    # pacman-key --init

Директива SigLevel принимает 3 основных значения:

- Required, обязательно выполнять проверку сигнатур;
- Optional (по умолчанию), проверять сигнатуры, если они имеются, но также допускать пакеты без подписей;
- Never, никогда не выполнять проверку сигнатур.

## Добавление ключей

Когда pacman встречает незнакомые ключи на пакетах, он предлагает пользователю добавить этот ключ. Ключи можно также скачать вручную и выполнить '`pacman-key -a файл-ключа`' или получить файл ключа с сервера с помощью отпечатка. Второй способ легче и объяснен ниже.

- Найдите отпечаток ключа разработчика на странице разработчиков в строке PGP Key. Текст ссылки является отпечатком.
- Выполните команду `pacman-key -r <отпечаток> --keyserver <сервер ключей>`. Вместо <сервер ключей> укажите "hkp://pgp.mit.edu".
- `pacman-key -l` выведет список добавленных ключей.
- Таким образом добавятся ключи в брелок, но останется "неизвестный" уровень доверия.

## Подписывание ключей

Чтобы ключи работали, их уровень доверия нужно изменить.

Чтобы подписать ключ локально, выполните:

    # pacman-key --lsign-key <идентификатор ключа>

Так же это можно сделать gpg командой tsign или `pacman-key --edit-key "<отпечаток>"` и далее `tsign`

Pacman'у можно сказать, чтобы он доверял всем ключам брелока. Для этого добавьте ОДНУ из следующих строк в раздел [Options] файла `/etc/pacman.conf`

    SigLevel     = Required TrustAll
    SigLevel     = Optional TrustAll

## Скрипты для добавления требуемых PGP-ключей

Когда мастер-ключи добавлены, вам не нужно проверять PGP-ключи каждого разработчика Arch Linux или Доверенного Пользователя, как и тех, которые подписаны, как минимум, тремя мастер-ключами.

### Скрипт для добавления всех PGP мастер-ключей

Этот скрипт добавляет мастер-ключи в хранилище pacman и устанавливает уровень доверия в "marginal" (3).

Важно: Используйте с осторожностью. Пожалуйста убедитесь, что ключи, указанные ниже, совпадают с мастер-ключами. Также возможно, что кто-то взломает страницу мастер-ключей и заменит на свои поддельные, таким образом сделав весь процесс подписания бессмысленным.

Выполняйте от root'а или добавьте sudo перед командой pacman-key.

    for key in FFF979E7 CDFD6BB0 4C7EA887 6AC6A4C2 824B18E8; do
        pacman-key --recv-keys $key
        pacman-key --lsign-key $key
        printf 'trust\n3\nquit\n' | gpg --homedir /etc/pacman.d/gnupg/ \
            --no-permission-warning --command-fd 0 --edit-key $key
    done

### Скрипт для добавления всех PGP-ключей со Страницы разработчиков

Данный скрипт использует curl чтобы скачать страницу Разработчиков и извлечь отпечатки PGP-ключей, выполняет команду `pacman --recv-keys`, используя `pgp.mit.edu` в качестве сервера ключей, чтобы добавить ключи в хранилище pacman'а.

Важно: Используйте с осторожностью. Также возможно, что кто-то взломает страницу Разработчиков и заменит ключи на свои поддельные, таким образом сделав весь процесс подписания бессмысленным.

Выполняйте от root'а или добавьте sudo перед командой pacman-key.

    curl https://www.archlinux.org/developers/ |
    awk -F\" '(/pgp.mit.edu/) {sub(/.*search=0x/,"");print $1}' |
    xargs pacman-key --recv-keys

### Скрипт для добавления всех PGP-ключей со страницы Доверенных Пользователей

Данный скрипт использует curl чтобы скачать страницу Доверенных Пользователей и извлечь отпечатки PGP-ключей, выполняет команду `pacman --recv-keys`, используя `pgp.mit.edu` в качестве сервера ключей, чтобы добавить ключи в хранилище pacman'а.

Важно: Используйте с осторожностью. Также возможно, что кто-то взломает страницу Доверенных Пользователей и заменит ключи на свои поддельные, таким образом сделав весь процесс подписания бессмысленным.

Выполняйте от root'а или добавьте sudo перед командой pacman-key.

    curl https://www.archlinux.org/trustedusers/ |
    awk -F\" '(/pgp.mit.edu/) {sub(/.*search=0x/,"");print $1}' |
    xargs pacman-key --recv-keys

### Скрипт для добавления всех PGP-ключей (и Разработчиков, и Доверенных Пользователей)

Важно: Используйте с осторожностью. Также возможно, что кто-то взломает страницу Разработчиков и/или страницу Доверенных Пользователей и заменит ключи на свои поддельные, таким образом сделав весь процесс подписания бессмысленным.

    curl https://www.archlinux.org/{developers,trustedusers}/ |
    awk -F\" '(/pgp.mit.edu/) {sub(/.*search=0x/,"");print $1}' |
    xargs pacman-key --recv-keys

## Потенциальное решение, если не удается импортировать ключи

Проблема может возникнуть, если некоторые Интернет-провайдеры блокируют порт, используемый для импорта PGP-ключей.

Отредактируйте `/etc/pacman.d/gnupg/gpg.conf`, заменив `keyserver hkp://keys.gnupg.net` на `keyserver hkp://pgp.mit.edu:11371`. Всё должно заработать.

Category:

- Package management (Русский)