Полный цикл в digital

Как добавить ключи в Linux

Для добавления ключей используется утилита gpg. Обратите внимание, что ключи могут быть двух типов:

  1. ASCII с расширением .asc
  2. OpenPGP с расширением .gpg

Утилита apt может работать только с ключами в формате OpenPGP и расширением .gpg. Поэтому нельзя просто скопировать полученный ключ в папку /etc/apt/trusted.gpg.d или /etc/apt/keyrings.

Обычно ключи распространяются в формате ASCII, вы можете скачать его, конвертирвать и уже затем добавить в систему с помощью .gpg. Например, выполните такую команду для загрузки ключа Google Chrome:

wget https://dl.google.com/linux/linux_signing_key.pub

А затем конвертируйте его в бинарный файл:

cat linux_signing_key.pub | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/chrome.gpg

То же самое можно сделать одной командой:

wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /etc/apt/keyrings/chrome.gpg

Нужно добавить опцию singed-by для репозитория. Например, для того же Google Chrome новая команда добавления репозитория будет выглядеть так:

sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list' 

После этого вы можете проверить что всё заработало и ключ распознается корректно.

Если же ключ распространяется в бинарном формате, вы сразу же можете поместить его в хранилище ключей:

wget -q -O - https://url | sudo tee /etc/apt/trusted.gpg.d/reponame.gpg

Как добавить ключи для PPA

Ссылка на PPA. Поскольку apt-add-repository использует apt-key, теперь нельзя использовать эту утилиту для добавления PPA. Простого способа получить путь к репозиторию и его ключ в командной строке по его имени нет, но зато вся необходимая информация есть на странице репозитория. Просто раскройте пункт Technical details about this PPA под командами добавления репозитория. Например для Firefox:

Здесь есть отпечаток ключа, в данном случае AF316E81A155146718A6FBD7A6DCF7707EBC211F. Вы можете добавить ключ в систему с помощью следующей команды:

sudo gpg --homedir /tmp --no-default-keyring --keyring /etc/apt/keyrings/firefox.gpg --keyserver keyserver.ubuntu.com --recv-keys AF316E81A155146718A6FBD7A6DCF7707EBC211F

После этого надо добавить запись об этом репозитории в /etc/sources.list.d. На странице PPA выберите версию вашего дистрибутива и скопируйте строки над ключом:

Создайте файл /etc/apt/sources.list.d/firefox.list и вставьте в него то, что было скопировано.

Если вы решили не хранить ключи в /etc/apt/trusted.gpg.d, то вам также нужно прописать путь к ключу репозитория с помощью опции signed-by. Если ключ был сохранен в /etc/apt/keyrings/firefox.gpg, то результат будет выглядеть вот так:

/etc/apt/sources.list.d/firefox.listdeb [signed-by=/etc/apt/keyrings/firefox.gpg] https://ppa.launchpadcontent.net/ubuntu-mozilla-security/ppa/ubuntu jammy main
deb-src [signed-by=/etc/apt/keyrings/firefox.gpg] https://ppa.launchpadcontent.net/ubuntu-mozilla-security/ppa/ubuntu jammy main

Как исправить Key is stored in legacy trusted.gpg keyring

Ошибка означает, что ключ стороннего репозитория хранится в устаревшем хранилище ключей /etc/apt/trusted.gpg. Все пакеты в сторонних репозиториях, которые вы можете добавить в Ubuntu, в том числе и из PPA, должны быть подписаны GPG ключом, который находится в списке доверенных ключей системы. При добавлении репозитория, добавляется не только запись о репозитории в файл /etc/sources.list или /etc/sources.list.d, но и его ключ, который сохранялся по умолчанию в /etc/apt/trusted.gpg.

На данный момент объявлена устаревшей утилита apt-key, а также хранение ключей сторонних репозиториев в общем файле /etc/apt/trusted.gpg. В то же время хранить ключи в /etc/apt/trusted.gpg.d всё ещё можно. И многие репозитории так и делают.

Вы могли заметить, что раньше во многих инструкциях рекомендовалось использовать apt-key для добавления ключа, а теперь используется утилита gpg. Фактически, для управления ключами и раньше использовалась утилита gpg, а apt-key выступала в роли оболочки и автоматически указывала нужные параметры. Теперь же нужно всё делать явно. Поэтому для системы ничего не поменялось и новые команды gpg можно использовать в старых версиях дистрибутивов.

Для того чтобы убрать это предупреждение, избежать его появления в будущем и сделать всё правильно, вам надо выполнить несколько шагов:

  • Забыть про apt-key и добавлять ключи вручную с помощью gpg
  • Забыть про apt-add-repository и добавлять PPA вручную
  • Перенести все ключи из /etc/apt/trusted.gpg/ в /etc/apt/keyrings и прописать путь к ключу для каждого репозитория

Перенос ключей в /etc/apt/keyrings (правильный способ)

Для того чтобы система не выдавала предупреждение о том, что способ хранения ключей устарел или в будущем улучшить безопасность, нужно переместить все ключи сторонних репозиториев из trusted.gpg в папку /etc/apt/keyrings и прописать путь к ключам для каждого репозитория в /etc/apt/sources.list.d. Сначала надо найти все ключи, которые надо перемещать. Для этого выполните команду:

sudo apt-key list

Тут будут выведены все доверенные ключи в системе. Нужно их просмотреть и найти только те, которые хранятся в trusted.gpg. Обычно в выводе утилиты все ключи разделены по файлам и ключи из trusted.gpg будут в самом верху. В данном примере, это ключ от репозитория MySQL. Кроме того, здесь есть ключ от Google Chrome, но он находится в trusted.gpg.d и apt это пока устраивает. Но для улучшения безопасности в будущем вы можете его тоже переместить в /etc/apt/keyrings.

Для того чтобы экспортировать ключ в отдельный файл найдите строчку pub и возьмите из неё последние 8 цифр. В данном примере это 3A79BD29. Затем выполните такую команду:

sudo apt-key export 3A79BD29 | sudo gpg --dearmour -o /etc/apt/keyrings/mysql.gpg

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

Такую процедуру надо проделать с каждым ключом. Затем для каждого репозитория нужно прописать ключ, которым которым он будет проверяться. В данном примере репозиторий добавлен с помощью файла /etc/apt/sources.list.d/mysql.list. Для каждой строчки deb в этом файле нужно добавить опцию signed-by с путем к ключу:

/etc/apt/sources.list.d/mysql.list/etc/apt/sources.list.d/mysql.list
deb [signed-by=/etc/apt/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu/ jammy mysql-apt-config
deb [signed-by=/etc/apt/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu/ jammy mysql-8.0
deb [signed-by=/etc/apt/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu/ jammy mysql-tools

Если в файле уже есть другие опции, то каждая новая опция должна быть отделена запятой. После этого можно удалить ключ из хранилища trusted.gpg:

sudo apt-key del 3A79BD29
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг