Как добавить ключи в 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



