Как добавить ключи в Linux
Для добавления ключей используется утилита gpg
. Обратите внимание, что ключи могут быть двух типов:
ASCII
с расширением.asc
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